MariaDB等同于Oracle WHENEVER SQLERROR

时间:2018-10-22 13:56:42

标签: mysql error-handling mariadb sqlplus

在Oracle的sqlplus中,编写脚本时,我们可以使用WHENEVER SQLERROR来检测/处理错误。

例如

sqlplus /nolog -S <<EOF

WHENEVER SQLERROR EXIT FAILURE ROLLBACK

CONNECT /

EXEC ThisProcThrowsAnError();

QUIT

EOF

if [ ${?} -eq 0 ]
then
   echo "Worked OK"
else
   echo "Oh dear"
fi

MariaDB(mysql客户端)中是否有等效项?

注意,我不仅对存储过程感兴趣,而且基本上对在MariaDB上执行脚本时可能出错的任何错误

2 个答案:

答案 0 :(得分:1)

在MySQL / MariaDB存储过程中,您可以编写此类内容,例如:

DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
BEGIN
  ROLLBACK;
  @error := 'got exception';
END;

您也可以写DECLARE EXIT HANDLER FOR condition statement

在存储过程之外,您无法捕获异常(客户端程序中除外)。

这是文档。 https://dev.mysql.com/doc/refman/8.0/en/declare-handler.html

如果您正在文本文件中查找MySQL错误,则可以尝试使用此正则表达式

/^ERROR\s+\d{4}\s*([A-Z0-9]{5}):\s*.*$/

它寻找诸如ERROR 2003 (HY000): Can't connect to MySQL server on '172.16.1.169'.

之类的东西

答案 1 :(得分:0)

MariaDB 10.1支持Atomic Compound Statements。它允许您在存储过程之外创建异常处理程序。

BEGIN NOT ATOMIC
  DECLARE EXIT HANDLER FOR SQLEXCEPTION
  BEGIN  
   ROLLBACK;
   RESIGNAL;
  END;

  START TRANSACTION;

    stmt1;
    ....
    stmtN;

  COMMIT;
END