SQLPlus for Oracle 11 无法回滚

SQLPlus for Oracle 11 无法回滚

我有一个调用 SQL 文件的 shell 脚本。但是,即使使用AUTOCOMMIT OFFand on 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

但这永远不会回滚这 3 条语句。它提交了 2 条语句并在最后一行给出错误。

答案1

WHENEVER SQLERROR 部分应该在实际执行 INSERT 语句之前出现(+ AUTOCOMMIT 之前缺少 SET):

$SQLPLUS_PATH/sqlplus -s /nolog <<-EOF>> ${LOGFILE}
    connect $DB_USER/$Password1@$Database1
    SET AUTOCOMMIT OFF
    WHENEVER SQLERROR EXIT ROLLBACK;
    @$File1
EOF

相关内容