万猪奔腾 2014-02-11 02:38 采纳率: 0%
浏览 1095

mysql 存储过程返回值 怎么释放

带返回值的存储过程
每次执行后会返回一个变量一直存在于会话中
执行下一次查询的时候仍然能够访问上传的变量

call f(@o1);
SELECT @o1;

call f(@o2);
SELECT @o1,@o2;

call f(@o3);
SELECT @o1,@o2,@o3;

要怎么释放掉呢?

  • 写回答

1条回答 默认 最新

  • 努力的懒洋洋 2023-12-11 11:27
    关注

    在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>;
    
    
    

    这样,每次调用存储过程之前和之后,变量都会被重置为初始值,相当于释放了之前的变量并重新分配了新的变量。

    评论

报告相同问题?

悬赏问题

  • ¥15 使用C#,asp.net读取Excel文件并保存到Oracle数据库
  • ¥15 C# datagridview 单元格显示进度及值
  • ¥15 thinkphp6配合social login单点登录问题
  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配