带有 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 脚本的主要内容,如果未能解决你的问题,请参考以下文章