Tak, korzystając z jednego z poniższych:
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);
...nie są sargable. Będą działać, ale wykonają najgorszą z dostępnych opcji.
Jeśli masz tylko jeden parametr, lepszą alternatywą są JEŻELI/ELSE i oddzielne, dostosowane instrukcje.
Następną opcją jest dynamiczny SQL. Ale kodowanie dynamicznego SQL jest bezużyteczne, jeśli przenosisz predykaty niepodlegające sargacji w pierwszym przykładzie. Dynamiczny SQL pozwala dostosować zapytanie z uwzględnieniem wielu ścieżek. Ale grozi to również wstrzyknięciem SQL, więc powinno być wykonywane za sparametryzowanymi zapytaniami (najlepiej w ramach procedur/funkcji składowanych w pakietach).