- Thay DEPTNO của câc nhđn viín năy bằng DEPTNO của Boston Thay lương mỗi nhđn viín bằng lương trung bình của bộ phậ n * 1.1 Thay commission c ủ a
15.1.TẠO TRIGGER
Khi tạo database trigger, ta cần lưu ý tới một số tiíu chí như:
Thời gian thực hiện: BEFORE, AFTER
Hănh động thực hiện: INSERT, UPDATE, DELETE
Đối tượng tâc động: bảng dữ liệu
Loại trigger thực hiện: trín dòng lệnh hay trín cđu lệnh Mệnh đề điều kiện thực hiện
Nội dung của trigger
15.1.1. Phđn loại trigger
Ta có thể phđn loại trigger theo thời gian thực hiện như: BEFORE vă AFTER.
BEFORE trigger: Trigger được kích hoạt trước khi thực hiện cđu lệnh. Việc năy có thể cho phĩp ta loại bớt câc phĩp xử lý không cần thiết, thậm chí có thể rollback dữ liệu trong trường hợp có thể gđy ra câc ngoại lệ (exception). Trigger thuộc loại năy
thường được sử dụng đối với câc thao tâc INSERT hoặc UPDATE.
AFTER trigger: Cđu lệnh được thực hiện xong thì trigger mới được kích hoạt. Thực hiện câc công việc thường phải lăm sau khi đê thực hiện cđu lệnh.
INSTEAD OF trigger: Loại trigger năy cho phĩp người sử dụng có thể thay đổi một câch trong suốt dữ liệu của một số view mă không thể thực hiện thay đổi trực tiếp được. Với INSTEAD OF trigger, ta có thể thực hiện với cả ba thao tâc: insert, update, delete.
Ta cũng có thể phđn loại trigger theo loại cđu lệnh kích hoạt như: INSERT, UPDATE, DELETE. Trong câc trigger thuộc một trong ba loại lệnh: INSERT, UPDATE,DELETE. Trigger UPDATE cần phải chỉ rõ thím tín cột dữ liệu kích hoạt trigger mỗi khi giâ trị dữ liệu trong đó bị thay đổi. Bín trong Trigger có thể có chứa câc lệnh thao tâc dữ liệu. Do đó, cần phải trânh trường hợp lặp lại theo kiểu đệ quy.
Một câch khâc ta cũng có thể phđn loại trigger theo số lần kích hoạt. theo đó sẽ có 02 loại trigger:
Trigger mức lệnh: Trigger được kích hoạt mỗi khi thực hiện cđu lệnh.
Trigger mức dòng lệnh: Trigger được kích nhiều lần ứng với mỗi dòng dữ liệu chịu ảnh hưởng bởi thao tâc thực hiện lính.
Oracle cơ bản - SQL vă PL/SQL
Hình vẽ 15. Thứ tự thực hiện trigger
15.1.2. Lệnh tạo trigger
Ta có thể tạo trigger thông qua lệnh script. Cú phâp lệnh tạo trigger mức cđu lệnh:
CREATE [OR REPLACE] TRIGGER trigger_name timing event1 [OR event2 OR event3] ON table_name
BEGIN
PL/SQL Block; END;
Cú phâp lệnh tạo trigger mức dòng dữ liệu:
CREATE [OR REPLACE] TRIGGER trigger_name timing event1 [OR event2 OR event3] ON table_name
[REFERENCING OLD AS old | NEW AS new] FOR EACH ROW
[WHEN condition] BEGIN
PL/SQL Block; END;
Với:
trigger _name Tín trigger
timing Thời gian kích hoạt trigger event Loại cđu lệnh kích hoạt trigger
referencing Tín biến thay thế cho giâ trị trước vă sau thay đổi của dòng dữ liệu đang xử lý FOR EACH ROW Trigger thuộc loại tâc động trín dòng dữ
liệu
WHEN Chỉ ra một số điều kiện răng buộc thực hiện trigger
table_name Tín bảng dữ liệu có gắn trigger trín đó PL/SQL Block Nội dung khối lệnh SQL vă PL/SQL trong
trigger
Oracle cơ bản - SQL vă PL/SQL
Ví dụ:
CREATE OR REPLACE TRIGER secure_emp BEFORE INSERT ON emp
BEGIN
IF TO_CHAR(sysdate,’DY’) IN (‘SAT’,’SUN’)
OR TO_CHAR(sysdate,’HH24’) NOT BETWEEN ‘08’ AND ’18’ THEN
RAISE_APPLICATION_ERROR (-20500,
’Thời gian lăm việc không phù hợp’); END IF;
END;
CREATE OR REPLACE TRIGER audit_emp_values AFTER DELETE OR INSERT OR DELETE ON emp FOR EACH ROW
BEGIN
INSERT INTO audit_emp_values (user_name, timestamp, id, old_last_name, new_last_name, old_title, new_tile, old_salary, new_salary)
VALUES (USER, SYSDATE, :old.empno, :old.ename,
:new.ename, :old.job, :new.job, :old.sal, :new.sal);
END;
15.1.3. Sử dụng Procedure builder để tạo trigger
Ta cũng có thể tạo database trigger thông qua công cụ Procedure builder của Oracle. Ta lần lượt thực hiện theo câc bước sau:
1. Kết nối tới database
2. Dịch chuyển tới đối tượng đặt trigger trong phần Object Navigator
3. Chuyển tới phần trigger rồi bấm nút New để tạo mới trigger.
4. Đặt câc tuỳ chọn về thời gian, kiểu,.. cho trigger
5. Soạn thảo nội dung của trigger
6. Lưu giữ trigger
Oracle cơ bản - SQL vă PL/SQL
Hình vẽ 16. Tạo trigger bằng công cụ Procedure Builder
Hình vẽ 17. Trigger tâc động trín dòng dữ liệu