Trigger variables (PL/SQL)

NEW and OLD are special variables that you can use with PL/SQL triggers without explicitly defining them.

  • NEW is a pseudo-record name that refers to the new table row for insert and update operations in row-level triggers. Its usage is :NEW.column, where column is the name of a column in the table on which the trigger is defined.
    • When used in a before row-level trigger, the initial content of :NEW.column is the column value in the new row that is to be inserted or in the row that is to replace the old row.
    • When used in an after row-level trigger, the new column value has already been stored in the table.
    • When a trigger is activated by a DELETE operation, the :NEW.column used in that trigger is null.

    In the trigger code block, :NEW.column can be used like any other variable. If a value is assigned to :NEW.column in the code block of a before row-level trigger, the assigned value is used in the inserted or updated row.

  • OLD is a pseudo-record name that refers to the old table row for update and delete operations in row-level triggers. Its usage is :OLD.column, where column is the name of a column in the table on which the trigger is defined.
    • When used in a before row-level trigger, the initial content of :OLD.column is the column value in the row that is to be deleted or in the old row that is to be replaced by the new row.
    • When used in an after row-level trigger, the old column value is no longer stored in the table.
    • When a trigger is activated by an INSERT operation, the :OLD.column used in that trigger is null.

    In the trigger code block, :OLD.column can be used like any other variable. If a value is assigned to :OLD.column in the code block of a before row-level trigger, the assigned value has no affect on the action of the trigger.