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