Chương 15 DATABASE TRIGGER

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

- 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

Chương 15 DATABASE TRIGGER

Database trigger là nh ng th t c đữ ủ ụ ược th c hi n ng m đ nh ngay khi th c hi n l nh SQL nh ự ệ ầ ị ự ệ ệ ưINSERT, DELETE, UPDATE nh m đ m b o các quy t c logic ph c t p c a d li u. Thi t k các database triggerằ ả ả ắ ứ ạ ủ ữ ệ ế ế tho mãn các yêu c u sau: ả ầ

S d ng các database trigger nh m đ m b o th c hi n t t c các thao tác có liên ử ụ ằ ả ả ự ệ ấ ả quan t i l nh can thi p d li u đớ ệ ệ ữ ệ ược th c hi n. ự ệ

Ch s d ng database trigger đ i v i các thao tác tr ng tâm. ỉ ử ụ ố ớ ọ

Không s d ng database trigger đ th c hi n các ràng bu c s n có trong database ử ụ ể ự ệ ộ ẵ Oracle. Ví d : dùng database trigger đ thay th cho các constrain. ụ ể ế

S d ng database trigger có th gây r i, khó khăn cho vi c b o trì và phát tri n h ử ụ ể ố ệ ả ể ệ th ng l n. Vì th , ta ch s d ng database trigger khi th t c n thi t. ố ớ ế ỉ ử ụ ậ ầ ế

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

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 ư ữ

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

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

(106 trang)