В общем, использование операторов - лучший подход.Это связано с тем, что оптимизатор может быть умнее, когда столбцы не являются аргументами функций.
В этом ответе предполагается, что roll_no
не является null
.
Хотя это может быть случай, когдаОптимизатор Oracle иногда ловит, вы можете обнаружить, что написание запроса с использованием union all
на самом деле дает лучший план выполнения при наличии соответствующего индекса:
select s.*
from student s
where roll_no = :ROLL_NO
union all
select s.*
from student s
where :ROLL_NO is NULL;