SQLPlus для Oracle 11 не откатывается

У меня есть сценарий оболочки, который вызывает файл SQL. Однако даже с 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);

Мой сценарий оболочки вызывает этот 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 (+ SET отсутствует перед AUTOCOMMIT):

$SQLPLUS_PATH/sqlplus -s /nolog <<-EOF>> ${LOGFILE}
    connect $DB_USER/$Password1@$Database1
    SET AUTOCOMMIT OFF
    WHENEVER SQLERROR EXIT ROLLBACK;
    @$File1
EOF
Другие вопросы по тегам