mariadb相当于oracle-sqlerror

x8diyxa7  于 2021-06-19  发布在  Mysql
关注(0)|答案(2)|浏览(353)

在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上执行脚本时可能出错的任何错误都感兴趣。

u0sqgete

u0sqgete1#

在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'.

yzckvree

yzckvree2#

mariadb 10.1支持原子复合语句。它允许您在存储过程之外创建异常处理程序。

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

  START TRANSACTION;

    stmt1;
    ....
    stmtN;

  COMMIT;
END

相关问题