我迷路了,希望你能帮我。我目前正在学习如何使用Mysql,并获得了以下程序:
delimiter //
drop procedure price_update2 //
create procedure price_update2()
BEGIN
DECLARE n INT default 0;
DECLARE i INT default 1;
DECLARE cond varchar(255) default '';
SET cond = CONCAT('SELECT customer_id FROM customers LIMIT ',i,',1');
prepare stt FROM cond;
execute stt;
END //由于某些原因,我总是在"cond;execute stt.“附近出现错误。也许这只是一件容易的事,但我找不到。也不作任何让步地进行审判:
delimiter //
drop procedure price_update2 //
create procedure price_update2()
BEGIN
DECLARE n INT default 0;
DECLARE i INT default 1;
DECLARE cond varchar(255) default '';
SET cond = 'SELECT customer_id FROM customers LIMIT 1';
prepare stt FROM cond;
execute stt;
END //如果我直接使用这个语句,它就能正常工作。
发布于 2020-02-27 13:50:29
这是一件很奇怪的事情,但此时您需要使用用户定义变量:
delimiter //
drop procedure price_update2 //
create procedure price_update2()
BEGIN
DECLARE n INT default 0;
DECLARE i INT default 1;
SET @cond = CONCAT('SELECT customer_id FROM customers LIMIT ',i,',1');
prepare stt FROM @cond;
execute stt;
DEALLOCATE PREPARE stt; # don't forget to deallocate
END //手册声明如下:
在存储的程序上下文中准备的语句不能引用存储过程或函数参数或局部变量,因为这些参数或局部变量在程序结束时超出范围,如果稍后在程序之外执行该语句,则它们将不可用。作为一种解决办法,请参考用户定义的变量,这些变量也具有会话范围。
https://stackoverflow.com/questions/60434660
复制相似问题