语法规则:
Create [or replace] trigger [模式.]触发器名
Before| after insert|delete|(update of 列名)
On 表名
[for each row]
When 条件
PL/SQL块
说明:
For each row的意义是:在一次操作表的语句中,每操作成功一行就会触发一次;不写的话,表示是表级触发器,则无论操作多少行,都只触发一次;
When条件的出现说明了,在DML操作的时候也许一定会触发触发器,但是触发器不一定会做实际的工作,比如when 后的条件不为真的时候,触发器只是简单地跳过了PL/SQL块;
例子:
sql 代码
- create or replace trigger wf_tri_user_list before insert or update or delete on user_list
- for each row
- declare
- uid varchar2(10); useq varchar2(10); asql varchar2(200); namea varchar2(200); nameb varchar2(200);
- begin
- namea:=NULL;
- nameb:=NULL;
-
if inserting then
-
insert into wflow.bpm_org_user(userid,username,diaplayname,seq) values(:NEW.user_id,:NEW.user_name,:NEW.user_realname,:NEW.user_id);
-
dbms_output.put_line('insert trigger is chufale .....');
-
-
end if;
-
if updating then
-
if (:NEW.user_name<>:OLD.user_name) and (:NEW.user_realname<>:OLD.user_realname) then
- namea:=:NEW.user_name;
- nameb:=:NEW.user_realname;
-
asql:='update wflow.bpm_org_user set diaplayname=:1 where username=:2';
-
execute immediate asql using namea,nameb;
-
else
-
if :NEW.user_name<>:OLD.user_name then
- namea:=:NEW.user_name;
-
asql:='update wflow.bpm_org_user set user_name=:1 where username=:2';
-
execute immediate asql using namea;
-
else
-
if :NEW.user_realname<>:OLD.user_realname then
- nameb:=:NEW.user_realname;
-
asql:='update wflow.bpm_org_user set diaplayname=:1 where username=:2';
-
execute immediate asql using nameb,:OLD.user_id;
-
end if;
-
end if;
-
end if;
-
end if;
-
if deleting then
-
update wflow.bpm_org_jobusers set userid = 0 where :OLD.user_id =userid and parentid=-1;
-
delete from wflow.bpm_org_jobusers where userid = :OLD.user_id;
-
delete wflow.bpm_org_user where userid=:OLD.user_id;
-
end if;
-
commit;
- end;
-
关键字:
:NEW 和:OLD使用方法和意义,new 只出现在insert和update时,old只出现在update和delete时。在insert时new表示新插入的行数据,update时new表示要替换的新数据、old表示要被更改的原来的数据行,delete时old表示要被删除的数据。
分享到:
相关推荐
调试oracle触发器文档,自己整理的,不懂的可以聊系我
个人亲测oracle触发器调用java程序
1、行级触发器不支持 update 、select 、delete 对自身表的操作。 2、表级触发器 不支持 :new 和 :old对象 所以想要触发器对自身表数据做修该,则用行级触发器得到 :new 和 :old对象中的相关数据,然后将这样的数据...
oracle insert数据成功之后调用触发器,触发器调用存储过程,存储实时调用java http
oracle触发器语法要点
ORACLE触发器、内置程序包教学.doc )
Oracle 触发器 备份 表数据
oracle触发器功能介绍内附具体说明和简单介绍
oracle 触发器 调用 存储过程 Oracle自治事务(Autonomous Transaction)
oracle触发器与存储过程高级编程
Oracle触发器与存储过程高级编程Oracle触发器与存储过程高级编程
触发器是一种特殊的存储过程,它在插入,删除或修改特定表中的数据时触发执行,它比数据库本身标准的功能有更精细和更复杂的数据控制能力。数据库触发器有以下的作用:
Oracle触发器与存储过程高级编程 中文 PDF
Oracle触发器的概念和类型
oracle触发器执行顺序.pdf
介绍数据库触发器的PPT。内容包括:存储过程的创建与使用;存储过程的查看、编辑和删除;触发器的创建与使用;触发器的查看、编辑、重命名和删除
Oracle触发器与pl/sql存储过程编程 chm格式的
《Oracle触发器与存储过程高级编程》电子版,由于单个压缩文件超过20M,所以压缩成了两个包,这是第二个包。