我有3个sql脚本(11.sql,12.sql和13.sql),其中包含存储过程(或)DML语句,并且必须按升序依次执行。我可以通过bash脚本来做到这一点。
for sql_file in `ls *.sql`
do
echo "Output of the $sql_file as below..."
mysql --defaults-file=/home/sri/myfile.txt -v --safe-updates=1 << EOFMYSQL
USE sampledb;
SOURCE $sql_file;
EOFMYSQL
但是,只要有一个.sql文件由于如下所示的不同原因而失败,则必须中止执行,并且进一步的.sql不应该执行。
但是不管是否失败,所有3个sql脚本都一个接一个地执行。我尝试了各种选择,但无法找出确切的步骤来实现这种在任何错误情况下中止sql脚本执行的要求。
谢谢。
答案 0 :(得分:0)
一种方法是将您的Heredoc内容(即EOFMYSQL
之间的行)放入相应的* .sql文件中。
然后,如果mysql的退出状态do
不为零(因为sql因错误而失败),则使用此基本结构执行并退出$?
循环:
for sql_file in *.sql
do
mysql --defaults-file=... < sql_file
[ $? -ne 0 ] && exit
done
答案 1 :(得分:0)
通过使用以下脚本,我可以检查SQL脚本(带有DML语句的存储过程)是否成功执行。如果失败,则返回相应的MySQL错误代码/声明。
for sql_file in `ls *.sql`
do
mysql --defaults-file=input.txt --safe-updates=1 sampledb < $sql_file
if [ $? -eq 0 ]; then
echo "$sql_file was executed"
else
echo "Aborting MySQL execution due to previous script error. Please investigate"
exit 1
fi
done
但是我需要在下面使用bash脚本显示消息,该消息解释了对DML语句执行影响的记录数。 (通过存储过程脚本)
{0个受影响的行,已匹配的行:1已更改:0警告:0}
请让我知道如何执行此操作。