万猪奔腾 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>;
    
    
    

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

    评论

报告相同问题?

悬赏问题

  • ¥50 切换TabTip键盘的输入法
  • ¥15 可否在不同线程中调用封装数据库操作的类
  • ¥15 微带串馈天线阵列每个阵元宽度计算
  • ¥15 keil的map文件中Image component sizes各项意思
  • ¥20 求个正点原子stm32f407开发版的贪吃蛇游戏
  • ¥15 划分vlan后,链路不通了?
  • ¥20 求各位懂行的人,注册表能不能看到usb使用得具体信息,干了什么,传输了什么数据
  • ¥15 Vue3 大型图片数据拖动排序
  • ¥15 Centos / PETGEM
  • ¥15 划分vlan后不通了