Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

(PLSQL) Qual é a expressão mais simples para testar um valor alterado em um gatilho de atualização do Oracle?


Todos esses métodos mais curtos têm várias desvantagens. Eles são lentos, não intuitivos, potencialmente cheios de bugs (evite valores mágicos sempre que possível) e mais proprietários do que condições normais como AND/OR/IS NULL/IS NOT NULL.

NVL, DECODE, COALESCE, etc., podem ser mais caros do que você pensa.

Eu já vi isso muitas vezes em vários contextos diferentes, aqui está um exemplo simples:
--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;
/

Eu recomendo que você gaste o segundo extra para digitá-lo da maneira lógica. Seu código terá uma aparência melhor e será executado mais rapidamente.