带有 bash 替换的文件中的 SQLplus 脚本

Posted

技术标签:

【中文标题】带有 bash 替换的文件中的 SQLplus 脚本【英文标题】:SQLplus script from file with bash substitutions 【发布时间】:2014-06-26 20:00:35 【问题描述】:

我正在运行一个 bash 脚本,其中包含一个调用 SQLPLUS 的 here 文档。这包括一个执行多个授权的 .sql 脚本。无需替换即可正常工作。

我希望能够将 bash 变量替换为授权语句。这可能吗?

这是来自 bash 脚本的 sn-p

CREDLINE=ownusr/ownpass
GRANT2DO=foo.sql
PASSPROC=bar    <=== this is what I want to pass
sqlplus << EOQ11
$CREDLINE@chaos01
@$GRANT2DO
quit
EOQ11

这是来自 foo.sql 的 sn-p

grant execute on $PASSPROC to user86;
grant execute on $PASSPROC to user99;

我在 $VAR 和 &1 上尝试了几种变体,但到目前为止都没有奏效。

【问题讨论】:

【参考方案1】:

你必须用你想要传递的值调用 sql-script

从 sqlplus 执行脚本:

@foo.sql bar

在 foo.sql 中使用:

grant execute on &1 to usr

【讨论】:

【参考方案2】:

您可以让您的脚本创建 .sql 文件,而不是让它替换现有的文件。然后像你已经做的那样把它传递给sqlplus

为了使脚本可读,您可以使用所谓的“此处文档”语法,描述为here,您似乎已经熟悉了。

如果您坚持进行实际替换,您可以将模板 .sql 复制到某个临时文件并在其上运行 sed -i 并使用适当的参数来替换变量。然而,这比上面的方法要复杂得多。

【讨论】:

以上是关于带有 bash 替换的文件中的 SQLplus 脚本的主要内容,如果未能解决你的问题,请参考以下文章

Bash 递归替换名称上的许多空格

如何在bash命令中传递sqlplus中的变量

在带有动态部分的bash脚本中搜索/替换[关闭]

进入sqlplus命令行后无法暂停关闭bash文件

我可以让 SQLPlus 中的会话保持活动状态,然后重新连接到同一个会话吗? BASH相关

用bash中的另一个文件替换整个文件