linux 脚本中嵌入的 SQLPLUS 无法按预期工作

SQLPLUS embedded in linux script does not work as expected

我在 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

HERE 文档的输出用于 sqlplus 的标准输入,但对于 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