Tải bản đầy đủ (.docx) (30 trang)

Tìm hiểu về Trigger và thực nghiệm tạo các Trigger đảm bảo toàn vẹn cho dữ liệu trong Oracle

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (815.57 KB, 30 trang )

BAN CƠ YẾU CHÍNH PHỦ
HỌC VIỆN KỸ THUẬT MẬT MÃ
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯

AN TOÀN CƠ SỞ DỮ LIỆU
Đề tài
Tìm hiểu về Trigger và thực nghiệm tạo các Trigger đảm bảo toàn vẹn cho
dữ liệu trong Oracle
Chuyên ngành: An toàn thông tin
Sinh viên thực hiện:
- Trần V P - Lê Tuấn K - AT12
- Trần T - AT12
- Đinh H Đ – AT12
- Vương Đ B – AT12
Cán bộ hướng dẫn :
Khoa An toàn thông tin – Học viện Kỹ thuật mật mã

Hà Nội, 12/2017
MỤC LỤC
Danh mục hình vẽ.................................................................................................III
1


Lời nói đầu...............................................................................................................1
Chương I: Tìm hiểu về Trigger..............................................................................2
1.1. Khái niệm Trigger...........................................................................................2
1.2. Mục đích khi sử dụng trigger.........................................................................3
Chương II: Các ràng buộc Trigger đảm bảo toàn vẹn cho dữ liệu trong Oracle
...................................................................................................................................4
1.1. Các ràng buộc toàn vẹn dữ liệu với các Trigger.............................................4
1.2. Các dạng ràng buộc toàn vẹn dữ liệu nên dùng Trigger.................................4


1.3. Khi nào thì sử dụng Trigger............................................................................5
1.3.1. Các trường hợp sử dụng Trigger :............................................................5
1.3.2. Giải quyết vấn đề :...................................................................................5
1.4. Các đặc trưng và hạn chế................................................................................6
1.5. Các biến cố trigger..........................................................................................6
1.6. Cơ chế hoạt động của trigger..........................................................................7
2.1. Cú pháp Create Trigger...................................................................................8
2.1.1. Befoe insert trigger...................................................................................9
2.1.2. After insert trigger..................................................................................10
2.1.3. Befoe update trigger...............................................................................11
2.1.4. After update trigger................................................................................13
3.1.5. Befoe delete trigger................................................................................14
3.1.6. After delete trigger.................................................................................15
2.2. Cú pháp Drop a Trigger................................................................................16
2.3. Cú pháp Disable/ Enable Trigger..................................................................16
2.3.1. Disable a Trigger....................................................................................16
2.3.2. Disable all Trigger on a table.................................................................16
2.3.3. Enable a Trigger.....................................................................................17
2.3.4. Enable all Trigger on a table..................................................................17
Chương III: DEMO..............................................................................................18
Kết luận..................................................................................................................26
Tài liệu tham khảo................................................................................................27
Danh mục hình vẽ

2


Hình II-1: Cú pháp BEFOE INSERT Trigger.................................................................................9
Hình II-2: Cú pháp AFTER INSERT Trigger...............................................................................10
Hình II-3: Cú pháp BEFOE UPDATE Trigger..............................................................................11

Hình II-4: Cú pháp AFTER UPDATE Trigger..............................................................................13
Hình II-5: Cú pháp BEFOE DELETE Trigger..............................................................................14
Hình II-6: Cú pháp AFTER DELETE Trigger..............................................................................15
Hình II-7: Cú pháp Drop a Trigger...............................................................................................16
Hình II-8: Cú pháp Disable a Trigger...........................................................................................16
Hình II-9: Cú pháp Disable all Trigger on a table.........................................................................16
Hình II-10: Cú pháp Enable a Trigger...........................................................................................17
Hình II-11: Cú pháp Enable all Trigger on a table........................................................................17

3


