Oracle
 sql >> Baza danych >  >> RDS >> Oracle

(PLSQL) Jakie jest najprostsze wyrażenie do przetestowania pod kątem zmiany wartości w wyzwalaczu aktualizacji Oracle?

Wszystkie te krótsze metody mają kilka wad. Są powolne, nieintuicyjne, potencjalnie błędne (w miarę możliwości unikaj wartości magicznych) i bardziej zastrzeżone niż normalne warunki, takie jak AND/LUB/IS NULL/IS NOT NULL.

NVL, DECODE, COALESCE itp. mogą być droższe niż myślisz.

Widziałem to wiele razy w kilku różnych kontekstach, oto prosty przykład:

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

Polecam poświęcić dodatkową sekundę na wpisanie tego w logiczny sposób. Twój kod będzie wyglądał lepiej i będzie działał szybciej.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Przekaż tablicę jako parametr wejściowy do procedury składowanej Oracle za pomocą prostego wywołania jdbc

  2. Błąd SQL ORA 01427

  3. Likwidacja agenta w EM13c

  4. ora:00936 Błąd braku wyrażenia

  5. Rekurencyjne zapytanie SQL w tabeli samoodwołującej się (Oracle)