新聞中心
Oracle觸發(fā)器實例代碼:創(chuàng)建表employees,定義觸發(fā)器emp_salary_check,在插入或更新時檢查薪資是否合法。
Oracle觸發(fā)器實例代碼
在Oracle數(shù)據(jù)庫中,觸發(fā)器(Trigger)是一類特殊的存儲過程,它會在特定的數(shù)據(jù)庫操作發(fā)生時自動執(zhí)行,觸發(fā)器可以用來實現(xiàn)數(shù)據(jù)完整性約束、審計日志記錄、同步復制等功能,本文將通過一個實例來介紹如何創(chuàng)建和使用Oracle觸發(fā)器。
創(chuàng)建觸發(fā)器
我們創(chuàng)建一個名為employees的表,用于存儲員工信息:
CREATE TABLE employees ( id NUMBER PRIMARY KEY, name VARCHAR2(50), salary NUMBER, department_id NUMBER );
接下來,我們創(chuàng)建一個名為departments的表,用于存儲部門信息:
CREATE TABLE departments ( id NUMBER PRIMARY KEY, name VARCHAR2(50) );
現(xiàn)在,我們創(chuàng)建一個觸發(fā)器,當向employees表中插入新記錄時,自動檢查department_id字段是否在departments表中存在,如果不存在,則拋出異常并阻止插入操作。
CREATE OR REPLACE TRIGGER check_department_id
BEFORE INSERT ON employees
FOR EACH ROW
BEGIN
IF :new.department_id NOT IN (SELECT id FROM departments) THEN
RAISE_APPLICATION_ERROR(-20001, 'Invalid department_id');
END IF;
END;
/
使用觸發(fā)器
現(xiàn)在,我們嘗試向employees表中插入一條記錄:
INSERT INTO employees (id, name, salary, department_id) VALUES (1, '張三', 5000, 1);
由于department_id為1的部門不存在于departments表中,所以觸發(fā)器會拋出異常并阻止插入操作,我們可以通過查詢employees表來驗證這一點:
SELECT * FROM employees;
接下來,我們向departments表中插入一條記錄:
INSERT INTO departments (id, name) VALUES (1, '人事部');
現(xiàn)在,我們再次嘗試向employees表中插入記錄:
INSERT INTO employees (id, name, salary, department_id) VALUES (1, '張三', 5000, 1);
這次插入操作會成功,因為department_id為1的部門已經(jīng)存在于departments表中,我們可以再次查詢employees表來驗證這一點:
SELECT * FROM employees;
相關問題與解答
1、什么是Oracle觸發(fā)器?
答:Oracle觸發(fā)器是一類特殊的存儲過程,它會在特定的數(shù)據(jù)庫操作發(fā)生時自動執(zhí)行,觸發(fā)器可以用來實現(xiàn)數(shù)據(jù)完整性約束、審計日志記錄、同步復制等功能。
2、觸發(fā)器的執(zhí)行時機有哪些?
答:觸發(fā)器的執(zhí)行時機分為三類:BEFORE(之前)、AFTER(之后)和INSTEAD OF(替代),BEFORE觸發(fā)器在指定操作發(fā)生之前執(zhí)行;AFTER觸發(fā)器在指定操作發(fā)生之后執(zhí)行;INSTEAD OF觸發(fā)器用于視圖上,替代原始操作執(zhí)行。
3、觸發(fā)器的執(zhí)行頻率有哪些?
答:觸發(fā)器的執(zhí)行頻率分為兩類:FOR EACH ROW(行級)和FOR EACH STATEMENT(語句級),F(xiàn)OR EACH ROW觸發(fā)器針對每個受影響的行執(zhí)行一次;FOR EACH STATEMENT觸發(fā)器針對整個SQL語句執(zhí)行一次。
4、如何刪除觸發(fā)器?
答:可以使用以下語句刪除觸發(fā)器:
DROP TRIGGER trigger_name;
trigger_name是要刪除的觸發(fā)器的名稱。
網(wǎng)站欄目:Oracle觸發(fā)器實例代碼
網(wǎng)頁URL:http://m.fisionsoft.com.cn/article/cojiegh.html


咨詢
建站咨詢

