Oracle
 sql >> Datenbank >  >> RDS >> Oracle

(PLSQL) Was ist der einfachste Ausdruck, um auf einen geänderten Wert in einem Oracle On-Update-Trigger zu testen?

Diese kürzeren Methoden haben alle mehrere Nachteile. Sie sind langsam, nicht intuitiv, möglicherweise fehlerhaft (vermeiden Sie magische Werte, wann immer möglich) und proprietärer als normale Bedingungen wie UND/ODER/IST NULL/IST NICHT NULL.

NVL, DECODE, COALESCE usw. können teurer sein als Sie denken.

Ich habe das oft in verschiedenen Kontexten gesehen, hier ist ein einfaches Beispiel:

--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;
/

Ich empfehle Ihnen, die zusätzliche Sekunde zu verbringen, um es auf logische Weise einzugeben. Ihr Code wird besser aussehen und schneller ausgeführt werden.