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

Usa come '%' e abbina i valori NULL a NUMBER colonne

Sembra che ti stai rendendo la vita difficile. Lasciali nulli, quindi fai:

where (param1 is null or t.col1 like param1)
and (param2 is null or t.col2 like param2)

Se param1 (l'argomento della procedura; la vita è più semplice quando i nomi dei parametri/variabili e i nomi delle colonne sono diversi... quindi ho cambiato i nomi delle colonne per renderlo un po' più chiaro) è nullo, sostanzialmente viene ignorato* e tutte le righe passano quella parte del filtro, indipendentemente dal fatto che il valore della colonna sia null o meno. Se param2 è non null allora is null verifica se non riesce e solo le righe con valori di colonna (non nulli) che corrispondono a param2 il valore soddisfa quella parte del filtro.

* Condizioni in un or può essere valutato in qualsiasi ordine; mettendo il is null check first non significa necessariamente il like non verrà valutato, ma l'ottimizzatore è piuttosto intelligente su questo genere di cose