语法规则:
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表示要被删除的数据。
注意:
在触发器中不能使用commit。
分享到:
相关推荐
### Oracle触发器详解 在Oracle数据库管理中,触发器是一种非常强大的工具,它允许你在特定的数据库事件(如数据插入、更新或删除)发生时自动执行预定义的SQL语句或PL/SQL代码块。这使得数据库能够在无需外部程序...
里面有触发器的详细定义,触发器的实例使用,以及触发器的具体使用地方。能帮助你对触发器有更好的理解。
### Oracle存储过程与触发器详解 #### 存储过程与触发器的作用 在软件开发,尤其是数据库相关的项目中,Oracle的存储过程和触发器扮演着举足轻重的角色。它们能够在简化代码、提高效率和增强数据完整性方面发挥...
在ORACLE系统里,触发器类似过程和函数,都有声明,执行和异常处理过程的PL/SQL块。 触发器类型 触发器在数据库里以独立的对象存储,它与存储过程和函数不同的是,存储过程与函数需要用户显示调用才执行,而触发器是...
### Oracle触发器详解 在Oracle数据库管理中,触发器是一种重要的机制,用于自动执行响应于特定数据库事件(如数据插入、更新或删除)的SQL语句。触发器可以帮助确保数据完整性,实现复杂业务规则,以及自动化...
本文实例讲述了oracle 存储过程、函数和触发器用法。分享给大家供大家参考,具体如下: 一、存储过程和存储函数 指存储在数据库中供所有用户程序调用的子程序叫存储过程、存储函数。 创建存储过程 用CREATE ...
### Oracle EBS Forms 触发器执行顺序详解 Oracle E-Business Suite (EBS) 是一个集成的企业资源规划 (ERP) 解决方案,它利用了 Oracle 的技术来提供全面的业务流程管理。其中,Oracle Forms 是一个强大的工具,...
- Oracle触发器的学习笔记和实例详解提供了更深入的触发器使用技巧和案例。 - 主键自增表的创建以及触发器的应用,展示了如何在Oracle中实现类似MySQL的自增主键。 - 监控表变动的触发器示例,说明了如何利用...
MySQL触发器是数据库管理系统中的一种重要特性,...通过理解触发器的语法和实例,你可以更好地利用MySQL来构建高效、健壮的数据库系统。在实际应用中,应谨慎设计和使用触发器,避免可能导致性能下降或不易维护的情况。
《PowerBuilder+Oracle项目开发实例详解》是一本深入探讨如何结合PowerBuilder和Oracle数据库进行项目开发的专业书籍。这本书籍提供了一系列实例,旨在帮助读者掌握这两种技术的整合应用,提升实际项目开发能力。随...
Oracle数据库是世界上最流行的数据库管理系统之一,它包含了众多的对象类型,如表、索引、视图、同义词、函数、存储过程、触发器和包等。这些对象在数据库设计和管理中扮演着至关重要的角色。 1. **表**:表是...
触发器是一种特殊的存储过程,它不能被显式地调用,而是在往表中插入记录﹑更新记录或者删除记录时被自动地激活。 所以触发器可以用来实现对表实施复杂的完整性约束。 2. 触发器的分类 SQL Server2000提供了两种...
#### 实例详解 根据题目中的描述,我们需要创建一个名为`TEST_CHECK`的触发器,当向`countcheck`表中插入新记录时,该触发器会自动为新记录的`id`字段赋一个递增的唯一值。 ### 创建触发器的步骤 1. **定义触发器...
### SQL触发器知识详解与实例应用 #### 一、引言 在数据库管理领域,触发器是一种非常重要的机制,它可以在特定的数据库操作(如插入、更新或删除数据)发生时自动执行预定义的动作。本文将详细介绍触发器的基础...