我从 bash 向 sqlplus 语句传递了一个参数,但该参数将后面的所有脚本作为参数。如何避免这个问题?

问题描述 投票:0回答:1

我有这种bash脚本

$sqlplusconn 是使用 sqlplus 到我的 oracle 实例的连接

$foo 是一个数字

$sqlplusconn << EOF
BEGIN
    @bar.sql $foo
    @foo.sql $foo
  COMMIT;
EXCEPTION
 WHEN OTHERS THEN
 ROLLBACK;
END;

[... other stuff]


问题是,当我执行 shell 脚本时, $foo 被传递给 sql 脚本,但紧接着参数之后的所有“其他内容”都作为参数传递给 sql 脚本。当我读到异常时,它指出“COMMIT”作为参数传递。我遇到了问题,但不知道如何解决

我尝试在 @foo.sql $myvariable 语句末尾添加分号,但没有成功。

bash oracle plsql oracle11g sqlplus
1个回答
0
投票

所以我认为你想要的是运行两个 SQL 脚本并假设它们有效,然后提交。如果出现任何问题,请将其回滚。如果是这种情况,那么这里有一个解决方案:

$sqlplusconn << EOF
WHENEVER SQLERROR EXIT ROLLBACK
@bar.sql $foo
@foo.sql $foo
COMMIT;
EOF
© www.soinside.com 2019 - 2024. All rights reserved.