`

oracle触发器使用笔记(原创)

阅读更多
语法规则:
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 代码
  1. create or replace trigger wf_tri_user_list before insert or update or delete on user_list   
  2. for each row   
  3. declare  
  4.    uid varchar2(10); useq varchar2(10); asql varchar2(200); namea varchar2(200); nameb varchar2(200);   
  5. begin  
  6.    namea:=NULL;   
  7.    nameb:=NULL;   
  8.    if inserting then  
  9.       insert into wflow.bpm_org_user(userid,username,diaplayname,seq) values(:NEW.user_id,:NEW.user_name,:NEW.user_realname,:NEW.user_id);   
  10.       dbms_output.put_line('insert trigger is chufale .....');   
  11.         
  12.    end if;   
  13.    if updating then  
  14.       if (:NEW.user_name<>:OLD.user_name) and (:NEW.user_realname<>:OLD.user_realname) then  
  15.          namea:=:NEW.user_name;   
  16.          nameb:=:NEW.user_realname;   
  17.          asql:='update wflow.bpm_org_user set diaplayname=:1 where username=:2';   
  18.          execute immediate asql using namea,nameb;   
  19.       else  
  20.         if :NEW.user_name<>:OLD.user_name then  
  21.           namea:=:NEW.user_name;   
  22.           asql:='update wflow.bpm_org_user set user_name=:1 where username=:2';   
  23.           execute immediate asql using namea;   
  24.         else  
  25.           if :NEW.user_realname<>:OLD.user_realname then  
  26.             nameb:=:NEW.user_realname;   
  27.             asql:='update wflow.bpm_org_user set diaplayname=:1 where username=:2';   
  28.             execute immediate asql using nameb,:OLD.user_id;   
  29.           end if;   
  30.         end if;   
  31.       end if;   
  32.    end if;   
  33.    if deleting then  
  34.       update wflow.bpm_org_jobusers set userid = 0 where :OLD.user_id =userid and parentid=-1;   
  35.       delete from wflow.bpm_org_jobusers where userid = :OLD.user_id;   
  36.       delete wflow.bpm_org_user where userid=:OLD.user_id;   
  37.    end if;   
  38.    commit;   
  39. end;   
  40.   

 

关键字:

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

注意:

在触发器中不能使用commit。

分享到:
评论
3 楼 huigang10086 2013-08-16  
应该不能写commit吧。
2 楼 wst0350 2011-09-07  
谢谢,这是我需要的
1 楼 小嘴冰凉 2009-08-31  
触发器中是可以用commit的,用自治事务

相关推荐

    oracle触发器使用笔记

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

    oracle笔记触发器

    oracle笔记触发器,有具体的触发器代码案例,触发器的知识笔记!

    oracle 触发器 学习笔记

    功能: 1、 允许/限制对表的修改 2、 自动生成派生列,比如自增字段 3、 强制数据一致性 4、 提供审计和日志记录 5、 防止无效的事务处理 6、 启用复杂的业务逻辑 开始 create trigger biufer_employees_department_...

    oracle笔记+触发器

    oralce数据库+触发器笔记等资料,资料绝对不错,是培训机构里面的内部笔记,值得拥有

    oracle笔记(存储过程函数触发器游标流程控制等)

    oracle知识点笔记,语法,触发器,存储过程,存储函数,流程控制,游标,异常处理,记录类型,视图,控制用户权限,高级子查询,set运算符,基本的sql_Select语句等等

    Oracle 入门文档2

    Oracle 入门文档 Oracle笔记 一、oracle...Oracle笔记 十一、PL/SQL函数和触发器 Oracle笔记 十二、PL/SQL 面向对象oop编程 Oracle笔记 十三、PL/SQL面向对象之package Oracle笔记 十四、查询XML操作、操作系统文件

    oracle学习笔记(从入门到精通)

    压缩包主要包括15个文档,主要是本人学习oracle过程中的笔记,希望对你有帮助:主要文档如下: 01-常用命令.txt 02-表空间建表.txt 03-基本查询语句学习笔记.txt 04-高级查询语句学习笔记.txt 05-锁和表分区学习...

    Oracle 入门文档

    Oracle 入门文档 Oracle笔记 一、oracle...Oracle笔记 十一、PL/SQL函数和触发器 Oracle笔记 十二、PL/SQL 面向对象oop编程 Oracle笔记 十三、PL/SQL面向对象之package Oracle笔记 十四、查询XML操作、操作系统文件

    Oracle 10g 学习笔记

    │ Oracle学习笔记(chstone原创).mht │ ORACLE学习笔记(一) - lvhuiqing的专栏 - CSDN博客.mht │ ORACLE学习笔记(一) - lvhuiqing的专栏 - CSDN博客.mht.lnk │ ORACLE学习笔记(二)oracle的逻辑结构 - ...

    oracle使用管理笔记(一些经验的总结)

    (5)触发器 51 PL/SQL语法数据类型 57 (6)PL/SQL进阶控制结构 60 (7)PL/SQL进阶分页过程 62 (8)PL/SQL进阶例外 62 (9)视图 62 22.数据库管理+表的逻辑备份与恢复 63 23.数据字典和动态性能视图 67 24.oracle的卸载 69...

    oracle 学习 笔记 实用

    oracle 日常学习的记录…… java调用oracle的存储过程 oracle number(1)一般对应于Java中的类型 Oracle常用函数 oracle触发器new Oracle中自增字段的两种方法 字典表查询

    oracle基础笔记整理

    Oracle基础学习笔记,开窗排序函数,权限管理,递归查询,存储函数触发器游标等等

    oralce学习笔记总结(包含存储过程触发器)

    本文件是本人学习oracle的一些总结资料,值得大家借鉴,可以互相交流

    oracle所有知识点笔记(全)

    这是我自己学习oracle的时候,写的代码案例和笔记,基本上每一个知识点都写的很清楚!大家可以作为参考! 该有的知识点都有! 基本的sql语法,触发器,存储过程,存储函数, 流程控制,游标,异常处理,记录类型,...

    oracle10读书笔记

    本人对于Oracle学习的一点心得 主要包括 pl语言触发器的用法

    韩顺平oracle学习笔记

    韩顺平oracle学习笔记 第0讲:如何学习oracle 一、如何学习oracle Oracle目前最流行的数据库之一,功能强大,性能卓越。学习oracle需要具备一定基础: 1.学习过一门编程语言(如:java ,c) 2.最好学习过一门别的...

    oracle知识点笔记(语法案例等等)

    oracle知识点笔记,语法,触发器,存储过程,存储函数,流程控制,游标,异常处理,记录类型,视图,控制用户权限,高级子查询,set运算符,基本的sql_Select语句等等

    关于ORACLE PL笔记

    ORACLE PL入门笔记整理 主要内容以下四个部分: 1、存储过程 2、函数 3、触发器 4、包 讲述其命令格式、调用、释放、实例

    Oracle_plsql基本语法笔记.txt

    Oracle 常用命令举例 标题 基本语法 %type用法,%rowtype用法,TYPE用法 游标的使用 for 循环 loop循环 while循环 if / else 的用法 case 的用法 标题 错误定义 error的设定 exception用法 ...

Global site tag (gtag.js) - Google Analytics