Lời nói đầu
Trong vài năm qua chúng ta đã thấy sự gia tăng của các cuộc tấn công liên quan
đến cơ sở dữ liệu do các thao tác không đáng có của lập trình viên code ứng dụng.
Những dự án lớn thì DBA sẽ cung cấp nhưng procedure, function cho lập trình
viên, kèm theo đó là dữ liệu đầu vào và dữ liệu đầu ra. Như vậy lập trình viên sẽ
không quan tâm đến nội dung bên câu SQL có gì, họ chỉ cần biết input và output.
Để hạn chế và bảo vệ tính toàn vẹn cơ sở dữ liệu thì hầu hết các hệ quản trị đều sử
dụng và Orcale cũng không ngoại lệ ,đó chính là Trigger.Nhóm chúng em đã tìm
hiểu và nghiên cứu qua các chương sau:
Chương I: Khái niệm về Trigger
Chương II: Chương II: Các ràng buộc Trigger đảm bảo toàn vẹn cho dữ liệu
trong Oracle
Chương III: Các cú pháp làm việc về trigger
Chúng em xin chân thành cảm ơn cô Nguyễn Thị Lượng đã tận tình hướng
dẫn và đưa ra những nhận xét giúp báo cáo của nhóm được hoàn thiện hơn.

4



Chương I: Tìm hiểu về Trigger
1.1. Khái niệm Trigger
Trigger là một loại thủ tục đặc biệt được thực thi một cách tự động khi có
một sự kiện thay đổi dữ liệu xảy ra như Update, Insert hay Delete. Trigger được
dùng để đảm bảo ràng buộc dữ liệu, tính nhất quán, hoặc thực hiện các quy tắc dữ
liệu phức tạp.
Trigger là đối tượng đặc biệt được tạo trên một bảng và là một phần của cơ
sở dữ liệu. Trigger có thể truy vấn tới các bảng khác và có thể bao gồm các câu
lệnh SQL phức tạp. Chúng ta có thể tạo trigger cho mỗi hành động trên bảng hoặc
có thể kết hợp 2 hoặc 3 hành động trong một trigger.
Trigger được DBA xây dựng. Một cơ sở dữ liệu có một tập hợp các trigger
được gọi là cơ sở dữ liệu hoạt động. Một trigger gồm 3 phần:
 Sự kiện: Những thay đổi ảnh hưởng tới cơ sở dữ liệu khi trigger hoạt động.
 Điều kiện: Một truy vấn hoặc một kiểm tra được thực hiện khi trigger hoạt động.


Hoạt động: Một thủ tục được thực hiện khi trigger hoạt động và các điều
kiện của nó là đúng.
Một trigger có thể được nghĩ như là một 'daemon' điều khiển một cơ sở dữ liệu,
và thực hiện khi cơ sở dữ liệu có sự thay đổi ứng với sự kiện đã xác định.
Một điều kiện của một trigger có thể trả về giá trị True/False (ví dụ, tất cả các
nhân viên có lương ít hơn $100,000) hoặc một truy vấn. Một truy vấn hiểu
là true nếu tập kết quả không rỗng, và false nếu truy vấn không có kết quả trả về.
Nếu phần điều kiện có giá trị true, những hành động của trigger được thực hiện.
Một hoạt động có thể kiểm tra kết quả của truy vấn trong một phần điều kiện
của trigger, tham chiếu tới các giá trị cũ và mới của những bộ giá trị thay đổi sau
khi thực hiện trigger, thực hiện các truy vấn mới và làm những thay đổi đối với cơ
sở dữ liệu. Thực tế, một action có thể thực hiện một chuỗi các câu lệnh định nghĩa
dữ liệu (ví dụ, tạo bảng mới, thay đổi quyền của người dùng) và các lệnh hướnggiao dịch, hoặc gọi các thủ tục khác.

Tuy nhiên khác với thủ tục nội tại, trigger hoàn toàn không có tham số.
Ngoài ra chúng ta có thể gọi thực hiện trực tiếp trigger bằng lệnh EXECUTE như
5


