我的存储过程出错时如何设置OUT参数?

时间:2019-05-28 05:53:11

标签: stored-procedures mariadb

我正在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是否意味着存储过程遇到错误?

任何建议将不胜感激。

谢谢。

1 个答案:

答案 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;