十年網(wǎng)站開(kāi)發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專業(yè)推廣+無(wú)憂售后,網(wǎng)站問(wèn)題一站解決
ORACLE 觸發(fā)器語(yǔ)法有哪些以及實(shí)例分析,針對(duì)這個(gè)問(wèn)題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問(wèn)題的小伙伴找到更簡(jiǎn)單易行的方法。
創(chuàng)新互聯(lián)建站-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比聞喜網(wǎng)站開(kāi)發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式聞喜網(wǎng)站制作公司更省心,省錢(qián),快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋聞喜地區(qū)。費(fèi)用合理售后完善,十載實(shí)體公司更值得信賴。
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)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識(shí)。