存储过程变量的问题

Posted 风归云隐

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了存储过程变量的问题相关的知识,希望对你有一定的参考价值。

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

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 登录过程 - android片段,异步任务登录,Asp.net控制器,存储库

C程序存储结构

进程和线程和协程之间的关系

将变量传递给存储过程,c#

MYSQL选择进入变量而不是将结果存储在存储过程中的变量中。