Oracle Plsql After Delete Trigger

Oracle / PLSQL: AFTER DELETE Trigger

This Oracle tutorial explains how to create an AFTER DELETE Trigger in Oracle with syntax and examples.

Description

An AFTER DELETE Trigger means that Oracle will fire this trigger after the DELETE operation is executed.

Syntax

The syntax to create an AFTER DELETE Trigger in Oracle/PLSQL is:

CREATE [ OR REPLACE ] TRIGGER <strong>trigger_name</strong>
AFTER DELETE
   ON <strong>table_name</strong>
   [ FOR EACH ROW ]

DECLARE
   -- variable declarations


BEGIN
   -- trigger code


EXCEPTION
   WHEN ...
   -- exception handling


END;

Parameters or Arguments

OR REPLACE

Optional. If specified, it allows you to re-create the trigger is it already exists so that you can change the trigger definition without issuing a drop a trigger statement.

trigger_name

The name of the trigger to create.

AFTER DELETE

It indicates that the trigger will fire after the DELETE operation is executed.

table_name

The name of the table that the trigger is created on.

Restrictions

  • You can not create an AFTER trigger on a view.
  • You can not update the :NEW values.
  • You can not update the :OLD values.

Note

Example

Let's look at an example of how to create an AFTER DELETE trigger using the CREATE TRIGGER statement.

If you had a table created as follows:

CREATE TABLE orders
( order_id number(5),
  quantity number(4),
  cost_per_item number(6,2),
  total_cost number(8,2)
);

We could then use the CREATE TRIGGER statement to create an AFTER DELETE trigger as follows:

TIP: When using SQLPlus, you need to enter slash on a new line after the trigger. Otherwise, the script won't execute.
CREATE OR REPLACE TRIGGER orders_after_delete
AFTER DELETE
   ON orders
   FOR EACH ROW

DECLARE
   v_username varchar2(10);

BEGIN

   -- Find username of person performing the DELETE on the table

   SELECT user INTO v_username
   FROM dual;

   -- Insert record into audit table

   INSERT INTO orders_audit
   ( order_id,
     quantity,
     cost_per_item,
     total_cost,
     delete_date,
     deleted_by)
   VALUES
   ( :old.order_id,
     :old.quantity,
     :old.cost_per_item,
     :old.total_cost,
     sysdate,
     v_username );

END;

/