Oracle 触发器学习笔记
什么是 Oracle 触发器
Oracle 触发器(Trigger)是一种数据库对象,它与表相关联,并在表上执行一些特定的操作,例如插入、更新或删除行时自动执行的存储过程。
触发器可用于满足与数据完整性、约束或业务逻辑相关的要求。例如,它们可以用于执行以下操作:
- 在将数据插入表之前对数据进行格式验证。
- 在对某个表执行删除操作时使用存档。
- 当某个人员被删除时,删除相关任职。
- 在新增订单时自动发送电子邮件。
创建触发器
使用 CREATE TRIGGER
语句可以在 Oracle 中创建触发器,语法如下:
CREATE [OR REPLACE] TRIGGER trigger_name
{BEFORE|AFTER} {INSERT|UPDATE|DELETE }
ON table_name
[REFERENCING {OLD|NEW} AS {old|new}]
[FOR EACH ROW]
[WHEN condition]
DECLARE
declaration statements
BEGIN
-- 触发器逻辑
EXCEPTION
exception handlers
END;
其中,trigger_name
是触发器的名称,{BEFORE|AFTER}
指定触发器在操作之前或之后触发, {INSERT|UPDATE|DELETE}
指定触发器与哪种操作相关联, table_name
是触发器应该与哪个表相关联。
示例 1
以下是一个示例,它将在 'employees'
表上创建一个触发器,每当删除行时,将消息插入到另一个表中。
CREATE OR REPLACE TRIGGER log_employee_delete
AFTER DELETE
ON employees
FOR EACH ROW
BEGIN
INSERT INTO employee_log (employee_id, action, action_date)
VALUES (:OLD.employee_id, 'DELETED', SYSDATE);
END;
在这个示例中,我们使用 CREATE OR REPLACE TRIGGER
创建了一个名为 log_employee_delete
的触发器。我们使用 AFTER DELETE
让触发器在删除操作后执行。我们在 'employees'
表中使用 FOR EACH ROW
意味着我们将在删除每行的操作后调用触发器。如果没有指定此选项,触发器将于每个操作后只调用一次。
当触发器被调用时,它将行数据记录到 employee_log
表中。
示例 2
以下是一个示例,它将在 'employees'
表上创建一个触发器,每当更新某行时,更新另一个表中相关行的部分字段。
CREATE OR REPLACE TRIGGER update_employee_job_history
AFTER UPDATE OF job_id, department_id
ON employees
FOR EACH ROW
BEGIN
UPDATE job_history
SET end_date = SYSDATE
WHERE employee_id = :OLD.employee_id
AND end_date IS NULL;
INSERT INTO job_history (employee_id, start_date, job_id, department_id)
VALUES (:OLD.employee_id, SYSDATE, :OLD.job_id, :OLD.department_id);
END;
在这个示例中,我们使用 CREATE OR REPLACE TRIGGER
创建了一个名为 update_employee_job_history
的触发器。我们使用 AFTER UPDATE OF job_id, department_id
让触发器在更新操作后只在更新了职位或部门时执行。使用 :OLD
引用旧的行数据,并用它来更新 job_history
表。然后,我们记录新的职位和部门信息到 job_history
表中。
总结
以上是 Oracle 触发器学习笔记的完整攻略。通过本文,您可以了解 Oracle 触发器的基础知识,以及如何创建并使用它们。我们还提供了两个示例来帮助您更好地理解触发器的作用。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:oracle 触发器 学习笔记 - Python技术站