Oracle数据库中的触发器类型(oracle触发器类型)
Oracle数据库中的触发器是一种特殊的系统存储过程,它在发生某种类型的数据库事件时自动触发,并根据要求执行由用户编写的操作。Oracle数据库中的触发器类型分为四种:BEFORE、AFTER、INSTEAD OF和COMBINED。
1. BEFORE触发器,它在操作发生之前执行,不能阻止操作发生或影响其结果,只能改变传递给操作的参数,因此常用于做数据检查、改变值等操作。下面的例子演示如何使用BEFORE触发器,在执行INSERT操作之前对参数值进行检查:
CREATE OR REPLACE TRIGGER salary_check
BEFORE
INSERT ON salaries FOR EACH ROW
BEGIN
IF :NEW.salary 100000 THEN
RAISE_APPLICATION_ERROR(-20010, 输入薪水过大! );
END IF;
END;
2. AFTER触发器就像其名字一样,在操作发生之后执行,不能改变操作的结果,可以修改其它表的值, 因此常用于完成连带的应用程序逻辑,比如记录操作日志等。例如下面的例子对日志表进行更新,记录谁在什么时间做了什么操作:
CREATE OR REPLACE TRIGGER log_upd
AFTER
INSERT OR UPDATE OR DELETE
ON sales
FOR EACH ROW
BEGIN
INSERT INTO log (log_user,log_time,log_action)
VALUES(USER,SYSDATE,SQL);
END;
3. INSTEAD OF触发器可以在操作发生时用自定义的代码来替代发生操作,使用这种触发器可以实现虚拟表。例如创建一个视图,该视图结果中比实际表中数据多100:
CREATE OR REPLACE VIEW view_salary
AS SELECT
id, name, age, salary+100
FROM salary;
CREATE OR REPLACE TRIGGER salary_view
INSTEAD OF
INSERT OR UPDATE OR DELETE
ON view_salary
FOR EACH ROW
BEGIN
IF INSERTING THEN
INSERT INTO salary(id,name,age,salary) VALUES(:new.id, :new.name,:new.age, :new.salary-100);
ELSIF UPDATING THEN
UPDATE salary SET
name=:new.name,age=:new.age, salary =:new.salary-100
WHERE id=:new.id;
ELSIF DELETING THEN
DELETE FROM salary WHERE id=:new.id;
END IF;
END;
4. COMBINED触发器是Oracle中最新的特性,它是一种综合的触发器,可以在before、after和instead of三种触发器之间自由切换,更加灵活实用。
例如创建一个combined触发器,它在插入新数据之前检查参数值,在插入新数据之后更新日志表:
CREATE OR REPLACE TRIGGER salary_combined
BEFORE
INSERT ON salaries FOR EACH ROW
BEGIN
IF :new.salary 100000 THEN
RAISE_APPLICATION_ERROR(-20010, 输入薪水过大! );
END IF;
END;
AFTER
INSERT OR UPDATE OR DELETE
ON salaries
FOR EACH ROW
BEGIN
INSERT INTO log (log_user,log_time,log_action)
VALUES(USER,SYSDATE,SQL);
END;
总之,以上四种Oracle数据库中的触发器都具有自动触发机制、可控性强等特点,可以大大提高数据库操作性能,增强数据库安全性等。这里只是简要介绍这四种类型的触发器,其实实战中还有更多实用的功能。只要熟悉相关知识,就可以更好地利用触发器实现优质的数据库管理服务。
我想要获取技术服务或软件
服务范围:MySQL、ORACLE、SQLSERVER、MongoDB、PostgreSQL 、程序问题
服务方式:远程服务、电话支持、现场服务,沟通指定方式服务
技术标签:数据恢复、安装配置、数据迁移、集群容灾、异常处理、其它问题
本站部分文章参考或来源于网络,如有侵权请联系站长。
数据库远程运维 Oracle数据库中的触发器类型(oracle触发器类型)
相关文章
- 苏宁用Oracle数据库技术助力数字转型(苏宁oracle)
- 轻松安装Linux系统上的Oracle数据库(linux安装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分页重复)
- 探究Oracle公司:一家全球领先的企业级软件和数据库服务供应商(oracle是哪个公司)
- Oracle数据库出现警告信号(oracle出现警告)
- MPP与Oracle数据库技术上的区别(mpp和oracle区别)
- c语言与Oracle实体智慧结合的无限可能(c oracle实体)
- Oracle中运行Jobs的定义与使用(oracle中 jobs)
- 利用Oracle创建两表视图的实践经验(oracle两表创建视图)
- 查询Oracle时间关联查询技巧解决难题(oracle两个时间关联)
- 深入解析Oracle AWR报告(oracle awr中文)
- 如何在PHP中使用Oracle数据库(2)