Включая трубу под управлением Oracle sql из пакетного скрипта DOS - PullRequest
1 голос
/ 01 февраля 2011

Мы используем следующий подход для запуска SQL из пакетного сценария DOS.

Модель работает нормально, но этот конкретный код не работает. Я верю из-за || символов. Я пытался использовать ^|^|, но это не сработало.

Есть идеи?

(
echo update mytable set file_path = 'C' || substr(file_path, 2);
echo commit;
echo exit
) | sqlplus x/x@orcl

Ответы [ 3 ]

1 голос
/ 02 февраля 2011

Вы можете использовать CONCAT вместо ||оператор

1 голос
/ 02 февраля 2011

Выход || с помощью ^|^| оставляет вам еще одну проблему: cmd.exe считает, что закрывающая скобка substr(file_path, 2); относится к открывающей скобке в первой строке.Следовательно, он не печатается в SQL * Plus, что переводит оператор обновления в нечто вроде update mytable set file_path = 'C' || substr(file_path, 2, что явно не может быть интерпретировано Oracle.

Это можно решить, если поместить весь оператор обновления в двойные кавычки ипередать это (еще один) cmd.exe, вот так:

(
@echo select * from mytable;
@cmd /c "echo update mytable set file_path = 'C' ^|^| substr (file_path, 2);"
@echo commit;
@echo exit
) | sqlplus x/x@orcl
1 голос
/ 01 февраля 2011

Сохранить SQL как файл и перенаправить ввод SQL Plus:

sqlplus x/x@orcl <sql.txt
...