通常在使用shell脚本进行数据库操作时,我们必须要知道数据库语句的执行状况,根据结果进行后续逻辑的处理
WHENEVER SQLERROR
SQL*Plus 提供了一种触发器:
当捕获到数据库语句或者PL/SQL 代码块异常时,可以进行相应的特殊处理操作。
WHENEVER SQLERROR {EXIT [SUCCESS | FAILURE | WARNING | n | variable | :BindVariable] [COMMIT | ROLLBACK] | CONTINUE [COMMIT | ROLLBACK | NONE]}
Example
- 当发生错误时,进行回滚并退出,返回错误码
whenever sqlerror exit SQL.SQLCODE rollback
- 当发生错误时,对之前执行的语句进行提交,并保留SQL*Plus
whenever sqlerror continue commit
实战
在工作中,我们需要对此功能进行包装,方便同事们的使用
sh脚本
下面是脚本内容
#!/bin/sh
echo "SQL*Plus-语句执行异常则退出"
sqlplus user/password@x.x.x.x:x/orcl <<EOF
whenever sqlerror exit failure rollback
${1}
EOF
return $?
分离 SQL*Plus初始化设置
后续经过资料查阅,Oracle 提供了默认的SQL*Plus的初始化脚本执行逻辑;
- 扫描ORACLE_PATH变量下的
login.sql,并进行执行
进而对脚本进行改造:
#!/bin/sh
echo "SQL*Plus-语句执行异常则退出"
ORACLE_PATH=~/user/sqlplus/
sqlplus user/password@x.x.x.x:x/orcl <<EOF
${1}
EOF
return $?
~/user/sqlplus/login.sql 脚本内容如下:
whenever sqlerror exit failure rollback