我有一个shell脚本,它像这样调用一些sql
sqlplus system/$password@$instance @./oracle/mysqlfile.sql $var1 $var2 $var3
然后在mysqlfile.sql中,我定义如下属性:
DEFINE var1=&1
DEFINE var2=&3
DEFINE var3=&3
在文件的后面,我调用另一个sql脚本:
// i wish to wrap this in a if statement - pseudo-code
if(var3="true") do the following
@./oracle/myOthersqlfile.sql &&varA &&varB
我不知道如何实施这个虽然,任何建议表示感谢
2条答案
按热度按时间ut6juiuv1#
您可以(ab)使用替换变量:
之间的查询
set termout
命令-只隐藏查询的输出-使用case表达式来选择实际文件路径或虚拟文件;我已经使用了/dev/null,但是您可以有一个自己的“no op”文件,如果更清楚的话,它什么也不做。查询会给出别名的结果var3_path
. 这个new_value
行,然后将其转换为替换变量。这个@
然后展开这个变量。所以如果
var3
如果是“真的”,那么:(或者,实际上,用
varA
以及varB
变量已替换为其实际值),如果为false,则运行:什么也不做,默默地。
你可以
set verify on
在代码周围查看何时何地发生替换。kqlmhetl2#
不能将过程逻辑实现到sqlplus中。您有以下选项:
在运行sqlplus的shell脚本中实现if-then-else逻辑。
使用pl/sql,但是sql脚本应该作为匿名块中的进程调用,而不是像外部脚本那样调用。
在您的情况下,最简单的方法是更改shell脚本。
您应该意识到sqlplus只是一个cli(命令行界面)。所以你不能对它应用程序逻辑。
我不知道您在那些sql脚本中做了什么(运行dml、创建文件等),但是最好的方法是将它们转换为pl/sql,然后您可以应用您需要的任何逻辑。