15.1.TẠO TRIGGER

Một phần của tài liệu SQL và PL/SQL Cơ bản docx (Trang 100 - 103)

- 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

Một phần của tài liệu SQL và PL/SQL Cơ bản docx (Trang 100 - 103)

Tải bản đầy đủ (PDF)

(106 trang)