coalesce
を使用するだけです 。これを書くのに最も読みやすく理解しやすい方法です。ロジックは1つの述語に含まれているため、保守と削除が簡単です。
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
計画: