我们使用以下方法从DOS批处理脚本运行SQL。
该模型工作正常,但此特定代码不起作用。我相信因为||
个字符。我尝试使用^|^|
,但这不起作用。
有什么想法吗?
(
echo update mytable set file_path = 'C' || substr(file_path, 2);
echo commit;
echo exit
) | sqlplus x/x@orcl
答案 0 :(得分:1)
将SQL存储为文件并重定向SQL Plus的输入:
sqlplus x/x@orcl <sql.txt
答案 1 :(得分:1)
您可以使用CONCAT代替||操作
答案 2 :(得分:1)
使用||
转义^|^|
会让您遇到另一个问题: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