Выход ||
с помощью ^|^|
оставляет вам еще одну проблему: 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