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
但是,我不知道如何解决它。
答案 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