zoukankan      html  css  js  c++  java
  • 存储过程变量的问题

    今天在写一个存储过程,遇到一个很奇怪的问题

    BEGIN
        DECLARE v_lastid BIGINT;
        SET @sql5 = concat("SELECT 0 INTO v_lastid ;");
        prepare s5 FROM @sql5;
        execute s5;
        deallocate prepare s5;
        SELECT v_lastid;
    END    

    这里将语句简化了,表面看起来这个存储过程没什么问题,语句也都正确,但是运行这个存储过程就会出错,出错的语句就是预处理的语句,报错变量v_lastid未定义,然后经过各种尝试,我将语句改成了下面这样

    BEGIN
        DECLARE v_lastid BIGINT;
        SELECT @HAT into v_lastid;
        SET @sql5 = concat("SELECT 0 INTO @v_lastid ;");
        prepare s5 FROM @sql5;
        execute s5;
        deallocate prepare s5;
        SELECT @v_lastid;
    END

    改成这样后就能正常运行,返回的结果也正确。

    具体的原因我没明白,可能是存储过程里面定义的变量的作用域的问题,无法作用于预处理语句,给变量加个@我也是看别人这样用过,自己不清楚原因,得好好百度一下这个区别

  • 相关阅读:
    Java 数组算法列题解析
    Java数组总结
    go实现汉诺塔
    go实现归并排序
    css清除浮动深度解析
    jquery阻止事件冒泡
    java
    getComputedStyle/currentStyle/style之间的爱恨情仇
    js基础总结
    元素堆叠问题、z-index、position
  • 原文地址:https://www.cnblogs.com/quyixuanblog/p/5360360.html
Copyright © 2011-2022 走看看