Gebruik gewoon coalesce
. Het is de meest leesbare en begrijpelijke manier om dit te schrijven. Omdat de logica in één predikaat zit, is het gemakkelijker te onderhouden en te verwijderen:
select * from job where id = coalesce(:i, id)
Zoals gevraagd, een 'bewijs' dat dit daadwerkelijk de index gebruikt:
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: