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

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 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试
  • ¥20 问题请教!vue项目关于Nginx配置nonce安全策略的问题
  • ¥15 教务系统账号被盗号如何追溯设备
  • ¥20 delta降尺度方法,未来数据怎么降尺度
  • ¥15 c# 使用NPOI快速将datatable数据导入excel中指定sheet,要求快速高效
  • ¥15 再不同版本的系统上,TCP传输速度不一致
  • ¥15 高德地图点聚合中Marker的位置无法实时更新
  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题