DeepEdit!

Программирование баз данных на Oracle, техническая документация, литература, статьи и публикации

  • Увеличить размер шрифта
  • Размер шрифта по умолчанию
  • Уменьшить размер шрифта

Псевдозаписи NEW и OLD

При запуске триггера уровня строки исполняющее ядро PL/SQL создает и заполняет две структуры данных, которые работают подобно записям. Это псевдозаписи NEW и OLD (приставка «псевдо» объясняется тем, что они обладают не всеми свойствами настоящих записей PL/SQL). OLD хранит начальные значения записи, обрабатываемой триггером, а NEW - новые значения. Эти записи имеют такую же структуру, как запись, объявленная при помощи атрибута %ROWTYPE на основе таблицы, к которой относится триггер.
При работе с псевдозаписями NEW и OLD необходимо учитывать несколько правил:
Для триггеров, относящихся к командам INSERT, структура OLD не содержит никаких данных, «старого» набора значений не существует.
Для триггеров, относящихся к командам UPDATE, заполняются обе структуры: OLD и NEW. OLD содержит исходные значения (до обновления), а NEW - те значения, которые получит строка после выполнения обновления.
Для триггеров, относящихся к командам DELETE, структура NEW не содержит никаких данных, ведь речь идет об удалении записи.
Изменение значений полей структуры OLD запрещено, попытка такого изменения приведет к возникновению ошибки ORA-04085. Изменение значений полей структуры NEW допустимо.
Структура NEW или OLD не может передаваться как параметр типа запись в процедуру или функцию, вызываемую внутри триггера. Можно передавать только отдельные поля псевдозаписей. В файле gentrigrec.sp на веб-сайте этой книге приведена программа, формирующая код, который передает значения NEW и OLD записям, которые уже могут передаваться как параметры.
• Выполнение операций уровня записи для структур NEW и OLD не поддерживается. Например, подобный код вызовет ошибку при компиляции триггера:
Очевидно, имеется в виду секция исполнения триггера. 
При ссылке на структуру NEW или OLD внутри анонимного блока триггера1 необходимо предварять соответствующие ключевые слова двоеточием, например:
 









jAntivirus