我正在mariadb 5.5
上写存储过程,并试图在其中出现SQL EXCEPTION
时返回错误代码。
我的代码如下...
delimiter $$
CREATE PROCEDURE sp_test(
IN fooin varchar(50),
INOUT fooout varchar(50)
)
BEGIN
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
SET fooout = '9999'; #which means error
RESIGNAL;
END;
SET fooout = '0000';
select now_(); # Error happens here on my purpose
END$$
DELIMITER ;
结果如下所示...
MariaDB [emsdevdb]> call sp_test('foo',@result);
ERROR 1305 (42000): FUNCTION emsdevdb.now_ does not exist
MariaDB [emsdevdb]> select @result;
+---------+
| @result |
+---------+
| NULL |
+---------+
1 row in set (0.00 sec)
为什么@result
打印NULL而不是'9999'?
对于SQL EXCEPTION
,如何返回我自己的错误代码?
NULL
参数的值out
是否意味着存储过程遇到错误?
任何建议将不胜感激。
谢谢。
答案 0 :(得分:1)
尝试:
DELIMITER $$
DROP PROCEDURE IF EXISTS sp_test$$
CREATE PROCEDURE sp_test(
IN fooin varchar(50),
INOUT fooout varchar(50)
)
BEGIN
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
SET fooout = '9999'; #which means error
-- RESIGNAL;
END;
SET fooout = '0000';
SELECT now_(); # Error happens here on my purpose
END$$
DELIMITER ;
SET @result := NULL;
CALL sp_test('foo', @result);
SELECT @result;