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 用hfss做微带贴片阵列天线的时候分析设置有问题
  • ¥50 我撰写的python爬虫爬不了 要爬的网址有反爬机制
  • ¥15 Centos / PETSc / PETGEM
  • ¥15 centos7.9 IPv6端口telnet和端口监控问题
  • ¥120 计算机网络的新校区组网设计
  • ¥20 完全没有学习过GAN,看了CSDN的一篇文章,里面有代码但是完全不知道如何操作
  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 海浪数据 南海地区海况数据,波浪数据
  • ¥20 软件测试决策法疑问求解答
  • ¥15 win11 23H2删除推荐的项目,支持注册表等