Code Bye

关于在存储过程中使用prepare的问题

mysql中使用prepare,惯常的例子是这样的:
mysql> PREPARE prod FROM "INSERT INTO examlple VALUES(?,?)"; 
mysql> SET @p="1"; 
mysql> SET @q="2"; 
mysql> EXECUTE prod USING @p,@q;

然而存储过程中使用prepare,为什么也是必须要使用@开头的变量。这让本人对存储过程的一下就凌乱了

delimiter \
create procedure pro01(in rang text)
begin
	set @que=concat("select * from bank where customerName in (",rang,");");
	prepare statement01 from @que;
	execute statement01;
end\
delimiter ;

而这样是不行

delimiter \
create procedure pro01(in rang text)
begin
declare que text; 
set que=concat("select * from bank where customerName in (",rang,");");
	prepare statement01 from que;
	execute statement01;
end\
delimiter ;

求告知这是为什么?

解决方案

5

LZ你好
似乎是原因是存储过程中的变量是局部变量,用完后就会回收,
SQL规定局部变量必须以@或at开头

25

这个是MYSQL PREPARE本身的机制导致的。它是把语句提交给系统来生成,而它的PREPARE中则是从全局变量中找,不从本地局部变量中找。所以只能使用 @var 的变量。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明关于在存储过程中使用prepare的问题