Oracle数据库触发器类型概述(oracle触发器类型)
Oracle 数据库触发器是一种特殊的存储过程,在数据库表或视图上创建,它可以在数据库某种特定操作完成之后自动被调用。它有助于简化复杂的数据库操作,可以更高效地应对多种情况而不用轮询数据表来顺序执行任务。Oracle数据库触发器类型主要分为四个:行触发器、表触发器、系统触发器和BEFORE/AFTER触发器。
行触发器只在表中某行被修改时才触发,语法形式为:
`sql
CREATE OR REPLACE TRIGGER t_name
BEFORE / AFTER INSERT / UPDATE / DELETE
OF col1, , colN
ON tab_name
[REFERENCING OLD AS o NEW AS n]
[FOR EACH ROW]
[WHENEVER [NOT] [CONDITION]]
[DECLARE ]
BEGIN
END;
例如,一个简单的行触发器,将记录插入订单历史表:
```sqlCREATE OR REPLACE TRIGGER new_order
AFTER INSERT ON orders FOR EACH ROW
BEGIN INSERT INTO orders_history (order_id, customer_id, order_date, order_value)
VALUES (:NEW.order_id, :NEW.customer_id, :NEW.order_date, :NEW.order_value);END;
/
表触发器不关心特定而是在整个表上定义,语法形式为:
`sql
CREATE OR REPLACE TRIGGER trg_name
BEFORE / AFTER INSERT / UPDATE / DELETE
ON tab_name
[FOR EACH ROW]
[WHENEVER [NOT] [CONDITION]]
[DECLARE ]
BEGIN
END;
例如,下面的表触发器的作用是在插入订单表的记录后使用LOGGER包记录日志:
```sqlCREATE OR REPLACE TRIGGER new_order
AFTER INSERT ON ordersBEGIN
INSERT_LOG ( "Inserting order "||:NEW.order_id,
"New order inserted with customer "|| :NEW.customer_id );
END;/
系统触发器是在一个特定时间时触发,语法形式由下面两种之一:
`sql
CREATE OR REPLACE TRIGGER trg_name
BEFORE / AFTER
{START OF {[DAY OF] [WEEK OF] MONTH OF] YEAR OF}
[(date `yyyy-mm-dd` / INTERVAL `integer` {DAY|HOUR|MINUTE|SECOND})]
ON SCHEMA / DATABASE
[WHENEVER [NOT] [CONDITION]]
[DECLARE ]
BEGIN
END;
例如,下面的系统触发器在每周的周一0点被调用:
```sqlCREATE OR REPLACE TRIGGER weekly_cnt
EVERY MONDAY AT 12:00 A.M. ON SCHEMA
BEGIN ...
END;
BEFORE/AFTER触发器分为基于行的触发器和基于表的触发器,它们有相似的语法。
基于行的语法形式为:
`sql
CREATE OR REPLACE TRIGGER trg_name
BEFORE / AFTER INSERT / UPDATE / DELETE
OF col1, , colN
ON tab_name
REFERENCING OLD AS o NEW AS n
[FOR EACH ROW]
[WHENEVER [NOT] [CONDITION]]
[DECLARE ]
BEGIN
END;
基于表的语法形式为:
```sqlCREATE OR REPLACE TRIGGER trg_name
BEFORE / AFTER INSERT / UPDATE / DELETE ON tab_name
REFERENCING _NEW AS NEW OLD AS OLD[FOR EACH ROW]
[WHENEVER [NOT] [CONDITION]] [DECLARE ...]
BEGIN ...
END;
例如,下面的两个BEFORE/AFTER触发器,它们的作用是将删除的行保存在日志表中:
`sql
Create a row level BEFORE/AFTER Trigger
CREATE OR REPLACE TRIGGER log_del_order
BEFORE DELETE
ON orders
REFERENCING OLD AS oldrow
FOR EACH ROW
BEGIN
INSERT INTO log_table
(id,customer_id,order_date,order_value)
VALUES (oldrow.order_id, oldrow.customer_id, oldrow.order_date, oldrow.order_value);
END;
/
```sql--Create a table level BEFORE/AFTER Trigger
CREATE OR REPLACE TRIGGER log_ins_order AFTER DELETE
ON orders REFERENCING OLD AS oldrow
BEGIN FORALL indx IN 1 .. oldrow.COUNT
INSERT INTO log_table (id,customer_id,order_date,order_value)
VALUES (oldrow(indx).order_id, oldrow(indx).customer_id, oldrow(indx).order_date, oldrow(indx).order_value); END;
/
以上是Oracle数据库触发器类型的概述,用于管理数据库表的实时事件。它们的使用有助于更加高效的管理数据库表,使用不同的数据库触发器类型可以根据需要完成更多的事务操作。
我想要获取技术服务或软件
服务范围:MySQL、ORACLE、SQLSERVER、MongoDB、PostgreSQL 、程序问题
服务方式:远程服务、电话支持、现场服务,沟通指定方式服务
技术标签:数据恢复、安装配置、数据迁移、集群容灾、异常处理、其它问题
本站部分文章参考或来源于网络,如有侵权请联系站长。
数据库远程运维 Oracle数据库触发器类型概述(oracle触发器类型)
相关文章
- 利用Oracle创建多个实例的指南(oracle建多个实例)
- Oracle:缩略字的秘密(oracle缩写)
- Oracle服务快速启动指南(oracle服务启动命令)
- Oracle触发器的类型及应用(oracle触发器类型)
- Oracle数据库中的触发器类型(oracle触发器类型)
- Oracle数据库触发器类型简介(oracle触发器类型)
- Oracle 数据库实现回滚功能(oracle回滚)
- 了解Oracle数据库表的定义方式(oracle数据库定义表)
- Oracle表空间重组:提高性能的有效方案(oracle表空间重组)
- 解决Oracle数据导入乱码问题(oracle导入数据乱码)
- Oracle数据库中的时间类型分析(oracle时间类型)
- Oracle查询小于指定日期的记录(oracle 小于日期)
- Oracle数据库包:掌握权限管控之道(oracle包权限)
- 解决Oracle入库汉字乱码问题(oracle入库汉字乱码)
- 解决Oracle中JSP的乱码问题(jsp乱码 oracle)
- AIX 下实现 Oracle 数据库导入(aix导入oracle)
- AIX环境下构建高效的Oracle脚本(aix下oracle脚本)
- Oracle数据库中的转义字符技巧(oracle 中转义字符)
- Oracle的休眠链接提升数据库可用性(oracle休眠链接)
- Oracle中如何查看游标信息(oracle中显示游标)
- 恢复Oracle 数据库恢复要实现效率与安全兼得(oracle中 数据库)
- Oracle中判断与循环控制(oracle中判断与循环)
- Oracle数据库支持的业务事务理念(oracle 业务事务)