Usa semplicemente coalesce
. È il modo più leggibile e comprensibile per scrivere questo. Poiché la logica è contenuta in un predicato, è più facile mantenere e rimuovere:
select * from job where id = coalesce(:i, id)
Come richiesto, una 'prova' utilizza effettivamente l'indice:
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
Piano: