【问题标题】:SQLplus script from file with bash substitutions带有 bash 替换的文件中的 SQLplus 脚本
【发布时间】: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 上尝试了几种变体,但到目前为止都没有奏效。

【问题讨论】:

    标签: bash sqlplus substitution


    【解决方案1】:

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

    从 sqlplus 执行脚本:

    @foo.sql bar
    

    在 foo.sql 中使用:

    grant execute on &1 to usr
    

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-02-16
        • 2013-04-30
        • 2012-04-21
        • 2020-04-24
        • 1970-01-01
        • 2015-10-20
        • 2011-02-17
        • 1970-01-01
        相关资源
        最近更新 更多