Oracle
 sql >> Database >  >> RDS >> Oracle

(PLSQL) Qual è l'espressione più semplice per verificare un valore modificato in un trigger di aggiornamento Oracle?

Questi metodi più brevi hanno tutti diversi svantaggi. Sono lenti, non intuitivi, potenzialmente difettosi (evitare valori magici quando possibile) e più proprietari rispetto a condizioni normali come AND/OR/IS NULL/IS NOT NULL.

NVL, DECODE, COALESCE, ecc., possono essere più costosi di quanto pensi.

L'ho visto molte volte in diversi contesti, ecco un semplice esempio:

--Shorter method: Takes about 0.45 seconds
declare
  j number;
begin
  for i in 1 .. 1000000 loop
    j := i;
    if nvl(i <> j, (i is null) <> (j is null)) then
      null;
    end if;
  end loop;
end;
/

--Normal method: Takes about 0.25 seconds
declare
  j number;
begin
  for i in 1 .. 1000000 loop
    j := i;
    if i <> j or (i is null and j is not null) or (i is not null and j is null) then
      null;
    end if;
  end loop;
end;
/

Ti consiglio di dedicare il secondo in più per digitarlo in modo logico. Il tuo codice avrà un aspetto migliore e verrà eseguito più velocemente.