IN パラメータに応じて WHERE 句を作成しようとしています。このため、WHERE IN 句内で CASE を使用する実験を行っています。うまく機能するのは次のとおりです。
SELECT * FROM TABLE1 WHERE COL1 IN (SELECT ID FROM TABLE2);
P1 という名前の入力パラメータがあるとします。タイプは不要です。P1 の値が null の場合、次の値も正常に機能します。
SELECT * FROM TABLE1 WHERE COL1 IN (CASE P1 WHEN NULL THEN COL1 ELSE (SELECT ID FROM TABLE2));
しかし、P1がNULLでない場合、私は得る
ORA-01427: 単一行の副問合せが複数の行を返します
エラー。
なぜこれが必要なのか疑問に思われる場合は、簡単に説明させてください。ストアド プロシージャは、多くの入力パラメーターを受け入れます。それらのいくつかは、ユーザー定義のコレクション型になります。また、すべてのパラメーターは省略可能で、DEFAULT NULL 値が指定されます。したがって、パラメーターが NULL かどうかを確認したい場合は、パラメーターに対応する列をそれ自体と比較します (つまり、その列にフィルターがないことを意味します)。それ以外の場合は、パラメーター内の値で列をフィルター処理します。私が試みていた方法は何とか可能ですか?