【问题标题】:Including pipe running Oracle sql from DOS batch script包括从 DOS 批处理脚本运行 Oracle sql 的管道
【发布时间】:2011-06-19 10:45:30
【问题描述】:

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

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

有什么想法吗?

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

【问题讨论】:

  • 这个特定的代码不起作用:你能再具体一点吗?

标签: oracle dos sqlplus batch-file


【解决方案1】:

将 SQL 存储为文件并重定向 SQL Plus 的输入:

sqlplus x/x@orcl <sql.txt

【讨论】:

    【解决方案2】:

    您可以使用CONCAT 代替||运营商

    【讨论】:

    • 使用concat不会解决问题,因为它是由右括号引起的,而不是由||引起的。
    【解决方案3】:

    ^|^| 转义|| 会给您带来另一个问题: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
    

    【讨论】:

      猜你喜欢
      • 2023-04-10
      • 2014-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-15
      • 1970-01-01
      • 1970-01-01
      • 2011-07-27
      相关资源
      最近更新 更多