Oui, en utilisant l'un des éléments suivants :
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);
... ne sont pas sargables. Ils fonctionneront, mais effectueront la pire des options disponibles.
Si vous n'avez qu'un seul paramètre, les instructions IF/ELSE et des instructions personnalisées séparées constituent une meilleure alternative.
La prochaine option après cela est le SQL dynamique. Mais coder du SQL dynamique est inutile si vous transférez les prédicats non sargables du premier exemple. Dynamic SQL vous permet de personnaliser la requête tout en acceptant de nombreux chemins. Mais cela risque également d'injecter SQL, il doit donc être effectué derrière des requêtes paramétrées (de préférence dans des procédures/fonctions stockées dans des packages.