繁体   English   中英

MySQL:在过程中准备/执行(concat)

[英]MySQL: Prepare/Execute in procedure (concat)

我有点迷茫,希望得到你的帮助。 我目前正在学习使用 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 //

如果我直接使用该语句,它工作正常。

这是一件奇怪的事情,但此时您需要使用用户定义的变量

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 //

手册指出:

在存储程序上下文中准备的语句不能引用存储过程或函数参数或局部变量,因为它们在程序结束时超出范围并且如果稍后在程序外执行该语句将不可用。 作为一种解决方法,请改为参考用户定义的变量,这些变量也具有会话作用域

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM