mySql:在这个存储过程中 变量str和@var有什么区别.
存储过程如下
dlimiter $$
create procedure sp_1(taName @varchar(20))
begin
declare str varchar(100);
set str=concat('select*from ',taName);
set @var =str;
-- prepare stmat1 from str; -- 这里直接这样是不行的.
prepare stmat1 from @var; -- 定义一个用户变量才行啊.
execute stmat1;
end $$这里为什么str能生成预定义语句而@var能呢,他们的值都是一样的啊.
存储过程如下
dlimiter $$
create procedure sp_1(taName @varchar(20))
begin
declare str varchar(100);
set str=concat('select*from ',taName);
set @var =str;
-- prepare stmat1 from str; -- 这里直接这样是不行的.
prepare stmat1 from @var; -- 定义一个用户变量才行啊.
execute stmat1;
end $$这里为什么str能生成预定义语句而@var能呢,他们的值都是一样的啊.
你这是一种特殊的用法,就是为了实现动态SQL,按这个格式用就可以了
我将就说下你看下对不对啊:
这段语句为什么这里不能用str而要用@var,这是因为str只存在服务器端里面,不能进行传递,也就是说不能传递到客户端来执行,但因为Execute这个方法执行的时候是需要把语句传递到客户端(理解:好象我们直接输入Select*from t这样的语句一样.),既然要传递就的用用户变量@var了. 在说明:@var 是用户变量,但用户连接到服务器存在,断开连接时自动销毁.