包括从DOS批处理脚本运行Oracle sql的管道

时间:2011-02-01 17:28:54

标签: oracle dos sqlplus batch-file

我们使用以下方法从DOS批处理脚本运行SQL。

该模型工作正常,但此特定代码不起作用。我相信因为||个字符。我尝试使用^|^|,但这不起作用。

有什么想法吗?

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

3 个答案:

答案 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