Oracle
 sql >> база данни >  >> RDS >> Oracle

(PLSQL) Кой е най-простият израз за тестване за променена стойност в тригер на Oracle при актуализиране?

Всички тези по-кратки методи имат няколко недостатъка. Те са бавни, неинтуитивни, потенциално бъги (избягвайте магически стойности, когато е възможно) и са по-собствени от нормалните условия като AND/OR/IS NULL/IS NOT NULL.

NVL, DECODE, COALESCE и т.н. могат да бъдат по-скъпи, отколкото си мислите.

Виждал съм това много пъти в няколко различни контекста, ето прост пример:

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

Препоръчвам ви да отделите допълнителната секунда, за да го въведете по логичния начин. Вашият код ще изглежда по-добре и ще работи по-бързо.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Доставчикът на ADO.NET „Oracle.ManagedDataAccess.Client“ или не е регистриран в конфигурационния файл на машината или приложението, или не може да бъде зареден

  2. Как да се посочи идентификаторът на родител в идентификатора на дете с JPA/Hibernate?

  3. премахване на милисекунди от поле на оракул tmstmp

  4. Oracle Insert чрез Изберете от множество таблици, където една таблица може да няма ред

  5. ODP.NET управляваната библиотека разрешава псевдоним, но 32-битовата библиотека го прави