我在我的存储过程中编写了以下动态查询,
FETCH cur1 INTO a1, ldt1, b1;
WHILE DONE = 0 DO
SET @s=CONCAT('UPDATE ',fname , ' SET connectedDateTime = ldt1,opid = b1
WHERE hq_conferee_seqno=a1 AND (LoggedDateTime <=ldt1 AND connectedDateTime IS NULL)');
FETCH cur1 INTO a1, ldt1, b1;
PREPARE stmt FROM @s;
EXECUTE stmt;
END WHILE;
CLOSE cur1;
当我编译存储时我没有收到任何错误。但是当我运行这段代码时,我收到的错误就像你的SQL语法有错误;检查与MySQL服务器版本对应的手册,以便在第1行的“NULL”附近使用正确的语法
会出现什么问题。请帮我。 提前谢谢。
答案 0 :(得分:0)
如the manual中所述:
局部变量仅在存储程序执行期间在范围内。在预准备语句中不允许引用它们,因为它们对于当前会话是全局的,并且在执行语句时变量可能已超出范围。
您应该将光标移到 user 变量中,并从预准备语句中引用它们(它们在连接期间保持在范围内),或者(更好)将它们传递给准备好的声明作为参数:
SET @s=CONCAT('UPDATE ',fname , ' SET connectedDateTime = ?,opid = ?
WHERE hq_conferee_seqno=? AND (LoggedDateTime <=? AND connectedDateTime IS NULL)');
FETCH cur1 INTO @a1, @ldt1, @b1;
PREPARE stmt FROM @s;
EXECUTE stmt USING @ldt1, @b1, @a1, @ldt1;