IF | ELSE条件は、Oracleデータベース問合せ出力に結果が表示されているか、NULLが表示されているかを確認します。

IF | ELSE条件は、Oracleデータベース問合せ出力に結果が表示されているか、NULLが表示されているかを確認します。

次の条件のif | elseステートメントを作成するのは難しいことがわかりました。私がやっていることは、次のクエリを実行するOracleデータベースがあり、行の出力を返すことです(レコードを表示したりNULL値を返すことができます)。私が望むのは、行が返される場合です。出力として複数のコマンドを実行する必要があり、返された行がない場合は、2番目のコマンドセットを実行する必要があります。

例 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 offsqlplus コマンドは、不要な出力を最小限に抑えるように設計されています。sed '/^$/d'空行を削除することです。結果は$output空の文字列(空の結果の場合)または照会出力行でなければなりません。

heredocターミネータには行にEND他の文字があってはいけません。そのため、他の行のようにインデントされません。

これにより、次のことができます。

if [[ -n "$output" ]]; then
    stuff if there is output
else
    stuff if there is null output
fi

おすすめ記事