溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

ORACLE 觸發(fā)器語(yǔ)法有哪些以及實(shí)例分析

發(fā)布時(shí)間:2021-11-04 17:16:37 來(lái)源:億速云 閱讀:400 作者:柒染 欄目:建站服務(wù)器

ORACLE 觸發(fā)器語(yǔ)法有哪些以及實(shí)例分析,針對(duì)這個(gè)問(wèn)題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問(wèn)題的小伙伴找到更簡(jiǎn)單易行的方法。

SELECT * FROM dept_sal;

實(shí)例1

--創(chuàng)建觸發(fā)器,它記錄表的刪除數(shù)據(jù)

--創(chuàng)建表

CREATE TABLE employee

(

 id    VARCHAR2(4)  NOT NULL,

 name VARCHAR2(15) NOT NULL,

 age  NUMBER(2)     NOT NULL,

 sex  CHAR          NOT NULL

);

DESC employee;

--插入數(shù)據(jù)

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

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

--創(chuàng)建記錄表

CREATE TABLE old_employee AS

 SELECT * FROM employee;

DESC old_employee;

--創(chuàng)建觸發(fā)器

CREATE OR REPLACE TRIGGER tig_old_emp

AFTER DELETE ON employee  --

FOR EACH ROW  --語(yǔ)句級(jí)觸發(fā),即每一行觸發(fā)一次

BEGIN

 INSERT INTO old_employee

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

END;

/

--下面進(jìn)行測(cè)試

DELETE employee;

SELECT * FROM old_employee;

實(shí)例2

--創(chuàng)建觸發(fā)器,利用視圖插入數(shù)據(jù)

--創(chuàng)建表

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));

--插入數(shù)據(jù)

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');

--創(chuàng)建視圖連接兩張表

CREATE VIEW tab_view AS

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

   WHERE tab1.tid = tab2.tid;

--創(chuàng)建觸發(fā)器

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;

/

--現(xiàn)在就可以利用視圖插入數(shù)據(jù)

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

--查看效果

SELECT * FROM tab_view;

實(shí)例3

--創(chuàng)建觸發(fā)器,比較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('工資未作任何變動(dòng)');

 END IF;

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

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

END;

/

--執(zhí)行UPDATE查看效果

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

實(shí)例4

--創(chuàng)建觸發(fā)器,將操作CREATE、DROP存儲(chǔ)在log_info

--創(chuàng)建表

CREATE TABLE log_info

(

 manager_user VARCHAR2(15),

 manager_date VARCHAR2(15),

 manager_type VARCHAR2(15),

 obj_name VARCHAR2(15),

 obj_type VARCHAR2(15)

);

--創(chuàng)建觸發(fā)器

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;

/

--測(cè)試語(yǔ)句

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身份登陸才能使用此數(shù)據(jù)字典

--啟用和禁用

ALTER TRIGGER trigger_name DISABLE;

ALTER TRIGGER trigger_name ENABLE;

關(guān)于ORACLE 觸發(fā)器語(yǔ)法有哪些以及實(shí)例分析問(wèn)題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒(méi)有解開(kāi),可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識(shí)。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI