mysql例程和会话变量

时间:2013-09-19 09:52:59

标签: mysql phpmyadmin

我没有很多编程经验。 参考最新版本的XAMPP / MySQL,是否应该能够在MySQL例程中使用会话变量?我正在使用phpMyAdmin,因此以下代表输入的完整代码。

我的惯例是这样的: -

BEGIN
    SELECT @x;
END

但是当我执行

SET @x:= 6;
CALL routine;

什么都没有。

如果我的例程是这样的:

BEGIN
    DECLARE x INT; 
    SET x := 5;
    SELECT x;
END

我执行CALL routine;

我退回了一张桌子,下面是x和5。

在其他时候,例程似乎具有将会话变量返回为NULL或返回例程应该已修改的未修改的@x值的效果。我无法在网上找到任何解释这一点的内容。我究竟做错了什么?

1 个答案:

答案 0 :(得分:1)

完美适合我:) 如果它不起作用是因为phpMyAdmin为每个请求使用不同的连接(并且你,先生,正在逐个执行命令)。一次执行所有操作:)

drop procedure if exists routine_test;
delimiter //
create procedure routine_test ()
begin
    set @var := @var + 1;
    select 'inside routine', @var;
end;
// delimiter ; 


# now execute all these statements at same time
# executing them one by one, might make phpmyadmin use different connections

set @var = 1;
call routine_test();
call routine_test();
call routine_test();
select 'outside routine', @var;

如果它不起作用,那么phpmyadmin会在每次单击执行时启动一个新连接(这是php处理连接的方式)。 这就是,在将页面发送到用户的浏览器后关闭连接,会话结束,变量从MySQL内存中清除