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 的变量。