mysql - 如何返回 MYSQL PROCEDURE 错误

标签 mysql stored-procedures procedure mysql-5.5

我有一个带有事务提交的大型 MySQL 过程,从 PHP 中调用,并带有一些循环:最大块数。 50 个条目,我总共有 24213 个条目。

其中一个循环产生了一些问题,但我无法得到返回的错误。我尝试过使用 HANDLER FOR SQLEXCEPTION、SHOW ERRORS 和 RESIGNAL,但我没有得到任何有关此错误的信息。

每次执行都会将此结果作为日志注册到表中,我想在其中注册该错误。

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;
...

我从 PHP 调用或直接从 phpMyAdmin 调用的 SHOW ERRORS 中没有得到任何结果。

另一个很好的选择是从这种执行中获得返回:

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;

任何帮助将不胜感激!

最佳答案

使用存储过程的参数列表中的out参数,可以返回错误信息

@ErrorMessage varchar OUTPUT  

关于mysql - 如何返回 MYSQL PROCEDURE 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55454159/

相关文章:

python - 为什么pymysql(0.9.2)调用存储过程,有时获取输出参数为None?

mysql - 为什么 MySQL 不支持 'LIMIT & IN/ALL/ANY/SOME subquery'

javascript - 在 Acumatica 中单击按钮更改表中的值

sql - 调试 BigQuery 存储过程

asp.net - 什么可能导致函数导入性能缓慢?

sql-server - 为表中每条记录的字段添加 1

php - 忽略不工作 Mysql

MySQL在插入tbl1时创建触发器也插入到tbl2

sql-server - 解析数据库中的所有存储过程

MySQL:程序流程的数据库设计