sql >> Databáze >  >> RDS >> Oracle

(PLSQL) Jaký je nejjednodušší výraz pro testování změněné hodnoty ve spouštěči Oracle on-update?

Všechny tyto kratší metody mají několik nevýhod. Jsou pomalé, neintuitivní, potenciálně chybné (vyhýbejte se magickým hodnotám, kdykoli je to možné) a více proprietární než normální podmínky, jako je AND/OR/IS NULL/IS NOT NULL.

NVL, DECODE, COALESCE atd. mohou být dražší, než si myslíte.

Viděl jsem to mnohokrát v několika různých kontextech, zde je jednoduchý příklad:

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

Doporučuji strávit vteřinu navíc, abyste to napsali logickým způsobem. Váš kód bude vypadat lépe a bude fungovat rychleji.



  1. Mysql:Převod DB z místního času na UTC

  2. Uchovávání dat plus indexová data v paměti - InnoDB vs. MyISAM

  3. Vyberte první nenulovou buňku ze dvou sloupců v PostgreSQL

  4. Jak zabránit PostgreSQL ve změně mých pěkně naformátovaných definic SQL