我正在运行一个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上尝试了几种变体,但到目前为止还没有任何变化。
答案 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
以替换变量。然而,这比上述方法复杂得多。