che ho una tabella di esempio:Come gestire i parametri opzionali nella query SQL?
id_pk value
------------
1 a
2 b
3 c
E ho un/blocco SQL campione PL, che ha una query che attualmente seleziona una singola riga in un array:
declare
type t_table is table of myTable%rowtype;
n_RequiredId myTable.id_pk%type := 1;
t_Output t_table := t_table();
begin
select m.id_pk, m.value
bulk collect into t_Output
from myTable m
where m.id_pk = n_RequiredId;
end;
Cosa mi serve è necessario implementare la possibilità di selezionare una singola riga in un array, come mostrato nel blocco sopra, O per selezionare tutte le righe in un array, se n_RequiredID
, che in realtà è un parametro di input dell'utente, è impostato su null
.
E, la domanda è: qual è la migliore pratica per gestire tale situazione?
mi viene in mente di modificare where
clausola della mia query per qualcosa di simile:
where m.id_pk = nvl(n_RequiredId, m.id_pk);
ma suppongo che sta per rallentare la query se il parametro non sarà nullo, e mi ricordo Kyte ha detto qualcosa di veramente brutto per questo approccio.
posso anche pensare di attuare la seguente logica PL/SQL:
if n_RequiredId is null then
select m.id_pk, m.value bulk collect into t_Output from myTable m;
else
select m.id_pk, m.value bulk collect
into t_Output
from myTable m
where m.id_pk = n_RequiredId;
end if;
Ma sarebbe diventato troppo complesso se io incontro più di un parametro di questo tipo.
Cosa mi consiglieresti?
Oh fantastico! Questo salva la mia giornata. Tuttavia, il primo non ha funzionato coz se la colonna è nullable, questa clausola filtrerà i valori nulli mentre nella domanda non filtreresti i valori nulli nel secondo caso. –