`
shixiaomu
  • 浏览: 375818 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

oracle 数据库 触发器 trigger 语法

阅读更多
关键字: oracle 数据库 触发器 trigger 语法
语法规则:
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触发器trigger详解

    每当一个特定的数据操作语句(insert update delete)在指定的表上发出时,Oracle自动执行触发器中定义的语句序列。 举个简单的例子: 当员工表中新增一条记录后,自动打印“成功插入新员工” create or replace ...

    oracle触发器使用,很详细

    3,触发器语法和功能 3 4,例一:行级触发器之一 4 5,例二:行级触发器之二 4 6,例三:INSTEAD OF触发器 6 7,例四:语句级触发器之一 8 8,例五:语句级触发器之二 9 9,例六:用包封装触发器代码 10 10,...

    oracle触发器使用笔记

    :NEW 和:OLD使用方法和意义,new 只出现在insert和update时,old只出现在update和delete时。在insert时new表示新插入的行数据,update时new表示要替换的新数据、old表示要被更改的原来的数据行,delete时old表示要被...

    Oraclet中的触发器

    ORACLE将触发器的功能扩展到了触发ORACLE,如数据库的启动与关闭等。 1 DML触发器:ORACLE可以在DML语句进行触发,可以在DML操作前或操作后进行触发,并且可以对每个行或语句操作上进行触发。 2 替代触发器:...

    Oracle使用触发器和mysql中使用触发器的案例比较

    触发器在数据库里以独立的对象存储,  2.触发器不需要调用,它由一个事件来触发运行  3.触发器不能接收参数  –触发器的应用  举个例子:校内网、开心网、facebook,当你发一个日志,自动通知好友,其实就是在...

    oracle_trigger.rar_trigger

    提供一个Oracle中的触发器实例,供初学者学习触发器的原理及语法。

    mysql数据库的基本操作语法

    注意:alter modify不支持一次修改多个列,但是Oracle支持多列修改 但是MySQL可以通过多个modify的方式完成: alter table user modify tel varchar(15) default '02087654321' first, modify name varchar(20) ...

    Oracle 10g 学习笔记

    这个笔记是学习oracle数据库过程中整理出来的,比较详细,适合于初学者。 │ oracle与tomcat端口冲突.txt │ Oracle学习笔记.pdf │ Oracle学习笔记.wps │ 安装Oracle后myEclipse不能正常使用.txt │ 手工配置...

    Oracle8i_9i数据库基础

    第一章 Oracle数据库基础 23 §1.1 理解关系数据库系统(RDBMS) 23 §1.1.1 关系模型 23 §1.1.2 Codd十二法则 24 §1.2 关系数据库系统(RDBMS)的组成 24 §1.2.1 RDBMS 内核 24 §1.2.2 数据字典概念 25 §1.3 ...

    精通SQL 结构化查询语言详解

    16.3.5 Oracle触发器的管理  第17章 SQL中游标的使用  17.1 SQL游标的基本概念  17.1.1 游标的概念  17.1.2 游标的作用及其应用 17.2 SQL游标的使用 17.2.1 使用DECLARE CURSOR语句创建游标  17.2.2 ...

    精通SQL--结构化查询语言详解

    16.3.5 oracle触发器的管理 346 第17章 sql中游标的使用 349 17.1 sql游标的基本概念 349 17.1.1 游标的概念 349 17.1.2 游标的作用及其应用 350 17.2 sql游标的使用 351 17.2.1 使用declare cursor语句创建...

    MySQL 触发器详解及简单实例

    语法 CREATE TRIGGER &lt;触发器名称&gt; –触发器必须有名字,最多64个字符,可能后面会附有分隔符.它和MySQL中其他对象的命名方式基本相象. { BEFORE | AFTER } –触发器有执行的时间设置:可以设置为事件发生前或...

    sql总结.doc

    1.在语法上,行级触发器就多了一句话:for each row 2.在表现上,行级触发器,在每一行的数据进行操作的时候都会触发。 语句级触发器,对表的一个完整操作才会触发一次。 简单的说:行级触发器,是对应行操作的;...

    Oracle从入门到精通

    1、语法:................................................. 2、SQL语句说明:.......................................... 3、数字和日期都可以使用数学运算符建立表达式。............. 4、定义空(NULL)值.......

    精髓Oralcle讲课笔记

    -- 首先,以超级管理员的身份登录oracle sqlplus sys/bjsxt as sysdba --然后,解除对scott用户的锁 alter user scott account unlock; --那么这个用户名就能使用了。 --(默认全局数据库名orcl) 1、...

Global site tag (gtag.js) - Google Analytics