oracle触发器after使用(Oracle触发器的触发器类型.)

本文目录
Oracle触发器的触发器类型.
1、语句级触发器 语句级触发器在每个数据修改语句执行后只调用一次,而不管这一操作将影响到多少行。
例1:创建一个orderdetails_tablelog表及一个AFTER触发器,用于记录是哪些用户删除了orderdetails表中的数据及删除的时间。
--先创建表
createtableorderdetails_tablelog
(
whovarchar2(40),
oper_datedate
);
--再做触发器
createorreplacetriggerdele_orderdetails
afterdeleteonorderdetails
begin
insertintoorderdetails_tablelog (who,oper_date) values(user,sysdate);
end;
注意:在该触发器被触发后,尽管一次删除多条记录,但是触发器只执行一次插入操作;
例2:创建一个 BEFORE 触发器,使得在向 ORDERS 表中插入记录之前对 ShippedDate字段进行检测, 要求其值不允许为周六或周日,发货时间应在8-18点之间.否则将提示错误’发货时间应为工作时间’.
create or replace trigger secure_shippeddate
before insert on orders
for each row
begin
if
(to_char(:new.shippeddate,’dy’)in(’星期六’,’星期日’))
or
(to_number(to_char(:new.shippeddate,’hh34’))not between 8 and 18)
then
raise_application_error(-20500,’发货时间应为工作时间’);
endif;
end;
2、多条件触发器
CREATEORREPLACETRIGGER… BEFOREinsertorupdateordelete ON… BEGIN IFINSERTINGTHEN … ENDIF; IFDELETINGTHEN … ENDIF; IFUPDATINGTHEN … ENDIF; End; 例3:创建一个多条件触发器,用于实现记录用户对产品表进行的操作类型,操作时间,用户名(创建一个prod_operate_log表记载信息,其中操作编号自动增长). 1)创建prod_operate_log表 CREATETABLEprod_operate_log (OperIDnumber, usernamevarchar2(200), Operate_datetimestamp, Operate_typevarchar2(10) ); 2)创建序列logID CREATESEQUENCElogID STARTWITH1 INCREMENTBY1 NOMAXVALUE CACHE10;
3、级联触发器 把一个数据库触发器的动作与另一个触发器联系起来,使之触发另一个触发器。
例4:创建3个表A、B、C,在表A上设置一个INSERT触发器,用于向表B添加一条记录,在表B上设置一个INSERT触发器,用于向表C添加一条记录,,在表C上设置一个INSERT触发器,用于对A表中的所有记录进行更新(+10)
创建A、B、C三张表 CREATETABLEA(AIDnumber); CREATETABLEB(BIDnumber); CREATETABLEC(CIDnumber); 创建触发器表 --在表A上创建INSERT触发器 CREATEORREPLACETRIGGERinsert_a AFTERinsertONA Begin insertintobvalues(1); End; --在表B上创建INSERT触发器 CREATEORREPLACETRIGGERinsert_b AFTERinsertONB Begin insertintocvalues(2); End; -在表C上创建INSERT触发器 CREATEORREPLACETRIGGERinsert_c AFTERinsertONC BEGIN UPDATEa SETaid=aid+10; End; --测试,向A表插入数据5 INSERTINTOAVALUES(5);
4、行级触发器 行级触发器是按触发语句所处理的行激发的,可以引用受到影响的行值。创建触发器时采用关键字FOREACHROW 这种访问是通过两个相关的标识符实现的 :old:用于存放未进行修改前的数据 :new:用于存放进行修改后的数据 例5:修改 orderdetails_tablelog 表,增加两列 orderid,productid,并创建一个 after 触发器,用于记录是哪些用户在什么时间删除了 orderdetails 表中的哪些数据。 --先增加两列 alter table orderdetails_tablelog add orderid number; alter table orderdetails_tablelog add productid number; --再做触发器 create or replace trigger dele_orderdetails after delete on orderdetails for each row begin insert into orderdetails_tablelog(who,oper_date,orderid,productid) values(user,sysdate,:old.orderid,:old.productid); end;
oracle触发器before和after的问题求解答
1、触发器的作用,是每一条记录处理前后进行相应的处理,也就是说你每次处理一条emp的记录,都会执行一次drop和creare emp_c表。。。不要这样做啊,否则你插入1000条记录,就会重建1000次emp_c表
2、commit在触发器里面并不会提交当前事务,事实上insert emp和触发器是在同一个事物中的,相反,只有在这个事物最后,也就是说你的insert emp提交之后,emp_c才会真正提交。
触发器的应用和用法
1、触发器的定义就是说某个条件成立的时候,触发器里面所定义的语句就会被自动的执行。因此触发器不需要人为的去调用,也不能调用。
2、触发器的触发条件其实在定义的时候就已经设定好了。
3、触发器可以分为语句级触发器和行级触发器。简单的说就是语句级的触发器可以在某些语句执行前或执行后被触发。而行级触发器则是在定义的了触发的表中的行数据改变时就会被触发一次。
4、具体举例:
1)、 在一个表中定义语句级的触发器,当这个表被删除时,程序就会自动执行触发器里面定义的操作过程。这个【删除表的操作】就是触发器执行的条件。
2)、 在一个表中定义行级的触发器,那当【这个表中一行数据发生变化】的时候,比如删除了一行记录,那触发器也会被自动执行了。
5、创建触发器语句
6、触发器作用(应用场景)
(1)数据确认
(2)实施复杂的安全性检查
(3)做日志记录,跟踪表上所做的数据操作等
(4)数据的备份和同步;
扩展资料
一、触发器介绍
1、数据库触发器是一个与表相关联的、存储的 PL/SQL 程序。每当一个特定的数据操作语句(Insert,update,delete)在指定的表上发出时,Oracle 自动地执行触发器中定义的语句序
列。
2、触发器的作用
触发器可用于:
(1)数据确认
(2)实施复杂的安全性检查
(3)做审计,跟踪表上所做的数据操作等
(4)数据的备份和同步
3、触发器的类型
(1)语句级触发器
在指定的操作语句操作之前或之后执行一次,不管这条语句影响了多少行 。
(2)行级触发器(FOR EACH ROW)
触发语句作用的每一条记录都被触发。在行级触发器中使用 old 和 new 伪记录变量,识别值的状态。
4、创建触发器的语法
CREATE TRIGGER 触发器名
{BEFORE |AFTER}
{DELETE | INSERT | UPDATE }
ON 表名
参考资料
百度百科-Oracle触发器

更多文章:
oracle触发器after使用(Oracle触发器的触发器类型.)
2026年9月10日 21:20
windows7虚拟机(我的电脑是32位的win7系统,能安装 VMware Workstation虚拟机吗)
2026年9月10日 17:40
i+don’t+kown+whom+he+is中为什么whom做表语?是不是一般现在被动语态,为什么known是过去分词
2026年9月10日 14:20
oracle如何登录(如何以管理员的身份登录oracle 与SqlServer)
2026年9月10日 11:00
vimeo下载视频到手机相册(bob老师英语视频在哪里下载)
2026年9月10日 03:50
json网址查询(Splinter如何获取网站返回的Json)
2026年9月10日 03:20
matlabround函数(matlab里这句nfft=2048;index=0:round(nfft/2-1); 是什么意思呢)
2026年9月10日 00:20



