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

(PLSQL) Hvad er det enkleste udtryk at teste for en ændret værdi i en Oracle on-update trigger?

Disse kortere metoder har alle adskillige ulemper. De er langsomme, uintuitive, potentielt buggy (undgå magiske værdier, når det er muligt), og mere proprietære end normale forhold som AND/OR/IS NULL/IS NOT NULL.

NVL, DECODE, COALESCE osv. kan være dyrere end du tror.

Jeg har set dette mange gange i flere forskellige sammenhænge, ​​her er et simpelt eksempel:

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

Jeg anbefaler, at du bruger det ekstra sekund på at skrive det på den logiske måde. Din kode vil se bedre ud og køre hurtigere.



  1. ADDDATE() Eksempler – MySQL

  2. Optælling af rækker i en indre sammenføjning

  3. SQL-udfordring/puslespil:Givet et stakspor - Hvordan finder man det øverste element på hvert tidspunkt?

  4. Sådan returneres dublerede nøgler fra et JSON-dokument i SQL Server