【问题标题】:SQLPLUS embedded in linux script does not work as expected嵌入在 linux 脚本中的 SQLPLUS 无法按预期工作
【发布时间】:2020-05-08 00:21:56
【问题描述】:

我在 Linux 脚本中有以下脚本段:

sqlplus /
<<QUERY_1
                    UPDATE BATCH_FILE SET BATCH_ID = 0 WHERE BATCH_ID  = -1;
                    COMMIT;
                    exit

QUERY_1

我期待更新发生并且脚本退出 sqlplus

实际发生的情况是查询未执行,脚本退出,让 sqlplus 使用 SQL> 提示登录到我的数据库。我可以从提示符处执行语句,但当然,这不是我想要做的。

我当前的 Oracle 版本是 12.2.0.1

【问题讨论】:

  • 也许斜杠应该是反斜杠?
  • 我已经尝试了带或不带 ; 的退出。我认为没有很可能是正确的;从交互式命令提示符执行时需要
  • @wildplasser - 正斜杠是正确的。表示用os认证连接。
  • 啊哈,是scott/tiger的空表!在这种情况下,也要添加一个反斜杠。否则 HERE 文档的输出将错过其目标。 (并且 sqlplus 可能会以交互模式结束)

标签: linux oracle sh sqlplus


【解决方案1】:

HERE-document 的输出用于 sqlplus 的 std 输入,但对于 shell 命令应该在一行。添加反斜杠将使shell忽略行尾,将两条物理行合并为一个逻辑行:


sqlplus / \
<<QUERY_1
                    UPDATE BATCH_FILE SET BATCH_ID = 0 WHERE BATCH_ID  = -1;
                    COMMIT;
                    exit

QUERY_1

或者只是:


sqlplus / <<QUERY_1
                    UPDATE BATCH_FILE SET BATCH_ID = 0 WHERE BATCH_ID  = -1;
                    COMMIT;
                    exit

QUERY_1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-02
    • 2021-12-20
    • 2013-09-30
    • 1970-01-01
    • 1970-01-01
    • 2015-06-26
    • 2021-11-08
    相关资源
    最近更新 更多