请参阅此代码:
测试.sh
#!/bin/bash
echo "hello!"
klsdslkdsd
echo "bye"
当我运行它时,我得到:
hello!
/tmp/test.sh: line 3: klsdslkdsd command not found
bye
虽然有句法错误,但执行完成(毕竟是一个脚本)。
现在,如果我这样做:
testWithStop.sh
#!/bin/bash
set -e
echo "hello!"
klsdslkdsd
echo "bye"
我得到:
hello!
/tmp/test.sh: line 5: klsdslkdsd command not found
执行停止,因为我从每个执行的行中都收到退出错误。如果exit != 0它中止。
我想在一组(oracle)PL/SQL(和单独的SQL)代码中复制这种行为。
此时,即使出现错误,Oracles DB Manager也会优雅地管理错误并且不会停止SQL的执行。我希望,当发现错误(句法或语义)时,程序中止但不触及程序的逻辑(如果是这样,我将不得不更改数百个 PL/SQL 并且不可能)。
我知道我可以使用raiserror或创建一个宏匿名块来封装我的部分代码,这样我就可以检索异常。正如我所说,不可能处理数百个(可能是数千个)孤立(且逻辑复杂)的PL/SQL
是否有等效于SQL中的set -e或优雅的方法?
编辑:
特别是,我正在通过 shell 脚本(bash )执行(和调用)de PL/SQL。
例如,sqlbash.sh文件:
#!/bin/bash
sqlplus ..... <<EOF
select * from table;
sdsdsfdsf <--- intentional error!
select * from table2;
EOF
如果我调用脚本,我会得到语法错误,但执行会继续并且不会中止。例如,我想中止模仿exit 1的行为。
就像是:
#!/bin/bash
sqlplus ..... <<EOF
select * from table;
sdsdsfdsf <--- intentional error!
exit 1 <--- it will abort and the script WILL FAIL at this point
select * from table2;
EOF
我正在使用调度程序,因此,我有必要看到脚本失败,而不是它被执行并给了我警告。