У меня есть сценарий оболочки, который вызывает файл 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 и выдает ошибку в последних строках.
Часть 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