SQLPLUS, встроенный в сценарий Linux, не работает должным образом

У меня есть следующий сегмент сценария в сценарии Linux:

sqlplus /
<<QUERY_1
                    UPDATE BATCH_FILE SET BATCH_ID = 0 WHERE BATCH_ID  = -1;
                    COMMIT;
                    exit

QUERY_1

Я ожидаю, что произойдет обновление, и скрипт выйдет из sqlplus.

Что на самом деле происходит, так это то, что запрос не выполняется, и сценарий завершает работу, оставляя sqlplus зарегистрированным в моей базе данных с приглашением SQL>. Я могу выполнять операторы из подсказки, но, конечно, это не то, что я хочу делать.

Моя текущая версия Oracle 12.2.0.1.


person Mark Ainsworth    schedule 07.05.2020    source источник
comment
Может быть, косая черта должна быть обратной косой чертой?   -  person wildplasser    schedule 07.05.2020
comment
Я пробовал выход с или без ; Я считаю, что без, скорее всего, будет правильно, как нет; требуется при выполнении из интерактивной командной строки   -  person Mark Ainsworth    schedule 07.05.2020
comment
@wildplasser - правильная косая черта. Это указывает на подключение с аутентификацией ОС.   -  person EdStevens    schedule 07.05.2020
comment
Ага, это пустая форма scott/tiger! В этом случае также добавьте обратную косую черту. В противном случае вывод ЗДЕСЬ-документа не будет соответствовать цели. (и sqlplus, вероятно, перейдет в интерактивный режим)   -  person wildplasser    schedule 07.05.2020


Ответы (1)


Вывод HERE-документа предназначен для стандартного ввода sqlplus, но для оболочки команда должна быть в одной строке. Добавление обратной косой черты заставит оболочку игнорировать конец строки, объединив две физические строки в одну логическую строку:


sqlplus / \
<<QUERY_1
                    UPDATE BATCH_FILE SET BATCH_ID = 0 WHERE BATCH_ID  = -1;
                    COMMIT;
                    exit

QUERY_1

Или просто:


sqlplus / <<QUERY_1
                    UPDATE BATCH_FILE SET BATCH_ID = 0 WHERE BATCH_ID  = -1;
                    COMMIT;
                    exit

QUERY_1
person wildplasser    schedule 07.05.2020