Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Verwenden Sie like '%' und gleichen Sie NULL-Werte mit NUMBER Spalten ab

Das scheint, als würdest du dir das Leben schwer machen. Lassen Sie sie null, dann tun Sie:

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

Wenn param1 (das Prozedurargument; das Leben ist einfacher, wenn Ihre Parameter-/Variablennamen und Spaltennamen unterschiedlich sind ... also habe ich die Spaltennamen geändert, um es etwas klarer zu machen) null ist, wird es im Grunde ignoriert * und alle Zeilen passieren diesen Teil des Filters, ob der Spaltenwert null ist oder nicht null. Wenn param2 ist nicht null, dann ist is null Prüfen Sie, ob dies fehlschlägt, und nur Zeilen mit (Nicht-Null-)Spaltenwerten, die mit param2 übereinstimmen Wert diesen Teil des Filters erfüllen.

* Bedingungen in einem or kann in beliebiger Reihenfolge ausgewertet werden; Setzen des is null check first bedeutet nicht unbedingt like wird nicht ausgewertet - aber der Optimierer ist in solchen Dingen ziemlich schlau