来自带有bash替换的文件的SQLplus脚本

时间:2014-06-26 20:00:36

标签: bash sqlplus substitution

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

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

这是bash脚本的片段

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

这是来自foo.sql的片段

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

我在$ VAR和&amp; 1上尝试了几种变体,但到目前为止还没有任何变化。

2 个答案:

答案 0 :(得分:1)

您必须使用您要传递的值

来调用sql脚本

从sqlplus执行脚本:

@foo.sql bar

在foo.sql中使用:

grant execute on &1 to usr

答案 1 :(得分:0)

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

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

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