doupa8922 2016-07-15 07:22 采纳率: 100%
浏览 76
已采纳

它发生#1054我在mysql中调用过程时出错

CREATE PROCEDURE test_proc (in name varchar(100),out return_msg varchar(3000))                                             
BEGIN
    BEGIN
        DECLARE v_return_msg VARCHAR(3000);   -- return message
        DECLARE v_error_flag INT DEFAULT 0; 
        DECLARE EXIT HANDLER FOR SQLEXCEPTION  SET v_error_flag = -1; 

        START TRANSACTION;

        INSERT INTO `tablename` (name, value) VALUES (name, 'Test2');
    END;

    IF v_error_flag < 0 THEN 
         ROLLBACK; 
         CALL DBMS_OUTPUT.PUT_LINE('Error : ' || mysql_error );
         SELECT * FROM INSERT_INFO; -- UPDATE_TABLE_USED
         SHOW ERRORS;
    ELSE 
         COMMIT; 
         CALL DBMS_OUTPUT.PUT_LINE('Sucess : ' || sqlerrm );
         SELECT 'Process succeed!!!';
    END IF;
 END

This is my mysql query(procedure).

However, When I CALL my procedure, It occurs error.

MySQL Message: #1054 - Unknown column 'v_error_flag' in 'field list'

I think IF statement occur error.

IF v_error_flag < 0 THEN 

However, I don't know how can I fix it.

  • 写回答

1条回答 默认 最新

  • dongtan2603 2016-07-15 07:42
    关注

    The v_error_flag is declared with in the BEGIN ... END.

    The IF v_error_flag < 0 THEN condition is out of the block so v_error_flag is not recognized and throwing the error.

    You need to move the IF v_error_flag < 0 THEN condition inside the BEGIN ... END block.

    or

    Simply remove or comment the Second BEGIN ... END block as:

    CREATE PROCEDURE test_proc (in name varchar(100),out return_msg varchar(3000))                                             
    BEGIN
        -- BEGIN  <-- remove/comment this
        DECLARE v_return_msg VARCHAR(3000);   -- return message
        DECLARE v_error_flag INT DEFAULT 0; 
        DECLARE EXIT HANDLER FOR SQLEXCEPTION  SET v_error_flag = -1; 
    
        START TRANSACTION;
    
        INSERT INTO `tablename` (name, value) VALUES (name, 'Test2');
        -- END;  <-- remove/comment this
    
        IF v_error_flag < 0 THEN 
                ROLLBACK; 
                CALL DBMS_OUTPUT.PUT_LINE('Error : ' || mysql_error );
                SELECT * FROM INSERT_INFO; -- UPDATE_TABLE_USED
                SHOW ERRORS;
        ELSE 
                COMMIT; 
                CALL DBMS_OUTPUT.PUT_LINE('Sucess : ' || sqlerrm );
                SELECT 'Process succeed!!!';
        END IF;
    END
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题