我有一个调用SQL文件的shell脚本。 但是,即使AUTOCOMMIT OFF和SQLERROR EXIT ROLLBACK 。 Sqlplus无法回滚。
我的sql文件有3行3是正确的,1是不正确的。 例如:
INSERT INTO TEST_ROUTING VALUES (24, 'ROUTING'); INSERT INTO TEST_ROUTING VALUES (25, 'ROUTING'); INSERT INTO TEST_ROUTING VALUES (26, 'ROUTING);
我的shell脚本如下调用这个SQL:
$SQLPLUS_PATH/sqlplus -s /nolog <<-EOF>> ${LOGFILE} connect $DB_USER/$Password1@$Database1 AUTOCOMMIT OFF @$File1 WHENEVER SQLERROR EXIT ROLLBACK; EOF if [ $? != 0 ]; then echo "The SQL failed. Please refer to the log for more information " echo "Error code $?" echo "8. Outside While " while read LINE; do ------- done fi
但这从来没有回滚这三个陈述。 它提交2,并在最后一行发生错误。
WHENEVER SQLERROR部分应在实际执行INSERT语句之前(在AUTOCOMMIT之前缺less一个SET):
$SQLPLUS_PATH/sqlplus -s /nolog <<-EOF>> ${LOGFILE} connect $DB_USER/$Password1@$Database1 SET AUTOCOMMIT OFF WHENEVER SQLERROR EXIT ROLLBACK; @$File1 EOF