Oracle 触发器的种类及应用(oracle触发器类型)
Oracle 是一种关系型数据库,它使用触发器作为有效的数据库应用程序。触发器是一种特殊的存储过程,可用于在特定事件发生时自动执行操作。Oracle 的触发器分为三种:表触发器、行触发器和数据库事件触发器。
表触发器是在表上运行,它对特定的表事件激发的操作。它可用于在提交之前或之后运行帐户的表中的操作。表触发器有四种:BEFORE INSERT、AFTER INSERT、BEFORE UPDATE 和 AFTER UPDATE。
BEFORE INSERT 触发器只在新行被提交到表之前执行。应用程序示例:
“`Oracle
CREATE OR REPLACE TRIGGER store_account_before_insert
BEFORE INSERT ON store_account
FOR EACH ROW
BEGIN
— Assign values to certain variables
:new.store_name := ‘store_name’;
:new.store_code := ‘store_code’;
END;
该触发器定义在 store_account表上,在提交新行之前,它会先将store_name 和 store_code 这两个变量赋值。
AFTER INSERT 触发器只在新行被提交到表之后执行。应用程序示例:
```OracleCREATE OR REPLACE TRIGGER store_account_after_insert
AFTER INSERT ON store_account FOR EACH ROW
BEGIN -- Insert the new store account record into the log table
INSERT INTO store_account_log VALUES (:new.store_id, :new.store_name); END;
该触发器定义在 store_account 表上,在提交新行之后,它会往 store_account_log 表中新增一条 store_id 和 store_name的记录。
BEFORE UPDATE 和 AFTER UPDATE 触发器类似于 BEFORE INSERT 和 AFTER INSERT 触发器,只是操作的是更新表而不是新增表。
行触发器就是定义在行上运行的触发器,它仅执行在某一行上更新或删除操作时执行,它有两种:BEFORE ROW 和 AFTER ROW。
应用程序示例:
“`Oracle
CREATE OR REPLACE TRIGGER store_account_before_row
BEFORE UPDATE OR DELETE ON store_account
FOR EACH ROW
BEGIN
— Insert the old store account record into the log table
INSERT INTO store_account_log VALUES (:old.store_id, :old.store_name);
END;
该触发器定义在 store_account 表上,在删除某一行之前,它会往 store_account_log 表中新增一条 store_id 和 store_name的记录。
数据库触发器是定义在数据库上运行的触发器,它可以在数据库重新启动或是数据库对象发生变化时被激发,常用于自动完成数据库维护工作。
应用程序示例:
```OracleCREATE OR REPLACE TRIGGER database_startup
AFTER STARTUP ON DATABASE BEGIN
-- Insert the start up time into the database INSERT INTO database_log VALUES (SYSDATE);
END;
该触发器定义在数据库上,当数据库重新启动时,它会往 database_log 表中新增该次启动的时间。
以上是 Oracle 触发器的三种类型。它们通过特定的表操作或数据库事件运行,可以帮助完成自动化和日常维护任务,以提升数据库处理效率。