我发现很难为以下条件编写 if|else 语句。我正在做的是我有一个 Oracle 数据库,我正在其中运行以下查询,它返回行中的输出(它可以显示记录,也可以返回 NULL 值),我想要的是如果该行作为输出返回,那么它应该执行几个命令,如果没有返回行,那么它应该执行第二组命令。
示例 1——它显示了输出。
SQL> select value from v$parameter where name='spfile';
VALUE
---------------
+DATA_01/TESTDB/spfileTESTDB.ora
示例 2 —— 在某些情况下,它不能返回任何行。
SQL> select value from v$parameter where name='spfile';
VALUE
--------------
答案1
你可能想做这样的事情:
db_connect="user/pass@db"
output=$(
sqlplus -s "$db_connect" <<'END' | sed '/^$/d'
set heading off
select value from v$parameter where name='spfile';
END
)
该-s
选项和set heading off
sqlplus 命令旨在最小化无关的输出。sed '/^$/d'
是删除空行。结果$output
应该是空字符串(对于空结果)或查询输出的行。
请注意,END
heredoc 终止符该行上不得有任何其他字符。这就是为什么它不像其他行那样缩进。
然后你可以这样做:
if [[ -n "$output" ]]; then
stuff if there is output
else
stuff if there is null output
fi