ORACLE 觸發器語法及例項 三

達芬奇的夢發表於2017-05-16

SELECT * FROM dept_sal;

--建立觸發器,它記錄表的刪除資料

--建立表

CREATE TABLE employee

(

 id    VARCHAR2(4)  NOT NULL,

 name VARCHAR2(15) NOT NULL,

 age  NUMBER(2)     NOT NULL,

 sex  CHAR          NOT NULL

);

DESC employee;

--插入資料

INSERT INTO employee VALUES('e101','zhao',23,'M');

INSERT INTO employee VALUES('e102','jian',21,'F');

--建立記錄表

CREATE TABLE old_employee AS

 SELECT * FROM employee;

DESC old_employee;

--建立觸發器

CREATE OR REPLACE TRIGGER tig_old_emp

AFTER DELETE ON employee  --

FOR EACH ROW  --語句級觸發,即每一行觸發一次

BEGIN

 INSERT INTO old_employee

   VALUES(:old.id,:old.name,:old.age,:old.sex);  --:old代表舊值

END;

/

--下面進行測試

DELETE employee;

SELECT * FROM old_employee;

--建立觸發器,利用檢視插入資料

--建立表

CREATE TABLE tab1 (tid NUMBER(4) PRIMARY KEY,tname VARCHAR2(20),tage NUMBER(2));

CREATE TABLE tab2 (tid NUMBER(4),ttel VARCHAR2(15),tadr VARCHAR2(30));

--插入資料

INSERT INTO tab1 VALUES(101,'zhao',22);

INSERT INTO tab1 VALUES(102,'yang',20);

INSERT INTO tab2 VALUES(101,'13761512841','AnHuiSuZhou');

INSERT INTO tab2 VALUES(102,'13563258514','AnHuiSuZhou');

--建立檢視連線兩張表

CREATE VIEW tab_view AS

 SELECT tab1.tid,tname,ttel,tadr FROM tab1,tab2

   WHERE tab1.tid = tab2.tid;

--建立觸發器

CREATE OR REPLACE TRIGGER tab_trigger

INSTEAD OF INSERT ON tab_view

BEGIN

 INSERT INTO tab1(tid,tname) VALUES(:new.tid,:new.tname);

 INSERT INTO tab2(ttel,tadr) VALUES(:new.ttel,:new.tadr);

END;

/

--現在就可以利用檢視插入資料

INSERT INTO tab_view VALUES(105,'zhaoyang','13886681288','beijing');

--檢視效果

SELECT * FROM tab_view;

--建立觸發器,比較emp表中更新的工資

CREATE OR REPLACE TRIGGER sal_emp

BEFORE UPDATE ON emp

FOR EACH ROW

BEGIN

 IF :OLD.sal > :NEW.sal THEN

   DBMS_OUTPUT.PUT_LINE('工資減少');

 ELSIF :OLD.sal < :NEW.sal THEN

   DBMS_OUTPUT.PUT_LINE('工資增加');

 ELSE

   DBMS_OUTPUT.PUT_LINE('工資未作任何變動');

 END IF;

 DBMS_OUTPUT.PUT_LINE('更新前工資 ' || :OLD.sal);

 DBMS_OUTPUT.PUT_LINE('更新後工資 ' || :NEW.sal);

END;

/

--執行UPDATE檢視效果

UPDATE emp SET sal = 3000 WHERE empno = '7788';

--建立觸發器,將操作CREATEDROP儲存在log_info

--建立表

CREATE TABLE log_info

(

 manager_user VARCHAR2(15),

 manager_date VARCHAR2(15),

 manager_type VARCHAR2(15),

 obj_name VARCHAR2(15),

 obj_type VARCHAR2(15)

);

--建立觸發器

CREATE OR REPLACE TRIGGER trig_log_info

AFTER CREATE OR DROP ON SCHEMA

BEGIN

 INSERT INTO log_info

   VALUES(USER,SYSDATE,SYS.DICTIONARY_OBJ_NAME,SYS.DICTIONARY_OBJ_OWNER,

    SYS.DICTIONARY_OBJ_TYPE);

END;

/

--測試語句

CREATE TABLE a(id NUMBER);

CREATE TYPE aa AS OBJECT(id NUMBER);

/

DROP TABLE a;

DROP TYPE aa;

--檢視效果

SELECT * FROM log_info;

 

 

--相關資料字典-----------------------------------------------------//

SELECT * FROM USER_TRIGGERS;

SELECT * FROM ALL_TRIGGERS;

SELECT * FROM DBA_TRIGGERS;  --必須以DBA身份登陸才能使用此資料字典

--啟用和禁用

ALTER TRIGGER trigger_name DISABLE;

ALTER TRIGGER trigger_name ENABLE;

========================================

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31444259/viewspace-2139139/,如需轉載,請註明出處,否則將追究法律責任。

相關文章