Oracle
 sql >> Base de données >  >> RDS >> Oracle

(PLSQL) Quelle est l'expression la plus simple pour tester une valeur modifiée dans un déclencheur de mise à jour Oracle ?

Ces méthodes plus courtes présentent toutes plusieurs inconvénients. Elles sont lentes, non intuitives, potentiellement boguées (évitez les valeurs magiques autant que possible) et plus propriétaires que les conditions normales telles que AND/OR/IS NULL/IS NOT NULL.

NVL, DECODE, COALESCE, etc., peuvent être plus chers que vous ne le pensez.

J'ai vu cela de nombreuses fois dans plusieurs contextes différents, voici un exemple simple :

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

Je vous recommande de passer la seconde supplémentaire pour le taper de manière logique. Votre code sera plus beau et s'exécutera plus rapidement.