はい、次のいずれかを使用します:
WHERE m.id_pk = NVL(n_RequiredId, m.id_pk);
WHERE m.id_pk = COALESCE(n_RequiredId, m.id_pk);
WHERE (n_RequiredId IS NULL OR m.id_pk = n_RequiredId);
...sargableではありません。それらは機能しますが、利用可能なオプションの中で最悪のパフォーマンスを示します。
パラメータが1つしかない場合は、IF/ELSEと個別の調整されたステートメントの方が適しています。
その後の次のオプションは動的SQLです。ただし、最初の例で引数不可の述語を引き継ぐ場合、動的SQLのコーディングは役に立ちません。動的SQLを使用すると、多数のパスに対応しながらクエリを調整できます。ただし、SQLインジェクションのリスクもあるため、パラメーター化されたクエリの背後で実行する必要があります(できれば、パッケージ内のストアドプロシージャ/関数内で実行する必要があります。