gpt4 book ai didi

mysql - “Execute stmt”存储的过程中-没有错误但没有插入的记录

转载 作者:行者123 更新时间:2023-12-03 08:39:57 26 4
gpt4 key购买 nike

我之前有一个已关闭的问题...但是我设法解决了我的错误,因此希望这是一个更具体的问题。
在我的过程中,我通过在多个迭代组上串联字符串来生成包含1000条记录的插入语句。

    ....
....
SET svalue = CONCAT('(',QUOTE(fHash), ',', QUOTE(cName), ',', QUOTE(fDescription), ',', QUOTE(fName), ',', QUOTE(fSize), ',', QUOTE(fVersion), ',', QUOTE(pLanguage), ',', QUOTE(pName), ',', QUOTE(pVersion), ',', QUOTE(sig),'),');
SET svalues = CONCAT(COALESCE(svalues, ''), svalue);
迭代组中的最后一个字符串不包含“,”。
在我的代码中,我跟踪迭代的记录数以及所需的迭代总数。
SELECT CEILING(CAST(@rec_count as float)/1000) INTO l_icnt;
SET l_cnt = @rec_count ;
@rec_count =选择计数(*)。循环l_cnt中的每个迭代都减去1,并且每次迭代都会进行检查:
IF CEILING(CAST(l_cnt as float)/1000) = l_icnt - 1 THEN
....
如果为true,则除了应执行的插入操作外,迭代计数还减少一:
  IF .... THEN
SET svalue = CONCAT('(',QUOTE(fHash), ',', QUOTE(cName), ',', QUOTE(fDescription), ',', QUOTE(fName), ',', QUOTE(fSize), ',', QUOTE(fVersion), ',', QUOTE(pLanguage), ',', QUOTE(pName), ',', QUOTE(pVersion), ',', QUOTE(sig),')');
SET svalues = CONCAT(COALESCE(svalues, ''), svalue);


SET @s = CONCAT('INSERT INTO scanfiles.ud_distinctfiles2(fileId, companyName, fileDescription, fileName, fileSize, fileVersion, productLanguage, productName, productVersion, signature) VALUES', svalues);
call debug_msg(TRUE, CONCAT('insert statement is ', @s));
prepare stmt from @s;
execute stmt;
deallocate prepare stmt;

SET @s = NULL;
SET svalues = NULL;
SET l_icnt = l_icnt -1 ;
ELSE
...
我的问题是,该过程运行时,不会发生任何错误,但是不会插入任何行。在插入之前,我捕获了最终语句并将其记录到表中。当我检查该行时,我看到该语句。我可以复制并粘贴到Workbench中并执行它而不会出现问题。
在之前的测试中,我发现直到我声明了sqlexception的退出处理程序之前,事情都以静默方式失败:
DECLARE exit handler for sqlexception
BEGIN
SHOW ERRORS;
GET DIAGNOSTICS CONDITION 1
@p1 = RETURNED_SQLSTATE, @p2 = MESSAGE_TEXT;
SELECT @p1 as RETURNED_SQLSTATE , @p2 as MESSAGE_TEXT;
ROLLBACK;
END;


DECLARE exit handler for sqlwarning
BEGIN
GET DIAGNOSTICS CONDITION 1
@p1 = RETURNED_SQLSTATE, @p2 = MESSAGE_TEXT;
SELECT @p1 as RETURNED_SQLSTATE , @p2 as MESSAGE_TEXT;
ROLLBACK;
END;
我是否缺少其他说明来捕获所有错误?请注意,我也尝试在IF块中启动和提交事务,结果是相同的。

最佳答案

好的,似乎局部变量不能与准备好的语句一起使用。我不确定这是在MySQL文档中明确声明的,但在MariaDB文档中确实如此。将变量svalues更改为用户定义的变量,该过程现在将填充表。

关于mysql - “Execute stmt”存储的过程中-没有错误但没有插入的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62625826/

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