【正文】
? END。 ? 【例】把職工進(jìn)行修改的記錄全部寫(xiě)入審計(jì)表,以便于審計(jì)。 ? 審計(jì)表如下: ? AUDIT(name VARCHAR2(10), oldsal NUMBER, newsal NUMBER,time DATE)。 ? 創(chuàng)建觸發(fā)器如下: ? CREATE OR REPLACE TRIGGER trigger_up_sal ? AFTER UPDATE OF sal ON EMP ? FOR EACH ROW ? DECLARE ? count INT。 ? BEGIN ? SELECT count(*) INTO count //查詢(xún)審計(jì)表的記錄個(gè)數(shù)存入變量 Count ? FROM audit WHERE name :。 ? IF count =0 THEN //如果審計(jì)表為空 ,插入記錄 ? INSERT INTO audit ? VALUES(:, :, :, SYSDATE) ? ELSE //如果審計(jì)表不為空 ,更新記錄 ? UPDATE audit ? SET oldsal = :, newsal= :,time=SYSDATE ? WHERE name= : ? END IF。 ? END 2.建立 AFTER 行觸發(fā)器 建立 INSTEAD OF 觸發(fā)器 ? INSTEAD OF 觸發(fā)器(有的書(shū)叫“替代觸發(fā)器”)是在某一個(gè)語(yǔ)句( INSERT, UPDATE, DELETE)執(zhí)行之前激活觸發(fā)器,但是并不執(zhí)行其所定義的操作,而僅執(zhí)行觸發(fā)器本身??梢栽诒砗鸵晥D上定義。 ? 而 AFTER 觸發(fā)器是在某一個(gè)語(yǔ)句( INSERT,UPDATE, DELETE)執(zhí)行之后激活觸發(fā)器。而且只能在表上定義。 ? 【例】建立 INSTEAD OF 觸發(fā)器。對(duì)于 39。AD_PRES39。,和 39。AD_VP39。這 2個(gè)工種的工資不能超過(guò) 15000。 ? CREATE OR REPLACE TRIGGER restrict_salary ? BEFORE INSERT OR UPDATE OF salary ON employees ? FOR EACH ROW ? BEGIN ? IF NOT (: IN (39。AD_PRES39。, 39。AD_VP39。)) ? AND : 15000 ? THEN ? RAISE_APPLICATION_ERROR (20232,39。員工不能賺到這么多薪水 39。)。 ? END IF。 ? END。 本章小結(jié) ?本章介紹了兩個(gè)主要內(nèi)容:包和 PL/SQL觸發(fā)器。介紹了包頭和包體的創(chuàng)建方法,重點(diǎn)介紹了觸發(fā)器的組成及創(chuàng)建方法。其中觸發(fā)器分為語(yǔ)句觸發(fā)器、行觸發(fā)器、 BEFORE觸發(fā)器、 AFTER觸發(fā)器和 INSTEAD OF觸發(fā)器。 演講完畢,謝謝觀看!