Как вернуть ошибки MYSQL PROCEDURE - PullRequest
0 голосов
/ 01 апреля 2019

У меня есть большая процедура MySQL с транзакционной фиксацией, вызванная из PHP с некоторыми циклами: блоки макс.50 записей, и у меня всего 24213 записей.

Один из этих циклов создает некоторые проблемы, но я не могу получить возвращенную ошибку.Я пытался с HANDLER FOR SQLEXCEPTION, с SHOW ERRORS и RESIGNAL, но я ничего не получил об этой ошибке.

Каждое выполнение регистрирует эти результаты в таблице как журнал, и я хочу зарегистрировать этоошибка в нем.

EXIT HANDLER FOR SQLEXCEPTION:

  CREATE PROCEDURE `Procedure01`(
  IN _Ini INT,
  IN _End INT,
  IN _CalcDate DATE
  )
  BEGIN
    DECLARE EXIT HANDLER FOR SQLEXCEPTION
      BEGIN

        RESIGNAL;
        SHOW ERRORS;

        ROLLBACK;

        SET @sql = CONCAT("INSERT INTO `Log_Procedure` (`From`,`To`,`Datetime`,`Comment`) VALUES ( '", _Ini, "','", _End, "',NOW(),'ERROR: SQLException');");
        PREPARE s FROM @sql;
        EXECUTE s;
        DEALLOCATE PREPARE s;

    END;
...

Я ничего не получил от этого SHOW ERRORS, вызванного из PHP или с прямым CALL из phpMyAdmin.

ДругойОпция, которая может быть хорошей, это получить отдачу от выполнения такого рода:

SET @sql = CONCAT("INSERT INTO `Log_Procedure` (`From`,`To`,`Datetime`,`Comment`) VALUES ( '", _Ini, "','", _End, "',NOW(),'ERROR: SQLException');");
    PREPARE s FROM @sql;
    EXECUTE s;
    DEALLOCATE PREPARE s;

Любая помощь будет оценена!

1 Ответ

1 голос
/ 01 апреля 2019

Используя параметр out в списке параметров хранимой процедуры, вы можете вернуть сообщение об ошибке

@ErrorMessage varchar OUTPUT  
...