mysql升级,以前4.0,没用过存储过程
现在升级5.x了,终于可以用了
但是使用中发现一个问题
Create PROC t
BEGIN
set @a = 'tt';
set @sql = 'select * from ?';
PREPARE s from @sql;
EXECUTE s using @a;
DEALLOCATE PREPARE s;
end
这样的就会报错,也就是说 在 @sql中的 ? 认不出来如果@sql的值不是sql语句,而是普通的字符串,就没有这个问题,如:
Create PROC t
BEGIN
set @a = 'tt';
set @sql = 'select ?';
PREPARE s from @sql;
EXECUTE s using @a;
DEALLOCATE PREPARE s;
end
这个就能整整的显示出来,显示 tt猜想可能是由于@sql 值为sql语句的问题,哦,就是传说中的预制sql语句
应该怎么样解决呢?
这个参数怎么才能传入呢?
先在这里感谢大家了。
现在升级5.x了,终于可以用了
但是使用中发现一个问题
Create PROC t
BEGIN
set @a = 'tt';
set @sql = 'select * from ?';
PREPARE s from @sql;
EXECUTE s using @a;
DEALLOCATE PREPARE s;
end
这样的就会报错,也就是说 在 @sql中的 ? 认不出来如果@sql的值不是sql语句,而是普通的字符串,就没有这个问题,如:
Create PROC t
BEGIN
set @a = 'tt';
set @sql = 'select ?';
PREPARE s from @sql;
EXECUTE s using @a;
DEALLOCATE PREPARE s;
end
这个就能整整的显示出来,显示 tt猜想可能是由于@sql 值为sql语句的问题,哦,就是传说中的预制sql语句
应该怎么样解决呢?
这个参数怎么才能传入呢?
先在这里感谢大家了。
正确的语句如下:delimiter ||
Create PROCEDURE t()
BEGIN
set @a = 'tt';
set @sql = concat('select * from ',@a); PREPARE s from @sql;
EXECUTE s;
DEALLOCATE PREPARE s;
set @a = @sql = NULL;
end||
delimiter ;