SQLPLUS, встроенный в сценарий linux, не работает должным образом - PullRequest
0 голосов
/ 07 мая 2020

У меня есть следующий сегмент скрипта в 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

1 Ответ

1 голос
/ 07 мая 2020

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


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
...