Download ppt - Database Triggers

Transcript
Page 1: Database Triggers

Created by : Aliya Saldanha

Page 2: Database Triggers

What is a trigger?Trigger is like a procedure that is automatically invoked by the DBMS in response to specified changes to data base

Trigger is like a ‘Daemon that monitors a data base, and is executed when the data base is modified in a way that matches the event specification

A data base that has a set of associated triggers is called an active data base

Page 3: Database Triggers

Unlike a stored procedure, you can enable and disable a trigger, but you cannot explicitly invoke it.

While a trigger is enabled, the database automatically invokes it—that is, the trigger fires—whenever its triggering event occurs. While a trigger is disabled, it does not fire.

Page 4: Database Triggers

You create a trigger with the CREATE TRIGGER statement.

You specify the triggering event in terms of triggering statements and the item on which they act.

The trigger is said to be created on or defined on the item, which is either a table, a view, a schema, or the database.

You also specify the timing point, which determines whether the trigger fires before or after the triggering statement runs and whether it fires for each row that the triggering statement affects. By default, a trigger is created in the enabled state.

Page 5: Database Triggers

If the trigger is created on a table or view, then the triggering event is composed of DML statements, and the trigger is called a DML trigger.

If the trigger is created on a schema or the database, then the triggering event is composed of either DDL or database operation statements, and the trigger is called a system trigger.

Page 6: Database Triggers

Just like with procedures and functions, creating triggers requires certain privileges which are not part of the default privilege set.

If you cannot create triggers from these notes because of permissions, you (or the admin) has to GRANT CREATE TRIGGER privilege on your username.

For example, to allow user ‘alex’ to create triggers, I may do something like this:

GRANT CREATE TRIGGER TO alex; Note that if you are accessing a public Oracle server you must ask the admin to setup these things for you

Page 7: Database Triggers
Page 8: Database Triggers

Event A change to data base that activates the trigger

• RestrictionA trigger restriction specifies a Boolean (logical) expression that must be TRUE for the trigger to fire

• ActionA procedure that is executed when the trigger is activated.Similar to stored procedures, a trigger action can contain PL/SQL statements

Page 9: Database Triggers

Row TriggersA row trigger is fired each time the table is affected by the triggering statement. If a triggering statement affects no rows, a row trigger is not executed at all.

• Statement Triggers A statement trigger is fired once on behalf of the triggering statement, regardless of the number of rows in the table that the triggering statement affects (even if no rows are affected)

Page 10: Database Triggers

Before TriggerExecute the trigger action before the triggering statement. Eliminate unnecessary processing of the triggering statement.

• After TriggerAFTER triggers are used when you want the triggering statement to complete before executing the trigger action

Page 11: Database Triggers
Page 12: Database Triggers

CREATE or REPLACE TRIGGER cs348    after INSERT ON weatherforecast FOR EACH ROW     WHEN (:new.temp>= 60)     BEGIN DBMS_OUTPUT.PUT_LINE(‘NICE WEATHER’);     END cs348/ Show error;

Page 13: Database Triggers

Update table weatherforcast

T1 Fired

Before Update on weatherforcast For each rowBegin

Insert into weatherforcast2 values (.. , ..);END;

T2 Fired

Before Update on weatherforcast 2For each rowBegin

Insert into weatherforcast3 values (.. , ..);END;

Page 14: Database Triggers
Page 15: Database Triggers

CREATE TABLE PERSON ( ID INT, NAME VARCHAR(30), DOB DATE, PRIMARY KEY(ID) );

The above creates a PERSON table with an ID, a NAME and a DOB columns (fields).

Also, let’s not forget to setup: SET SERVEROUTPUT ON;

Page 16: Database Triggers

CREATE OR REPLACE TRIGGER PERSON_INSERT_BEFORE

BEFORE INSERT ON PERSON FOR EACH ROW BEGIN

DBMS_OUTPUT.PUT_LINE(’BEFORE INSERT OF ’ || :NEW.NAME);

END;

Page 17: Database Triggers

The single INSERT statement fires the trigger.

When we run it, we get the print out of ’BEFORE INSERT OF JOHN DOE’.

Ie: SQL> INSERT INTO PERSON(ID,NAME,DOB) VALUES (1,’JOHN DOE’,SYSDATE);

BEFORE INSERT OF JOHN DOE 1 row created.

Page 18: Database Triggers

CREATE OR REPLACE TRIGGER PERSON_INSERT_AFTER AFTER INSERT ON PERSON FOR EACH ROW BEGIN DBMS_OUTPUT.PUT_LINE(’AFTER INSERT OF ’ || :NEW.NAME); END;

Page 19: Database Triggers

INSERT INTO PERSON(ID,NAME,DOB) VALUES (2,’JANE DOE’,SYSDATE);

SQL> INSERT INTO PERSON(ID,NAME,DOB) VALUES (2,’JANE DOE’,SYSDATE);

BEFORE INSERT OF JANE DOE AFTER INSERT OF JANE DOE

1 row created.

Notice that both triggers have fired. One before the INSERT the other one after

Page 20: Database Triggers

ItemId quantity customerid unitprice

123 1 224ItemId unitprice

123 $440

ItemId quantity customerid unitprice

123 1 224 440

• What are the uses of triggers?Flexible Management of integrity

Trigger Fired

Log generation to support auditing & security

Prevent invalid transactions

Page 21: Database Triggers

Automatically generate virtual column values Log events Gather statistics on table access Modify table data when DML statements are issued

against views Enforce referential integrity when child and parent tables

are on different nodes of a distributed database Publish information about database events, user events,

and SQL statements to subscribing applications Prevent DML operations on a table after regular business

hours Prevent invalid transactions Enforce complex business or referential integrity rules

that you cannot define with constraints

USES

Advantages


Recommended