Как установить параметр OUT, когда моя хранимая процедура получает ошибку? - PullRequest
0 голосов
/ 28 мая 2019

Я пишу хранимую процедуру на 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 Ответ

1 голос
/ 28 мая 2019

Попробуйте:

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...