sql >> Base de Datos >  >> RDS >> Oracle

(PLSQL) ¿Cuál es la expresión más simple para probar un valor modificado en un activador de actualización de Oracle?

Todos estos métodos más cortos tienen varias desventajas. Son lentos, poco intuitivos, potencialmente defectuosos (evite los valores mágicos siempre que sea posible) y más patentados que las condiciones normales como AND/OR/IS NULL/IS NOT NULL.

NVL, DECODE, COALESCE, etc., pueden ser más costosos de lo que piensa.

He visto esto muchas veces en varios contextos diferentes, aquí hay un ejemplo 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;
/

Le recomiendo que dedique un segundo adicional a escribirlo de la manera lógica. Su código se verá mejor y se ejecutará más rápido.