thủ tục nội tại hoặc bằng bất kỳ một lệnh nào khác, thay vào đó trigger sẽ được
thực hiện một cách tự động khi dữ liệu của bảng có liên quan đến trigger bị cập
nhật. Chính nhờ vào tính năng đặc biệt là tự động thực hiện mà nội dung các lệnh
bên trong trigger được dùng cho các công việc sau :
• Kiểm tra các ràng buộc toàn vẹn dữ liệu phức tạp.
• Thực hiện các xử lý được thiết kế thi hành tại server (trong mô hình client/server).
Các xử lý mà ta muốn chúng sẽ được tự động thực hiện khi có thao tác INSERT,
UPDATE hoặc DELETE xảy ra.
• Trigger cũng được dùng để thay thế các constraint trong trường hợp ta muốn việc
kiểm tra ràng buộc dữ liệu kèm theo các câu thông báo thích hợp theo ý muốn
người dùng.
1.2. Mục đích khi sử dụng trigger
Mục đích của trigger là đảm bảo sự nhất quán của cơ sở dữ liệu, và với mục
đích này, chúng ta nên xem xét đến việc sử dụng các ràng buộc tham chiếu (ví dụ,
ràng buộc khoá ngoại). Ràng buộc không tự động kích hoạt như trigger nên các
ràng buộc dễ để hiểu và cũng cung cấp cho DBMS nhiều cơ hội để tối ưu hoá việc
thực hiện. Ràng buộc cũng tránh cho dữ liệu trở nên thiếu nhất quán với bất kỳ loại
câu lệnh nào, ngược lại trigger chỉ kích hoạt ứng với một loại câu lệnh xác định (ví
dụ, câu lệnh Insert hoặc Delete). Một lần nữa, ta thấy giới hạn này làm cho ràng
buộc dễ hiểu hơn.
Mặt khác, trigger cho phép chúng ta thực hiện các ràng buộc cơ sở dữ liệu
bằng nhiều cách phức tạp.
• Tự động tạo các giá trị cột dẫn xuất
• Ngăn chặn các giao dịch không hợp lệ
• Thực thi ủy quyền bảo mật phức tạp

• Thực thi tính toàn vẹn tham chiếu trên các nút trong cơ sở dữ liệu phân tán
• Thực thi các quy tắc kinh doanh phức tạp
• Cung cấp đăng nhập sự kiện minh bạch
• Cung cấp kiểm toán tinh vi
• Duy trì sao chép bảng đồng bộ
• Thu thập số liệu thống kê về truy cập bảng
6


Chương II: Các ràng buộc Trigger đảm bảo toàn vẹn cho dữ liệu trong Oracle
1.1. Các ràng buộc toàn vẹn dữ liệu với các Trigger
Có 3 thao tác cơ bản làm thay đổi dữ liệu trên các bảng của cơ sở dữ liệu đó là
thao tác thêm (insert), thao tác sửa (update) và thao tác xóa (delete). Như vậy để đảm
bảo dữ liệu nhất quán và đúng đắn, ta cần kiểm tra việc thực hiện của 3 thao tác này.
Có 2 cách kiểm tra : kiểm tra mức giao diện và kiểm tra mức cơ sở dữ liệu.
• Kiểm tra mức giao diện : công việc này chính là công việc lập trình trên các màn
hình giao diện.
• Kiểm tra mức cơ sở dữ liệu : công việc này được thực hiện bởi các đối tượng
constraint hoặc trigger.
Đối với các ràng buộc toàn vẹn dữ liệu đơn giản như kiểm tra các ràng buộc
miền giá trị, kiểm tra các ràng buộc giữa các thuộc tính trên cùng một bảng dữ
liệu,… ta nên sử dụng đối tượng constraint.
Đối với các ràng buộc toàn xẹn dữ liệu phức tạp khác – là những quy tắc
được định nghĩa dùng để kiểm tra tính toàn vẹn của dữ liệu trên nhiều cột hoặc
nhiều dòng của các bảng khác nhau. Khi đó bắt buộc chúng ta phải sử dụng đối
tượng trigger, đối tượng này cho phép chúng ta xây dựng các câu lệnh bên trong nó
với mục tiêu là các câu lệnh này sẽ được thực hiện khi các thao tác làm thay đổi dữ
liệu xảy ra trên bảng dữ liệu mà nó gắn.
Một trigger gắn với duy nhất một đối tượng table hoặc một đối tượng view.
1.2. Các dạng ràng buộc toàn vẹn dữ liệu nên dùng Trigger

