В 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 ответа
В хранимой процедуре 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 / ен / 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 поддерживает операторы атомарных соединений. Это позволяет создавать обработчики исключений вне хранимых процедур.
BEGIN NOT ATOMIC
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
ROLLBACK;
RESIGNAL;
END;
START TRANSACTION;
stmt1;
....
stmtN;
COMMIT;
END
Похожие вопросы
Новые вопросы
mysql
MySQL - это бесплатная система управления реляционными базами данных с открытым исходным кодом (RDBMS), использующая язык структурированных запросов (SQL). НЕ ИСПОЛЬЗУЙТЕ этот тег для других БД, таких как SQL Server, SQLite и т. Д. Это разные БД, которые все используют свои собственные диалекты SQL для управления данными.