PL/SQL(oracle)9_触发器

一、触发器概念:(Trigger):
是一种命名的PL/SQL块,是针对特定事件自动触发的。触发器不能接收参数。
是基于表、视图、方案、数据库级别的。
二、为什么使用触发器。
通常可以实现一些审计的操作。
三、触发器类型:
1、DML触发器:当在数据库上做DML操作时建立的触发器。
2、DDL触发器:当在数据库上做DDL操作时建立的触发器。
3、系统事件触发器:当实例系统、关闭、用户登陆、登出等操作时建立的触发器。
四、DML触发器:
1、DML语句级触发器:当在一个表上做某个DML操作时,触发器体本身的语句被自动执行1次。
创建语法:
create Or Replace Trigger 触发器名 [before|After] [Insert|Update|Delete] On
表名 PL/SQL块。
说明:before|After,触发时间。before表示触发器体内的语句在DML操作之前执行,After表示之后执行。
[Insert|Update|Delete] :触发事件
PL/SQL块,如果有变量声明部分,需要以declare关键字开头。
在触发器里不能包含事物结束的语句。

2、DML行级别触发器: 当在一个表上做某个DML操作时,触发器体本身的语句根据DML操作所影响的行数
来决定执行多少次。

create Or Replace Trigger 触发器名 [before|After] [Insert|Update|Delete] On
表名 For Each Row
PL/SQL块。

创建表:
Create table audit_emp_table(   
user_name varchar2(10),
timestamp date,
old_empno number(10),
new_empno number(10),
old_ename varchar2(10),
new_ename varchar2(10),
old_job varchar2(10),
new_job varchar2(10),
old_sal number(7,2),
new_sal number(7,2)
);

创建触发器:


CREATE OR REPLACE TRIGGER audit_emp_values
AFTER DELETE OR INSERT OR UPDATE ON emp
FOR EACH ROW
BEGIN
INSERT INTO audit_emp_table (user_name, timestamp,
old_empno,new_empno,old_ename, new_ename,
old_job,new_job, old_sal, new_sal)
VALUES (USER, SYSDATE, :OLD.empno,:NEW.empno,
:OLD.ename, :NEW.ename, :OLD.job,
:NEW.job, :OLD.sal, :NEW.sal );
END;



试验:


Select * From audit_emp_table
Update emp Set sal = sal;
Commit;


触发器例子1:

create or replace trigger ZA_ZFBA_JCXX_RK_WFXYRXX
before insert or update on ZA_ZFBA_JCXX_RK_WFXYRXX
for each row
declare
begin
if inserting then
:new.gxsj :=sysdate;
:new.tbsj :=sysdate;
elsif updating then
:new.gxsj :=sysdate;
end if;
end;


触发器例子2.


create or replace trigger update_sary
after update on za_zfba_jcxx_rk_sary
for each row
DECLARE
BEGIN
IF(:new.GMSFHM is not null) THEN
update ZA_ZFBA_JCXX_RK_SARY_H t
set t.GMSFHM = gmsfhm, t.XM = xm, t.RYXH = :new.RYXH
where t.RYXH = :old.RYXH and t.AJBH = :old.AJBH and RYLB = '0';
END IF;
END update_sary;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值