Trên SQL Server, có 2 cách thực hiện ràng buộc toàn vẹn dữ liệu :
• Ràng buộc toàn vẹn dữ liệu bằng phương pháp mô tả (declarative data
integrity).
Thực hiện ràng buộc dữ liệu theo phương pháp này chính là các công việc
xác định ràng buộc khóa chính, khóa ngoại, kiểm tra miền giá trị, … và mô tả
chúng tại thời điểm tạo table.
Đặc điểm cần biết của phương pháp này là việc kiểm tra sẽ được thực hiện
trước khi cho phép ghi vào table.
7


• Ràng buộc toàn vẹn dữ liệu bằng phương pháp theo thủ tục (procedural
data integrity).
Trong phương pháp này, việc ràng buộc toàn vẹn dữ liệu được xác định bởi
tập hợp các câu lệnh T-SQL. Các câu lệnh chứa bên trong đối tượng Trigger, chúng
sẽ được gọi thi hành khi có thao tác thêm, xóa, hoặc sửa dữ liệu xảy ra trên table
tương ứng.
Đặc điểm cần biết của phương pháp này là việc kiểm tra sẽ được thực hiện
sau khi dữ liệu được ghi vào table.
1.3. Khi nào thì sử dụng Trigger
1.3.1. Các trường hợp sử dụng Trigger :
• Quan điểm cơ bản cần nghĩ đến trước tiên là chỉ những ràng buộc dữ liệu nào
không thể dùng phương pháp mô tả (declarative data integrity) thì mới dùng
trigger để giải quyết. Tuy nhiên, bạn không nhất thiết phải tuân thủ theo quan điểm
này trên thực tế bạn hoàn toàn có thể dùng trigger để thay thế cho constraint trong
trường hợp bạn muốn tự mình kiểm soát và cho ra các câu thông báo thích hợp
người dùng.
• Khi có sự thay đổi dữ liệu trên 1 table và chúng ta muốn dữ liệu trên 1 hay nhiều
table khác cũng tự động thay đổi theo cho phù hợp.
1.3.2. Giải quyết vấn đề :

