0
Oracle PL/SQLでの経験にもかかわらず、MySQL(MariaDB)でアプリケーションを開発し始めています。MySQLのストアドプロシージャが予期したデータを書き込まない
DELETE文とTRUNCATE文は実行しますが、プロシージャの呼び出し時にINSERT文では何も起こりません。
私は間違いをしますか?データベースにINSERTを防止するパラメータがありますか?
手動でINSERTを実行すると、すべて正常に動作します。
前もって感謝します。
CREATE DEFINER = 'root'@'192.168.0.%'
PROCEDURE invent.InicializaInventario(IN p_empresa varchar(4),
IN p_competencia varchar(6),
IN p_tipoMovEntrada varchar(255),
IN p_tipoMovSaida varchar(255),
IN p_dataInicial VARCHAR(10),
IN p_dataFinal VARCHAR(10))
MODIFIES SQL DATA
BEGIN
/*
+---------------------------------------------------------------------------+
| Fase 1 |
+---------------------------------------------------------------------------+
| - Limpa registros de inventário existentes de processamentos anteriores |
| - Limpa tabela temporária de produtos |
| - Limpa tabela temporária de movimentos |
+---------------------------------------------------------------------------+
*/
DELETE
FROM inventario
WHERE codigo_empresa = p_empresa
AND competencia = p_competencia;
TRUNCATE TABLE movfiscal;
TRUNCATE TABLE prodfiscal;
/*
+---------------------------------------------------------------------------+
| Fase 2 |
+---------------------------------------------------------------------------+
| - povoa a tabela temporária de movimentos |
+---------------------------------------------------------------------------+
*/
INSERT INTO movfiscal
(codigo_empresa,
data_movimento,
codigo_produto,
tipo_movimento,
codigo_deposito,
numero_documento,
sequencia,
descricao_produto,
quantidade,
unidade_medida_produto,
qtde_nota,
unidade_medida_nota,
classificacao_fiscal,
cst,
origem_mercadoria,
situacao_tributaria,
preco_unitario,
e_s)
SELECT mdoc.codigo_empresa,
mdoc.data_movimento,
mdoc.codigo_produto,
mdoc.tipo_movimento,
mdoc.codigo_deposito,
mdoc.numero_documento,
mdoc.sequencia,
mdoc.descricao_produto,
mdoc.quantidade,
mdoc.unidade_medida_produto,
mdoc.qtde_nota,
mdoc.unidade_medida_nota,
mdoc.classificacao_fiscal,
mdoc.cst,
mdoc.origem_mercadoria,
mdoc.situacao_tributaria,
mdoc.preco_unitario,
mdoc.e_s
FROM mdoc
WHERE mdoc.codigo_empresa = p_empresa
AND mdoc.data_movimento >= p_dataInicial
AND mdoc.data_movimento <= p_dataFinal
AND mdoc.codigo_produto IS NOT NULL
AND mdoc.codigo_produto <> ''
AND mdoc.tipo_movimento IN (p_tipoMovEntrada)
ORDER BY mdoc.data_movimento,
mdoc.codigo_produto,
mdoc.tipo_movimento,
mdoc.codigo_deposito,
mdoc.numero_documento,
mdoc.sequencia;
END
こんにちはバマ、 - > '001'、 '005'、 '017'、 '050'、 '105':にそれを変更します。 FIND_IN_SETそれは問題を解決していない(mdoc.tipo_movimento、p_tipoMovEntrada)> 0 : でも、ラインを変更することです。 コメントや提案はありますか? ありがとうございます。 –
文字列の引用符を取り、 'FIND_IN_SET'は' 001,005,017,050,105'のような文字列を期待します。 – Barmar
Barmarさんが私の問題を完全に解決しました。 –