sql >> Databasteknik >  >> RDS >> Oracle

(PLSQL) Vilket är det enklaste uttrycket att testa för ett ändrat värde i en Oracle-utlösare vid uppdatering?

Dessa kortare metoder har alla flera nackdelar. De är långsamma, ointuitiva, potentiellt buggiga (undvik magiska värden när det är möjligt) och mer proprietära än normala förhållanden som OCH/ELLER/ÄR NULL/ÄR INTE NULL.

NVL, DECODE, COALESCE, etc., kan vara dyrare än du tror.

Jag har sett detta många gånger i flera olika sammanhang, här är ett enkelt exempel:

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

Jag rekommenderar att du lägger den extra sekunden på att skriva det logiskt. Din kod kommer att se bättre ut och köras snabbare.



  1. Psychopg2-inlägg har inte sparats

  2. Felaktigt heltalsvärde:'' för kolumn

  3. Java JDBC:dejtar konsekvent två lediga dagar

  4. Korrekt hantering av långa data i Hibernate