Кто-нибудь может сказать мне, в чем разница между new и: new

#oracle #plsql #database-trigger

#Oracle #plsql #database-trigger

Вопрос:

 CREATE OR REPLACE TRIGGER Print_salary_changes
  BEFORE DELETE OR INSERT OR UPDATE ON Emp_tab
  FOR EACH ROW
WHEN (new.Empno > 0)
DECLARE
    sal_diff number;
BEGIN
    sal_diff  := :new.sal  - :old.sal;
    dbms_output.put('Old salary: ' || :old.sal);
    dbms_output.put('  New salary: ' || :new.sal);
    dbms_output.put_line('  Difference ' || sal_diff);
END;
  

Я не могу понять разницу между new и: new в приведенном выше запросе

Ответ №1:

Как подробно описано в документации:

NEW в WHEN предложении используется для указания условия запуска.

Ключевые слова NEW и OLD, указанные в предложении WHEN, не считаются переменными привязки, поэтому перед ними не ставится двоеточие (:). Однако вы должны ставить двоеточие перед NEW и OLD во всех ссылках, отличных от предложения WHEN.

:NEW используется ли псевдоколонок для представления новой записи в теле триггера.

Когда срабатывает триггер на уровне строки, система выполнения PL / SQL создает и заполняет две псевдозаписи OLD и NEW. Они называются псевдозаписями, потому что они обладают некоторыми, но не всеми, свойствами записей.