Просто използвайте coalesce
. Това е най-четливият и разбираем начин да напишете това. Тъй като логиката се съдържа в един предикат, е по-лесно да се поддържа и премахва:
select * from job where id = coalesce(:i, id)
Както е поискано, „доказателство“ това всъщност използва индекса:
create table x ( id number(15) null );
create unique index x_pk on x( id );
select id
from x
where id = coalesce(:x, id)
; -- Uses index
select id
from x
where id = :x or :x is null
; -- Full table scan
План: