Oracle觸發(fā)器是一種存儲過程,它會在特定的數(shù)據(jù)庫操作(如插入、更新、刪除)發(fā)生時自動執(zhí)行。觸發(fā)器可以用于實現(xiàn)數(shù)據(jù)完整性約束,自動更新相關(guān)數(shù)據(jù),記錄日志等功能。
下面是一個Oracle觸發(fā)器的用法實例:
創(chuàng)建一個表:
CREATE TABLE employee (
id NUMBER(10) PRIMARY KEY,
name VARCHAR2(100),
salary NUMBER(10, 2),
commission NUMBER(10, 2),
total_salary NUMBER(10, 2)
);
創(chuàng)建一個計算總工資的觸發(fā)器:
CREATE OR REPLACE TRIGGER calculate_total_salary
BEFORE INSERT OR UPDATE OF salary, commission ON employee
FOR EACH ROW
BEGIN
:NEW.total_salary := :NEW.salary + :NEW.commission;
END;
/
在該觸發(fā)器中,BEFORE關(guān)鍵字表示在觸發(fā)的操作之前執(zhí)行,INSERT和UPDATE關(guān)鍵字指定了觸發(fā)器在插入和更新操作時都會被觸發(fā)。OF關(guān)鍵字指定了觸發(fā)器關(guān)注的列是salary和commission。FOR EACH ROW關(guān)鍵字表示對每一行數(shù)據(jù)都會執(zhí)行觸發(fā)器中的代碼。
觸發(fā)器的代碼塊使用PL/SQL語言編寫,其中的:NEW是一個特殊的關(guān)鍵字,表示將要被插入或更新的行。
現(xiàn)在,當(dāng)向employee表中插入或更新數(shù)據(jù)時,觸發(fā)器將自動計算總工資并將結(jié)果存儲在total_salary列中:
INSERT INTO employee (id, name, salary, commission) VALUES (1, 'John Doe', 1000, 200);
UPDATE employee SET salary = 1500 WHERE id = 1;
可以通過查詢表來驗證觸發(fā)器的效果:
SELECT * FROM employee;
ID NAME SALARY COMMISSION TOTAL_SALARY
-- -------- ------ ---------- ------------
1 John Doe 1500 200 1700
從上面的例子中可以看出,觸發(fā)器可以在數(shù)據(jù)操作之前或之后執(zhí)行代碼,并且可以訪問和修改將要被操作的數(shù)據(jù)。這使得觸發(fā)器成為一種強大的工具,可以用于實現(xiàn)復(fù)雜的業(yè)務(wù)邏輯。