带返回值的存储过程
每次执行后会返回一个变量一直存在于会话中
执行下一次查询的时候仍然能够访问上传的变量
call f(@o1);
SELECT @o1;
call f(@o2);
SELECT @o1,@o2;
call f(@o3);
SELECT @o1,@o2,@o3;
要怎么释放掉呢?
带返回值的存储过程
每次执行后会返回一个变量一直存在于会话中
执行下一次查询的时候仍然能够访问上传的变量
call f(@o1);
SELECT @o1;
call f(@o2);
SELECT @o1,@o2;
call f(@o3);
SELECT @o1,@o2,@o3;
要怎么释放掉呢?
在MySQL中,存储过程的变量在调用它的会话结束后会自动释放,也就是说,不需要手动去释放这些变量。
但是,如果你希望在调用存储过程之后释放变量,你可以使用以下方法:
在存储过程中使用SET语句将变量设置为NULL:
sql
BEGIN
-- 存储过程逻辑
END;
SET @o1 = NULL;
SET @o2 = NULL;
SET @o3 = NULL;
sql
BEGIN
-- 存储过程逻辑
END;
SET @o1 = NULL;
SET @o2 = NULL;
SET @o3 = NULL;
这样,在存储过程执行结束后,变量的值就会被设置为NULL,相当于释放了变量。
在调用存储过程之前和之后使用SET语句将变量重置为初始值:
sql
SET @o1 = ;
SET @o2 = ;
SET @o3 = ;
CALL f(@o1);
SELECT @o1;
SET @o1 = ;
CALL f(@o2);
SELECT @o1, @o2;
SET @o1 = ;
SET @o2 = ;
CALL f(@o3);
SELECT @o1, @o2, @o3;
SET @o1 = ;
SET @o2 = ;
SET @o3 = ;
sql
SET @o1 = <initial_value>;
SET @o2 = <initial_value>;
SET @o3 = <initial_value>;
CALL f(@o1);
SELECT @o1;
SET @o1 = <initial_value>;
CALL f(@o2);
SELECT @o1, @o2;
SET @o1 = <initial_value>;
SET @o2 = <initial_value>;
CALL f(@o3);
SELECT @o1, @o2, @o3;
SET @o1 = <initial_value>;
SET @o2 = <initial_value>;
SET @o3 = <initial_value>;
这样,每次调用存储过程之前和之后,变量都会被重置为初始值,相当于释放了之前的变量并重新分配了新的变量。