Oracle
 sql >> Database >  >> RDS >> Oracle

Come gestire i parametri opzionali nella query SQL?

Sì, utilizzando uno dei seguenti:

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);

...non sono selezionabili. Funzioneranno, ma eseguiranno la peggiore delle opzioni disponibili.

Se hai un solo parametro, IF/ELSE e istruzioni separate e personalizzate sono un'alternativa migliore.

L'opzione successiva è SQL dinamico. Ma la codifica dell'SQL dinamico è inutile se si riportano i predicati non sargable nel primo esempio. Dynamic SQL ti consente di personalizzare la query adattando numerosi percorsi. Ma rischia anche l'iniezione di SQL, quindi dovrebbe essere eseguito dietro query parametrizzate (preferibilmente all'interno di procedure/funzioni memorizzate nei pacchetti.