sql >> Database >  >> RDS >> Oracle

(PLSQL) Wat is de eenvoudigste uitdrukking om te testen op een gewijzigde waarde in een Oracle on-update trigger?

Deze kortere methoden hebben allemaal verschillende nadelen. Ze zijn traag, niet-intuïtief, potentieel buggy (vermijd waar mogelijk magische waarden) en meer eigendom dan normale omstandigheden zoals AND/OF/IS NULL/IS NOT NULL.

NVL, DECODE, COALESCE, etc. kunnen duurder zijn dan u denkt.

Ik heb dit vaak gezien in verschillende contexten, hier is een eenvoudig voorbeeld:

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

Ik raad je aan de extra seconde te besteden om het op de logische manier te typen. Uw code zal er beter uitzien en sneller werken.



  1. PL/SQL:Fout PLS-00306:verkeerd aantal of typen argumenten in aanroep tot geactiveerd voor tabel met getallen

  2. Krijg het totaal van een veld gegroepeerd op datum en een ander veld

  3. Een geografisch gedistribueerde MariaDB-cluster ontwerpen

  4. tsql geaggregeerde tekenreeks voor groeperen op