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

时间:2016-07-15 07:22:10

标签: php mysql stored-procedures

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

这是我的mysql查询(程序)。

但是,当我调用我的程序时,它会发生错误。

  

MySQL消息:#1054 - 未知列&#39; v_error_flag&#39;在&#39;字段列表&#39;

我认为IF语句会出错。

IF v_error_flag < 0 THEN 

但是,我不知道如何解决它。

1 个答案:

答案 0 :(得分:2)

v_error_flag ... BEGIN声明了END

IF v_error_flag < 0 THEN条件超出了阻止范围,因此无法识别v_error_flag并引发错误。

您需要在IF v_error_flag < 0 THEN ... BEGIN区块内移动END条件。

只需将第二个BEGIN ... END块删除或评论为:

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