Я пишу хранимую процедуру на 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
означает, что хранимая процедура обнаружила ошибку?
Любой совет будет принят во внимание.
Заранее спасибо.
Пытаться:
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;