我有这种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 语句末尾添加分号,但没有成功。
所以我认为你想要的是运行两个 SQL 脚本并假设它们有效,然后提交。如果出现任何问题,请将其回滚。如果是这种情况,那么这里有一个解决方案:
$sqlplusconn << EOF
WHENEVER SQLERROR EXIT ROLLBACK
@bar.sql $foo
@foo.sql $foo
COMMIT;
EOF