MariaDB 相当于 Oracle WHENEVER SQLERROR
MariaDB equivalent to Oracle WHENEVER SQLERROR
在Oracle的sqlplus中,我们在写脚本的时候可以使用WHENEVER SQLERROR
到detect/handle的错误。
例如
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 上执行脚本时可能出错的任何错误感兴趣。
在一个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'.
这样的东西
MariaDB 10.1 支持Atomic Compound Statements。它允许您在存储过程之外创建异常处理程序。
BEGIN NOT ATOMIC
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
ROLLBACK;
RESIGNAL;
END;
START TRANSACTION;
stmt1;
....
stmtN;
COMMIT;
END
在Oracle的sqlplus中,我们在写脚本的时候可以使用WHENEVER SQLERROR
到detect/handle的错误。
例如
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 上执行脚本时可能出错的任何错误感兴趣。
在一个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'.
MariaDB 10.1 支持Atomic Compound Statements。它允许您在存储过程之外创建异常处理程序。
BEGIN NOT ATOMIC
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
ROLLBACK;
RESIGNAL;
END;
START TRANSACTION;
stmt1;
....
stmtN;
COMMIT;
END