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