Với các yêu cầu ràng buộc dữ liệu này, ta cần phải dùng trigger để thực hiện.
• Trên thực tế đô khi người lập trình muốn thay đổi cấu trúc lưu trữ của dữ liệu với
mục tiêu tăng tốc độ xử lý hoặc việc xử lý tính toán dễ dàng hơn, điều này thường
dẫn đến việc phá vỡ tính chuẩn của cơ sở dữ liệu và làm tăng thêm ràng buộc toàn
vẹn dữ liệu.
• Nếu bạn muốn cơ sở dữ liệu có những thông báo lỗi thích hợp theo ý muốn khi
thao tác thay đổi dữ liệu vi phạm ràng buộc toàn vẹn, bạn nên dùng trigger.
• Tất cả các xử lý mà bạn muốn chúng tự động thực hiện tại phía server khi có thao
tác dữ liệu INSERT, UPDATE hoặc DELETE xảy ra.
• Trigger không thể được tạo trên 1 table tạm (temporary table, là table được tạo với
tên table có ký tự # hoặc ## phía trước) hoặc table hệ thống (system table).
8


Tuy nhiên cần chú ý rằng các câu lệnh bên trong trigger hoàn toàn có thể tham
chiếu đến nội dung bên trong các table tạm và table hệ thống.
1.4. Các đặc trưng và hạn chế
• Từ một trigger có thể xây dựng bên trong nó các câu lệnh tác động lên cột của
table bất kỳ trong cơ sở dữ liệu hoặc tớti các đối tượng bên ngoài cơ sở dữ liệu
hiện hành.
• Có thể áp dụng trigger cho đối tượng View.
• Một trigger có thể thực hiện nhiều hành động (multiple actions), và nó có thể được
kích hoạt bởi nhiều hơn 1 biến cố (các biến cố gồm : insert, delete, update).
• Trigger không thể được tạo trên 1 table tạm (temporary table, là table được tạo với
tên table có ký tự # hoặc ## phía trước) hoặc table hệ thống (system table). Tuy
nhiên cần chú ý rằng các câu lệnh bên trong trigger hoàn toàn có thể tham chiếu
đến nội dung bên trong các table tạm và table hệ thống.
• Một hạn chế quan trọng mà bạn cần quan tâm là các trigger loại INSTEAD OF
DELETE và INSTEAD OF UPDATE không thể được định nghĩa trên các table có
chứa khóa ngoại và trên dây quan hệ nối từ table chứa nó thông qua khóa ngoại

đến table khác đã có thiết đặt tương ứng trên các dây quan hệ tính chất Cascade
Delete Related Records và Cascade Update Related Fieds.
Trong mối quan hệ ở hình trên, nếu ta thiết đặt tính Cascade Delete Related
Records của dây quan hệ thì việc tạo trigger loại Instead Of Delete sẽ không thể
thực hiện thành công.
1.5. Các biến cố trigger
Có 3 biến cố tự kích họat một trigger : INSERT, UPDATE và DELETE. Các
biến cố xảy ra trên đối tượng table hoặc view tại thời điểm các thao tác dữ liệu tương
ứng tác động lên các đối tượng này. Ta không thể gọi thi hành trực tiếp 1 trigger.
Tồn tại các trường hợp chắc chắn là khi một sự kiện sửa hoặc xóa dữ liệu
xảy ra nhưng không kích hoạt trigger, đó là các trường hợp sau :
• Khi sử dụng câu lệnh TRUNCATE TABLE sẽ không làm kích hoạt trigger được
định nghĩa cho biến cố DELETE. Một điều quan trọng cần quan tâm đối với các
trigger là nếu giao tác (transaction) không thành công sẽ tự động quan lui (rolled
9


back). Bởi vì câu lệnh TRUNCATE TABLE không là một biến cố được ghi nhận
vào sổ ghi nhận biến cố, nó không thể được quay lui vì vậy nó không kích hoạt
trigger DELETE.
• Câu lệnh WRITETEXT cũng không là nguyên nhân gây kích hoạt trigger INSERT
hoặc UPDATE.
1.6. Cơ chế hoạt động của trigger
Khi thực hiện việc thêm mới một mẫu tin vào một table, thao tác này sẽ kích
hoạt một trigger, trigger lưu trữ dữ liệu của mẫu tin vừa thêm mới vào một table có
tên là Inserted. Tương tự khi thực hiện việc xóa mẫu tin của một table, thao tác này
sẽ kích hoạt một trigger, trigger lưu trữ dữ liệu của mẫu tin vừa xóa vào
một table có tên là Deleted.
Cấu trúc của hai bảng này hòan tòan giống với cấu trúc của bảng dữ liệu liên
quan đến trigger khi tạo ra. Thật ra hai bảng này chỉ tồn tại trong bộ nhớ của máy

tính (RAM) được xem như là hai bảng luận lý mà chúng ta có thể sử dụng trong
các xử lý của trigger. Chúng ta không thể tham chiếu trực tiếp trong tiện ích SQL
Query Analyzer hoặc bên trong các thủ tục nội tại.
Chúng ta đã đề cập đến cơ chế hoạt động của trigger liên quan đến 2 thao
tác thêm và xóa dữ liệu. Còn thao tác sửa đổi dữ liệu (Update) trong Microsoft
SQL Server được xem như là sự phối hợp của hai lệnh DELETE và INSERT (xóa
bỏ dữ liệu cũ và thêm vào dữ liệu mới sau khi sửa đổi) do thế mà đối với các
trigger liên quan đến việc sửa đổi dữ liệu thì chúng ta có thể tham chiếu đến cả hai
bảng trung gian Inserted và Deleted.
Trong đó bảng Deleted sẽ chứa đựng thông tin của các dòng dữ liệu đã bị
hủy bỏ, các dòng dữ liệu cũ trước khi sửa đổi, bảng Inserted sẽ chứa đựng thông
tin của các dòng dữ liệu mới vừa thêm vào, các dòng dữ liệu sau khi sửa đổi. Một
khái niệm quan trọng liên quan đến cơ chế hoạt động của trigger mà chúng tôi
muốn đề cập ở phần này, đây là khái niệm liên quan đến phần bổ sung mới của
phiên bản SQL Server 2000, khái niệm INSTEAD OF và AFTER.
• Trigger loại INSTEAD OF sẽ bỏ qua hành động kích hoạt trigger (các thao tác
insert, delete, update), thay vào đó nó sẽ thực hiện các câu lệnh bên trong trigger.
10


Cần lưu ý là nó sẽ bỏ qua hành động tác động đến cơ sở dữ liệu nhưng việc lưu trữ
dữ liệu vào các bảng Inserted (đối với thao tác insert), deleted (đối với thao tác
delete) vẫn được thực hiện.
Một câu lệnh update tác động đến một table chứa trigger loại INSTEAD OF,
các câu lệnh T-SQL bên trong trigger sẽ được thi hành, nó đóng vai trò thay thế
câu lệnh Update. Đặc tính này cho phép bạn chỉ định các câu lệnh xử lý phức tạp
trong trigger nhằm làm tăng thêm lệnh thay đổi dữ liệu trên table.
• Trigger loại INSTEAD OF có thể định nghĩa trên đối tượng table hoặc view.
• Trigger loại AFTER là loại mặc định (cũng chính là loại có từ khóa khai báo
FOR), nó có vai trò như là phần bổ sung của hành động kích hoạt trigger. Các câu

lệnh bên trong trigger loại này chỉ được thi hành sau khi hành động kích hoạt đã
được thực hiện rồi. Cần chú ý là các ràng buộc toàn vẹn loại mô tả sẽ được thực
hiện trước, kế đó các câu lệnh bên trong trigger sẽ được thực hiện sau. Trigger loại
AFTER chỉ được phép định nghĩa trên duy nhất đối tượng table (không thể định
nghĩa trên view).
Trên một table, nếu muốn bạn có thể định nghĩa cả hai loại trigger. Nếu bạn
định nghĩa cả hai loại trigger và các constraint cho một table, thứ tự thi hành sẽ là
trigger INSTEAD OF, các constraint được xử lý và sau cùng là trigger AFTER.
Nếu các constraint bị vi phạm (có nghĩa là việc kiểm tra ràng buộc toàn vẹn của
các constraint phát hiện có vi phạm tính toàn vẹn dữ liệu), các hành động của
trigger INSTEAD OF sẽ được quay lui, trigger AFTER không thi hành nếu các
constraint bị vi phạm hoặc nếu có một số biến cố khác làm cho việc sửa đổi dữ liệu
trên table bị lỗi.
Giống như các thủ tục nội tại, trigger có thể được lồng đến 32 cấp và có thể
được kích hoạt đệ quy.
2.1. Cú pháp Create Trigger
BEFORE
Chỉ định BEFORE để khiến cơ sở dữ liệu kích hoạt Trigger trước khi thực
hiện sự kiện Trigger. Đối với Trigger hàng, Trigger được kích hoạt trước khi mỗi
hàng bị ảnh hưởng được thay đổi.
11


Các hạn chế đối với BEFORE Trigger phải tuân theo các hạn chế sau:


Không thể chỉ định một BEFORE Trigger trên một khung nhìn hoặc một
khung nhìn đối tượng.




Có thể viết vào giá trị NEW nhưng không ghi vào giá trị OLD.
AFTER
Chỉ định AFTER để khiến cơ sở dữ liệu kích hoạt Trigger sau khi thực hiện
sự kiện Triger. Đối với Trigger hàng, Trigger được kích hoạt sau khi mỗi hàng bị
ảnh hưởng được thay đổi.
Các hạn chế đối với AFTER Trigger phải tuân theo các hạn chế sau:



Không thể chỉ định một AFTER Trigger trên một khung nhìn hoặc một
khung nhìn đối tượng.



Không thể viết giá trị OLD hoặc NEW.
2.1.1. BEFOE INSERT Trigger

Hình II-1: Cú pháp BEFOE INSERT Trigger
BEFOE INSERT Trigger có nghĩa rằng Oracle sẽ chạy Trigger trước khi
INSERT được thực thi.
OR REPLACE

12


Không bắt buộc. Nếu được chỉ định, cho phép tạo lại Trigger đã tồn tại để có
thể thay đổi định nghĩa Trigger mà không cần đưa ra câu lệnh DROP Trigger.
Trigger_name
Tên trigger được tạo.

BEFORE INSERT
Chỉ ra rằng Trigger sẽ kích hoạt trước khi hoạt động INSERT được thực thi.
Table_name
Tên của bảng mà Trigger được tạo ra.
[ FOR EACH ROW]
Được áp dụng cho mỗi hàng.
DECLARE
Khai báo biến.
BEGIN
Câu lệnh Trigger.
EXCEPTION
Xử lý ngoại lệ.
2.1.2. AFTER INSERT Trigger

Hình II-2: Cú pháp AFTER INSERT Trigger

13


AFTER INSERT Trigger có nghĩa rằng Oracle sẽ chạy Trigger sau khi INSERT
được thực thi.
OR REPLACE
Không bắt buộc. Nếu được chỉ định, cho phép tạo lại Trigger đã tồn tại để có
thể thay đổi định nghĩa Trigger mà không cần đưa ra câu lệnh DROP Trigger.
Trigger_name
Tên trigger được tạo.
BEFORE INSERT
Chỉ ra rằng Trigger sẽ kích hoạt trước khi hoạt động INSERT được thực thi.
Table_name
Tên của bảng mà Trigger được tạo ra.

[ FOR EACH ROW]
Được áp dụng cho mỗi hàng.
DECLARE
Khai báo biến.
BEGIN
Câu lệnh Trigger.
EXCEPTION
Xử lý ngoại lệ.

14


2.1.3. BEFOE UPDATE Trigger

Hình II-3: Cú pháp BEFOE UPDATE Trigger
BEFOE UPDATE Trigger có nghĩa rằng Oracle sẽ chạy Trigger trước khi
UPDATE được thực thi.
OR REPLACE
Không bắt buộc. Nếu được chỉ định, cho phép tạo lại Trigger đã tồn tại để có
thể thay đổi định nghĩa Trigger mà không cần đưa ra câu lệnh DROP Trigger.
Trigger_name
Tên trigger được tạo.
BEFORE INSERT
Chỉ ra rằng Trigger sẽ kích hoạt trước khi hoạt động INSERT được thực thi.
Table_name
Tên của bảng mà Trigger được tạo ra.
[ FOR EACH ROW]
Được áp dụng cho mỗi hàng.
DECLARE
Khai báo biến.

BEGIN
Câu lệnh Trigger.
15


EXCEPTION
Xử lý ngoại lệ.
2.1.4. AFTER UPDATE Trigger

Hình II-4: Cú pháp AFTER UPDATE Trigger
AFTER UPDATE Trigger có nghĩa rằng Oracle sẽ chạy Trigger sau khi
UPDATE được thực thi.
OR REPLACE
Không bắt buộc. Nếu được chỉ định, cho phép tạo lại Trigger đã tồn tại để có
thể thay đổi định nghĩa Trigger mà không cần đưa ra câu lệnh DROP Trigger.
Trigger_name
Tên trigger được tạo.
BEFORE INSERT
Chỉ ra rằng Trigger sẽ kích hoạt trước khi hoạt động INSERT được thực thi.
Table_name
Tên của bảng mà Trigger được tạo ra.
[ FOR EACH ROW]
Được áp dụng cho mỗi hàng.
DECLARE
Khai báo biến.
16


BEGIN
Câu lệnh Trigger.

EXCEPTION
Xử lý ngoại lệ.
3.1.5. BEFOE DELETE Trigger

Hình II-5: Cú pháp BEFOE DELETE Trigger
BEFOE DELETE Trigger có nghĩa rằng Oracle sẽ chạy Trigger trước khi
DELETE được thực thi.
OR REPLACE
Không bắt buộc. Nếu được chỉ định, cho phép tạo lại Trigger đã tồn tại để có
thể thay đổi định nghĩa Trigger mà không cần đưa ra câu lệnh DROP Trigger.
Trigger_name
Tên trigger được tạo.
BEFORE INSERT
Chỉ ra rằng Trigger sẽ kích hoạt trước khi hoạt động INSERT được thực thi.
Table_name
Tên của bảng mà Trigger được tạo ra.
[ FOR EACH ROW]
Được áp dụng cho mỗi hàng.
17


DECLARE
Khai báo biến.
BEGIN
Câu lệnh Trigger.
EXCEPTION
Xử lý ngoại lệ.
3.1.6. AFTER DELETE Trigger

Hình II-6: Cú pháp AFTER DELETE Trigger

AFTER DELETE Trigger có nghĩa rằng Oracle sẽ chạy Trigger sau khi
DELETE được thực thi.
OR REPLACE
Không bắt buộc. Nếu được chỉ định, cho phép tạo lại Trigger đã tồn tại để có
thể thay đổi định nghĩa Trigger mà không cần đưa ra câu lệnh DROP Trigger.
Trigger_name
Tên trigger được tạo.
BEFORE INSERT
Chỉ ra rằng Trigger sẽ kích hoạt trước khi hoạt động INSERT được thực thi.
Table_name
Tên của bảng mà Trigger được tạo ra.
18


[ FOR EACH ROW]
Được áp dụng cho mỗi hàng.
DECLARE
Khai báo biến.
BEGIN
Câu lệnh Trigger.
EXCEPTION
Xử lý ngoại lệ.
2.2. Cú pháp Drop a Trigger

Hình II-7: Cú pháp Drop a Trigger
Khi đã tạo một Trigger trong oracle để xóa Trigger đã tạo thì sử dụng câu
lệnh Drop Trigger.
Trigger_name
Tên trigger được tạo.
2.3. Cú pháp Disable/ Enable Trigger

2.3.1. Disable a Trigger

Hình II-8: Cú pháp Disable a Trigger
Khi đã tạo một Trigger trong oracle để vô hiệu hóa Trigger đã tạo thì sử dụng câu
lệnh Disable.
Trigger_name
Tên trigger bị vô hiệu hóa.
2.3.2. Disable all Trigger on a table

Hình II-9: Cú pháp Disable all Trigger on a table
Khi đã tạo Triggers trong oracle, bắt buộc phải vô hiệu hóa tất cả Trigger
trong một bảng thì sử dụng câu lệnh Disable all Trigger.
Table_name
19


Tên của bảng mà tất cả các Trigger bị vô hiệu hóa.
2.3.3. Enable a Trigger

Hình II-10: Cú pháp Enable a Trigger
Khi muốn bật lại Trigger đã bị vô hiệu hóa thì sử dụng câu lệnh Enable.
Trigger_name
Tên trigger được tắt vô hiệu hóa.
2.3.4. Enable all Trigger on a table

Hình II-11: Cú pháp Enable all Trigger on a table
Khi muốn bật lại tất cả Trigger đã bị vô hiệu hóa trong một bảng thì sử dụng
câu lệnh Enable all Trigger.
Table_name
Tên của bảng mà tất cả các Trigger được tắt vô hiệu hóa


20


Chương III: DEMO
-tạo bảng Order
create table orders
(
order_id number(5),
quantity number(4),
cost_per_item number(6,2),
total_cost number(8,2)
);
--affter delete
create or REPLACE trigger orders_after_delete
after delete on orders
for each row
declare
v_username varchar2(10);
begin
--tim ten nguoi xoa
select user into v_username
from dual;
--them ban ghi vao bang audit
insert into orders_audit
(
order_id,
quantity,
cost_per_item,
tatal_cost,

delete_date,
delete_by
)
21


values
(
:old.order_id,
:old.quantity,
:old.cost_per_item,
:old.total_cost,
sysdate,
v_username
);
end;

--affter insert
create or replace trigger orders_after_insert
after insert on orders
for each row
declare
v_username varchar2(10);
22


begin
--tim ten nguoi theem
select user into v_username
from dual;

--them ban ghi vao bang audit
insert into orders_audit
(
order_id,
quantity,
cost_per_item,
tatal_cost,
username
)
values
(
:new.order_id,
:new.quantity,
:new.cost_per_item,
:new.total_cost,
v_username
);
end;

23


--affter update
create or replace trigger orders_after_update
after update on orders
for each row
declare
v_username varchar2(10);
begin
--tim ten nguoi sua

select user into v_username
from dual;
--them ban ghi vao bang audit
insert into orders_audit
(
order_id,
quantity_before,
24


quantity_after,
username
)
values
(
:new.order_id,
:old.quantity,
:new.quantity,
v_username
);
end;

--before delete
create or replace trigger orders_before_delete
after delete on orders
for each row
declare
25



×