您好,登錄后才能下訂單哦!
ORACLE 觸發器語法有哪些以及實例分析,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
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';
--創建觸發器,將操作CREATE、DROP存儲在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 觸發器語法有哪些以及實例分析問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。