首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL:准备/执行过程(concat)

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

Stack Overflow用户
提问于 2020-02-27 13:44:18
回答 1查看 95关注 0票数 0

我迷路了,希望你能帮我。我目前正在学习如何使用Mysql,并获得了以下程序:

代码语言:javascript
复制
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.“附近出现错误。也许这只是一件容易的事,但我找不到。也不作任何让步地进行审判:

代码语言:javascript
复制
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 //

如果我直接使用这个语句,它就能正常工作。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-27 13:50:29

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

代码语言:javascript
复制
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 //

手册声明如下:

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60434660

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档