Stored procedures 当存储过程出错时,如何设置参数?

Stored procedures 当存储过程出错时,如何设置参数?,stored-procedures,mariadb,Stored Procedures,Mariadb,我正在mariadb 5.5上编写存储过程,并试图在其中发生SQL异常时返回错误代码 我的代码如下 delimiter $$ CREATE PROCEDURE sp_test( IN fooin varchar(50), INOUT fooout varchar(50) ) BEGIN DECLARE EXIT H

我正在
mariadb 5.5
上编写存储过程,并试图在其中发生
SQL异常时返回错误代码

我的代码如下

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)
结果如下所示

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
打印空值而不是“9999”

如果出现
SQL异常
,如何返回我自己的错误代码

NULL
out
参数的值表示存储过程遇到错误

如有任何建议,将不胜感激

提前感谢。

试试:

分隔符$$
如果存在sp_测试,则执行下降程序$$
创建程序sp_测试(
在fooin varchar(50),
INOUT FOOUT varchar(50)
)
开始
为SQLEXCEPTION声明退出处理程序
开始
放样='9999'#这意味着错误
--辞职的;
终止
放样='0000';
选择“立即”;#我故意在这里出错
结束$$
定界符;
SET@result:=NULL;
调用sp_测试('foo',@result);
选择@result;