Cukup gunakan coalesce
. Ini adalah cara yang paling mudah dibaca dan dimengerti untuk menulis ini. Karena logikanya terkandung dalam satu predikat, lebih mudah untuk mempertahankan dan menghapusnya:
select * from job where id = coalesce(:i, id)
Seperti yang diminta, 'bukti' ini sebenarnya menggunakan indeks:
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
Rencana: