中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

ORACLE 觸發器語法有哪些以及實例分析

發布時間:2021-11-04 17:16:37 來源:億速云 閱讀:408 作者:柒染 欄目:建站服務器

ORACLE 觸發器語法有哪些以及實例分析,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

SELECT * FROM dept_sal;

實例1

--創建觸發器,它記錄表的刪除數據

--創建表

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;

實例2

--創建觸發器,利用視圖插入數據

--創建表

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;

實例3

--創建觸發器,比較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';

實例4

--創建觸發器,將操作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;

關于ORACLE 觸發器語法有哪些以及實例分析問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

达拉特旗| 宝兴县| 永康市| 吉木乃县| 巍山| 大同市| 卢龙县| 山西省| 吉林省| 夏邑县| 老河口市| 台北县| 隆安县| 博罗县| 汪清县| 辽阳县| 石河子市| 菏泽市| 札达县| 扎鲁特旗| 宽城| 怀安县| 买车| 左云县| 留坝县| 凉山| 台前县| 那曲县| 安乡县| 宣威市| 宁津县| 北票市| 大方县| 龙里县| 曲周县| 桐梓县| 江安县| 合山市| 蓬溪县| 虎林市| 楚雄市|