gpt4 book ai didi

mysql存储过程不写入预期数据

转载 作者:行者123 更新时间:2023-11-29 20:28:18 25 4
gpt4 key购买 nike

尽管拥有 Oracle PL/SQL 方面的经验,但我开始在 MySQL (MariaDB) 上开发应用程序,而我刚刚开始编写的一个简单过程并未按预期工作。

尽管执行了 DELETE 和 TRUNCATE 语句,但调用过程时 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

最佳答案

此条件不正确:

AND mdoc.tipo_movimento IN (p_tipoMovEntrada)

我假设p_tipoMovEntrada是一个逗号分隔的字符串,并且您正在尝试匹配其中的任何项目。但是 IN() 中的列表必须是源中的文字列表,它不会解析字符串参数中的逗号。将其更改为:

AND FIND_IN_SET(mdoc.tipo_movimento, p_tipoMovEntrada)

关于mysql存储过程不写入预期数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39183273/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com