:newand :old- pseudo-records that allow you to access the new and old values of specific columns. If i have a table
CREATE TABLE foo (
foo_id NUMBER PRIMARY KEY,
bar VARCHAR2(10),
baz VARCHAR2(10)
);
and I insert a line
INSERT INTO foo( foo_id, bar, baz )
VALUES( 1, 'Bar 1', 'Baz 1' );
then at line level until the trigger starts
:new.foo_id will be 1
:new.bar will be 'Bar 1'
:new.baz will be 'Baz 1'
and
:old.foo_id will be NULL
:old.bar will be NULL
:old.baz will be NULL
If you then update this line
UPDATE foo
SET baz = 'Baz 2'
WHERE foo_id = 1
then in the level trigger before the update
:new.foo_id will be 1
:new.bar will be 'Bar 1'
:new.baz will be 'Baz 2'
and
:old.foo_id will be 1
:old.bar will be 'Bar 1'
:old.baz will be 'Baz 1'
If I then delete the line
DELETE FROM foo
WHERE foo_id = 1
and then in the level trigger before deleting,
:new.foo_id will be NULL
:new.bar will be NULL
:new.baz will be NULL
and
:old.foo_id will be 1
:old.bar will be 'Bar 1'
:old.baz will be 'Baz 2'