简单介绍Oracle中的触发器类型.(oracle触发器类型)
Oracle 中的触发器类型有四种,即联接类、语句类、行类和系统类触发器,其中每种触发器都有不同的应用场景和使用方法,下面将对它们进行简单介绍。
联接类触发器是基于双表连接的,它用以实现两个表之间互删互改。联接类触发器可用于保持数据之间约束关系,可以针对 DML 操作中的每一行或多行做出响应。它的定义方式是把参数添加到每个表中,而且只有当使用带有约束的表或JOIN子句时,它才会触发。下面是Oracle中定义联接类触发器的示例代码:
“`SQL
CREATE OR REPLACE TRIGGER trig_emp_dept
AFTER INSERT OR UPDATE ON emp
FOR EACH ROW
BEGIN
UPDATE dept
SET dept.dept_no = :NEW.dept_no
WHERE dept.emp_id = :NEW.emp_id;
END;
/
语句类触发器是以数据库对象的操作为触发事件的。语句类触发器的触发对象有 ALTER、COMMIT、DELETE、INSERT、ROLLBACK 和 UPDATE。语句类触发器有效地利用资源,它可以反映使用语句类触发器的表的所有活动,因此它的作用比联接类触发器更广泛。下面是Oracle中定义语句类触发器的示例代码:
```SQLCREATE OR REPLACE TRIGGER trig_update_log
BEFORE UPDATE OF name, address ON table_nameFOR EACH ROW
BEGIN INSERT INTO update_log (name, address, time)
VALUES (:OLD.name, :OLD.address, SYSDATE);END;
/
行类触发器是基于行操作的,它在 UPDATE 或 DELETE 一条记录时执行,行类触发器可以监视多个表的数据行变化和多个数据库操作,它也可以进行行记录的更新和删除。下面是Oracle中定义行类触发器的示例代码:
“`SQL
CREATE OR REPLACE TRIGGER trg_cust_upd
BEFORE UPDATE ON customer
FOR EACH ROW
BEGIN
IF :new.cust_name :old.cust_name THEN
UPDATE cust_record SET cust_name = :new.cust_name
WHERE cust_id = :new.cust_id ;
END IF;
END;
/
最后一种触发器类型是系统类触发器,它与前面三种不同,它表示一个数据库操作系统级事件,比如数据库启动、停止等,系统类触发器可以响应数据库事件,帮助数据库管理员更好地管理数据库操作。下面是Oracle中定义系统类触发器的示例代码:
```SQLCREATE OR REPLACE TRIGGER trg_db_after_startup
AFTER STARTUP ON DATABASE BEGIN
EXECUTE IMMEDIATE 'ALTER DATABASE BACKUP CONTROLFILE TO TRACE'; END;
/
综上所述,Oracle中的触发器类型共有四种,分别是:联接类,语句类,行类和系统类触发器,不同类型的触发器具有不同的应用场景和使用方法。触发器可以帮助我们有效地管理数据库表,实现自动化操作,提高数据库系统的稳定性,节省人力成本。