2
我有一系列16个PREPARE,EXECUTE和DEALLOCATE语句(在存储过程中),每个语句都将行插入一个不同的表(表1至表16)。例如:mysql PREPARE语句
SET @Command1 = CONCAT("insert into TABLE1" , ...etc..);
PREPARE stmt1 FROM @Command1 ;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;
SET @Command1 = CONCAT("insert into TABLE2" , ...etc..);
PREPARE stmt1 FROM @Command1 ;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;
.
.
.
SET @Command1 = CONCAT("insert into TABLE16" , ...etc..);
PREPARE stmt1 FROM @Command1 ;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;
当我执行存储过程时,INSERT间歇性地工作。有时候所有16个插页都可以使用,但有时他们不会。
在存储过程中的最后一个呼叫时,第一插入件2(成TABLE1和TABLE2)和最后4个插入物(表13〜16)工作,而不是插入到表3至12
你能解释为什么吗?不能因为我使用相同的变量/句柄command1和stmt1?
这还不够[信息](http://tinyurl.com/so-hints)。发布生成的语句(可以通过将它们插入到另一个表中来记录它们),并查看它们在调用存储过程时是否生成任何警告或错误。另外,为什么你使用'CONCAT'而不是参数('EXECUTE ... USING ...')? – outis
在存储过程中,您可以简单地使用SELECT打印语句,如“SELECT @ Command1”;无需'INSERT INTO'其他表格。顺便说一句插入到另一个表调试为什么插入到表不起作用可能会很困难;) – wonk0
实际上有任何收益CONCATing一个字符串,并将其转换为准备好的语句?它绕开了参数绑定,并且你不会多次使用它... – Naltharial