sql >> Database >  >> RDS >> Oracle

Orakel. Alles selecteren als de parameter null is, anders een specifiek itemprobleem retourneren

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:



  1. Match en Against gebruiken in MySQL en CodeIgniter

  2. PostgreSQL-trigger na update van een specifieke kolom

  3. InnoDB samengestelde indexeringsvolgorde en INSERT-prestaties

  4. Redenen voor MySQL-authenticatiefout:toegang geweigerd voor gebruiker 'xxx'@'yyy'?