您好,登錄后才能下訂單哦!
ORACLE 觸發(fā)器語(yǔ)法有哪些以及實(shí)例分析,針對(duì)這個(gè)問(wèn)題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問(wèn)題的小伙伴找到更簡(jiǎn)單易行的方法。
SELECT * FROM dept_sal;
--創(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;
--創(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;
--創(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';
--創(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í)。
免責(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)容。