Po prostu użyj coalesce
. Jest to najbardziej czytelny i zrozumiały sposób na napisanie tego. Ponieważ logika jest zawarta w jednym predykacie, łatwiej jest utrzymać i usunąć:
select * from job where id = coalesce(:i, id)
Zgodnie z żądaniem „dowód”, który faktycznie używa indeksu:
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
Plan: