Khi học bất kì một hệ quản trị CSDL nào bạn cũng phải tìm hiểu qua trigger, bởi đây là tính năng giúp bạn bảo vệ tính toàn vẹn dữ liệu, DBA sẽ kiểm soát được những thao tác từ lập trình viên code ứng dụng. Oracle cũng là một hệ QT CSDL nên không ngoại lệ.
Với 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.
Mục lục
- 1. Trigger trong Oracle là gì?
- 2. After Trigger trong Oracle
- 3. Before Trigger trong Oracle
- 4. Disable trigger cho table
- 5. Delete Trigger
- 6. Enable trigger
- 7. Lời kết
1. Trigger trong Oracle là gì?
Dịch ra tiếng Anh thì Trigger có nghĩa là cò súng, ý muốn nói rằng nó sẽ được kích hoạt khi có một thao tác nào đó lên cò súng này.
Trong hệ quản trị CSDL thì chúng ta có ba thao tác làm thay đổi dữ liệu chính đó là: UPDATE, INSERT và DELETE. Và đôi lúc bạn muốn thực hiện một hành động gì đó trước khi hoặc sau khi 3 lệnh đó xảy ra, và cái này ta gọi là trigger.
Như vậy chúng ta có 6 câu lệnh để tạo trigger chính, hay nói cách khác là 6 hành động và gom thành hai nhóm.
Nhóm before:
- BEFORE INSERT TRIGGER
- BEFORE UPDATE TRIGGER
- BEFORE DELETE TRIGGER
Nhóm after:
- AFTER INSERT TRIGGER
- AFTER UPDATE TRIGGER
- AFTER DELETE TRIGGER
Lưu ý:
- Bạn không thể tạo Before Trigger cho View
- Bạn không thể cập nhật dữ liệu cũ, chỉ co thể cập nhật dữ liệu mới.
Trước khi tìm hiểu trigger mình muốn tạo một bảng để thực hành như sau:
1 2 3 4 5 6 | CREATE TABLE orders ( order_id number(5), quantity number(4), cost_per_item number(6,2), total_cost number(8,2) ); |
Bảng này sẽ được dùng xuyên suốt bài học này.
2. After Trigger trong Oracle
After trigger là những trigger sẽ được thực thi sau khi hành động chính hoàn thành.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | CREATE [ OR REPLACE ] TRIGGER trigger_name AFTER INSERT OR UPDATE OR DELETE ON table_name [ FOR EACH ROW ] DECLARE -- variable declarations BEGIN -- trigger code EXCEPTION WHEN ... -- exception handling END ; |
Sau đây là một vài ví dụ về trigger trong Oracle.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | CREATE OR REPLACE TRIGGER orders_after_delete AFTER DELETE ON orders FOR EACH ROW DECLARE v_username varchar2(10); BEGIN -- Find username of person performing the DELETE on the table SELECT user INTO v_username FROM dual; -- Insert record into audit table INSERT INTO orders_audit ( order_id, quantity, cost_per_item, total_cost, delete_date, deleted_by) VALUES ( :old.order_id, :old.quantity, :old.cost_per_item, :old.total_cost, sysdate, v_username ); END ; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | CREATE OR REPLACE TRIGGER orders_after_insert AFTER INSERT ON orders FOR EACH ROW DECLARE v_username varchar2(10); BEGIN -- Find username of person performing the INSERT into the table SELECT user INTO v_username FROM dual; -- Insert record into audit table INSERT INTO orders_audit ( order_id, quantity, cost_per_item, total_cost, username ) VALUES ( :new.order_id, :new.quantity, :new.cost_per_item, :new.total_cost, v_username ); END ; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | CREATE OR REPLACE TRIGGER orders_after_update AFTER UPDATE ON orders FOR EACH ROW DECLARE v_username varchar2(10); BEGIN -- Find username of person performing UPDATE into table SELECT user INTO v_username FROM dual; -- Insert record into audit table INSERT INTO orders_audit ( order_id, quantity_before, quantity_after, username ) VALUES ( :new.order_id, :old.quantity, :new.quantity, v_username ); END ; |
3. Before Trigger trong Oracle
Before Trigger là những trigger sẽ thực thi trước hành động chính, nghĩa là xử lý nó xong thì hành động chính mới được thực hiện.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | CREATE [ OR REPLACE ] TRIGGER trigger_name BEFORE DELETE ON table_name [ FOR EACH ROW ] DECLARE -- variable declarations BEGIN -- trigger code EXCEPTION WHEN ... -- exception handling END ; |
Sau đây là một vài ví dụ:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | CREATE OR REPLACE TRIGGER orders_before_delete BEFORE DELETE ON orders FOR EACH ROW DECLARE v_username varchar2(10); BEGIN -- Find username of person performing the DELETE on the table SELECT user INTO v_username FROM dual; -- Insert record into audit table INSERT INTO orders_audit ( order_id, quantity, cost_per_item, total_cost, delete_date, deleted_by ) VALUES ( :old.order_id, :old.quantity, :old.cost_per_item, :old.total_cost, sysdate, v_username ); END ; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | CREATE [ OR REPLACE ] TRIGGER trigger_name BEFORE INSERT ON table_name [ FOR EACH ROW ] DECLARE -- variable declarations BEGIN -- trigger code EXCEPTION WHEN ... -- exception handling END ; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | CREATE OR REPLACE TRIGGER orders_before_update BEFORE UPDATE ON orders FOR EACH ROW DECLARE v_username varchar2(10); BEGIN -- Find username of person performing UPDATE on the table SELECT user INTO v_username FROM dual; -- Update updated_date field to current system date :new.updated_date := sysdate; -- Update updated_by field to the username of the person performing the UPDATE :new.updated_by := v_username; END ; |
4. Disable trigger cho table
Nếu bạn muốn tắt một trigger đang hoạt động ở một table nào đó thì dùng cú pháp sau:
1 | ALTER TRIGGER trigger_name DISABLE; |
Nếu bạn muốn tắt tất cả trigger đang hoạt động ở một table nào đó thì dùng cú pháp sau:
1 | ALTER TABLE table_name DISABLE ALL TRIGGERS; |
Trong đó table_name là tên table muốn xóa trigger.
5. Delete Trigger
Nếu bạn muốn xóa trigger vĩnh viễn thì sử dụng lệnh drop trigger.
1 | DROP TRIGGER trigger_name; |
6. Enable trigger
Nếu bạn muốn bật một trigger đã tắt cho table thì dùng cú pháp sau:
1 | ALTER TRIGGER trigger_name ENABLE; |
Nếu bạn muốn bật tất cả trigger đã tắt cho table thì dùng cú pháp sau:
1 | ALTER TABLE table_name ENABLE ALL TRIGGERS; |
7. Lời kết
Như vậy mình đã giới thiệu tất cả các chức năng mà Oracle hỗ trợ khi làm việc với trigger. Thực sự mà nói thì trigger đóng vai trò không thể thiếu, nó giúp cho DBA đảm bảo rằng dữ liệu luôn luôn được bảo toàn, tránh trường hợp không đồng nhất dữ liệu.
* KHOÁ HỌC ORACLE DATABASE A-Z ENTERPRISE trực tiếp từ tôi giúp bạn bước đầu trở thành những chuyên gia DBA, đủ kinh nghiệm đi thi chứng chỉ OA/OCP, đặc biệt là rất nhiều kinh nghiệm, bí kíp thực chiến trên các hệ thống Core tại VN chỉ sau 1 khoá học.
* CÁCH ĐĂNG KÝ: Gõ (.) hoặc để lại số điện thoại hoặc inbox https://m.me/tranvanbinh.vn hoặc Hotline/Zalo 090.29.12.888
* Chi tiết tham khảo:
https://bit.ly/oaz_w
=============================
KẾT NỐI VỚI CHUYÊN GIA TRẦN VĂN BÌNH:
📧 Mail: binhoracle@gmail.com
☎️ Mobile/Zalo: 0902912888
👨 Facebook: https://www.facebook.com/BinhOracleMaster
👨 Inbox Messenger: https://m.me/101036604657441 (profile)
👨 Fanpage: https://www.facebook.com/tranvanbinh.vn
👨 Inbox Fanpage: https://m.me/tranvanbinh.vn
👨👩 Group FB: https://www.facebook.com/groups/DBAVietNam
👨 Website: https://www.tranvanbinh.vn
👨 Blogger: https://tranvanbinhmaster.blogspot.com
🎬 Youtube: https://www.youtube.com/@binhguru
👨 Tiktok: https://www.tiktok.com/@binhguru
👨 Linkin: https://www.linkedin.com/in/binhoracle
👨 Twitter: https://twitter.com/binhguru
👨 Podcast: https://www.podbean.com/pu/pbblog-eskre-5f82d6
👨 Địa chỉ: Tòa nhà Sun Square - 21 Lê Đức Thọ - Phường Mỹ Đình 1 - Quận Nam Từ Liêm - TP.Hà Nội
=============================
oracle tutorial, học oracle database, Tự học Oracle, Tài liệu Oracle 12c tiếng Việt, Hướng dẫn sử dụng Oracle Database, Oracle SQL cơ bản, Oracle SQL là gì, Khóa học Oracle Hà Nội, Học chứng chỉ Oracle ở đầu, Khóa học Oracle online,sql tutorial, khóa học pl/sql tutorial, học dba, học dba ở việt nam, khóa học dba, khóa học dba sql, tài liệu học dba oracle, Khóa học Oracle online, học oracle sql, học oracle ở đâu tphcm, học oracle bắt đầu từ đâu, học oracle ở hà nội, oracle database tutorial, oracle database 12c, oracle database là gì, oracle database 11g, oracle download, oracle database 19c, oracle dba tutorial, oracle tunning, sql tunning , oracle 12c, oracle multitenant, Container Databases (CDB), Pluggable Databases (PDB), oracle cloud, oracle security, oracle fga, audit_trail,oracle RAC, ASM, oracle dataguard, oracle goldengate, mview, oracle exadata, oracle oca, oracle ocp, oracle ocm , oracle weblogic, postgresql tutorial, mysql tutorial, mariadb tutorial, ms sql server tutorial, nosql, mongodb tutorial, oci, cloud, middleware tutorial, hoc solaris tutorial, hoc linux tutorial, hoc aix tutorial, unix tutorial, securecrt, xshell, mobaxterm, putty