装载注明:http://yuexiaodong.iteye.com/blog/1891589
总是有这样的需求,当更新某个表的某条记录,然后需要对该表的某个字段进行更新,通过使用触发器即可完成这项工作。具体思路就是:首先建立一个临时表,然后在行触发器中记录当前操作的记录,然后在语句触发器中更新当前表。这样做的原因是,oracle对行触发器进行了限制,不能对当前表操作(具体如下:删除的行触发器不允许任何DDL操作,插入的行触发器允许通过游标读取数,这些都是我个人认为,欢迎指正!),但语句级触发器又不能获取当前增加或删除的记录,所以使用两类触发器。网上说可以使用自治事务,个人实验一把,没有达到我的目的,后来想想自治事务跟主事务独立,数据应该不是实时的,暂时放弃使用。
需求简介:对A表添加一个记录,根据表中某个字段的count(*)更新该新记录的某个字段属性值;删除某条记录,更新某个属性值;
源码如下:
---建立临时表 CREATE GLOBAL TEMPORARY TABLE ttt_Insprofworkty_insert ( id NUMBER(10,0), workid NUMBER(10,0), worktypeid NUMBER(10,0), projectid NUMBER(10,0), ordervalue NUMBER(10,0) ); CREATE GLOBAL TEMPORARY TABLE ttt_Delprofworktype_delete ( id NUMBER(10,0), workid NUMBER(10,0), worktypeid NUMBER(10,0), projectid NUMBER(10,0), ordervalue NUMBER(10,0) );
create or replace trigger profworktype_delete before delete on profworktype FOR EACH ROW -- 完成与删除的相同workid且大于当前删除ordervalue的操作 DECLARE begin insert into ttt_Delprofworktype_delete values (:old.id,:old.workid,:old.worktypeid,:old.projectid,:old.ordervalue); end; ------------------------------------ create or replace trigger profworktype_insert before insert on profworktype FOR EACH ROW DECLARE BEGIN select S_profworktype.NEXTVAL INTO :new.id from dual; insert into ttt_insprofworkty_insert values(:new.id,:new.workid,:new.worktypeid,:new.projectid,:new.ordervalue); END;
--------------------------------- 语句触发器完成业务 create or replace trigger profworktype_statement after delete or insert on profworktype -- 完成与删除的相同workid且大于当前删除ordervalue的操作 DECLARE v_count NUMBER(10,0); cursor cur_del is select * from ttt_Delprofworktype_delete deleted; cursor cur_ins is select * from ttt_Insprofworkty_insert inserted; begin if deleting then begin for i in cur_del loop begin -- dbms_output.put_line('-------'||i.ordervalue); update profworktype set ordervalue = ordervalue -1 where workid = i.workid and ordervalue > i.ordervalue ; end ; end loop; delete from Ttt_Delprofworktype_Delete; end ; end if; ----- if inserting then begin for i in cur_ins loop begin v_count := 0; select count(*) INTO v_count from profworktype where ordervalue is not null and workid = i.workid; update profworktype set ordervalue = v_count+1 where id =i.id; end ; end loop; delete from ttt_Insprofworkty_insert; end ; end if; end;
相关推荐
1、行级触发器不支持 ...所以想要触发器对自身表数据做修该,则用行级触发器得到 :new 和 :old对象中的相关数据,然后将这样的数据保存到 package中,然后在语句级触发期中调用 package包中保存的数据,进行更新操作
查询ORACLE 系统中当前会话正在执行的有关SQL语句。
理解Oracle触发器的种类和用途 2. 掌握行级触发器的编写 [预备知识] 1. PL/SQL程序设计 [实验原理] 1. 建立触发器 CREATE [OR REPLACE] TRIGGER <触发器名> BEFORE"AFTER INSERT"DELETE"UPDATE OF <列名> ON <表名>...
您可能感兴趣的文章:shell脚本操作oracle删除表空间、创建表空间、删除用户杀掉oracle在线用户脚本分享[Oracle] 如何使用触发器实现IP限制用户登录在命令行下进行Oracle用户解锁的语句深入探讨:Oracle中如
2 替代触发器:由于在ORACLE里,不能直接对由两个以上的表建立的视图进行操作。所以给出了替代触发器。它就是ORACLE 8专门为进行视图操作的一种处理方法。 3系统触发器:ORACLE 8i 提供了第三种类型的触发器叫...
很早就想自己写写Oracle的函数和触发器,最近一个来自课本的小案例给了我这个机会。现在把我做的东西记录下来,作为一个备忘或者入门的朋友们的参考。 案例介绍: 招投标管理系统(数据库设计)。 数据表有...
在ORACLE(db2也一样)中表空间是文件系统中的物理容器的逻辑表示,视图、触发器和存储过程也可以保存在表空间中。而MYSQL并没有使用表空间来进行管理。 2.查询当前所有的表。ORACLE: select * from tab,MYSQL:...
在PLSQL中用户登陆后,使用以上脚本一次性删除所有该用户创建的对象,包括表,视图,序列,触发器,存储过程等等,恢复到数据库刚刚创建的那个状态。
总之,内容基本上包括当前Oracle8I的最新内容。同时也覆盖了最新的ORACLE8i OCP培训大纲的内容。不仅包含ORACLE 程序设计人员、DBA所必须掌握的知识,而且还含盖了系统分析员所要求的内容。与本书(讲稿)相伴的还有...
常见的oracle问题汇总,...11. 怎样得到触发器、过程、函数的创建脚本? 12. 怎样计算一个表占用的空间的大小? 13. 如何查看最大会话数? 15. 如何以archivelog的方式运行oracle。 76. 如何显示当前连接用户? ......
总之,内容基本上包括当前Oracle8I的最新内容。同时也覆盖了最新的ORACLE8i OCP培训大纲的内容。不仅包含ORACLE 程序设计人员、DBA所必须掌握的知识,而且还含盖了系统分析员所要求的内容。与本书(讲稿)相伴的还有...
总之,内容基本上包括当前Oracle8I的最新内容。同时也覆盖了最新的ORACLE8i OCP培训大纲的内容。不仅包含ORACLE 程序设计人员、DBA所必须掌握的知识,而且还含盖了系统分析员所要求的内容。与本书(讲稿)相伴的还有...
总之,内容基本上包括当前Oracle8I的最新内容。同时也覆盖了最新的ORACLE8i OCP培训大纲的内容。不仅包含ORACLE 程序设计人员、DBA所必须掌握的知识,而且还含盖了系统分析员所要求的内容。与本书(讲稿)相伴的还有...
提供对常用数据字典(如 表、视图、索引、同义词、约束、过程、触发器等)的常用操作。例如,输入 “%NAME” 或 “NAME%” 或 “%NAME%”,能查找包含子串 “NAME” 的所有对象名,通过弹出菜单可以对每一个对象...
1. 查看当前的Oracle实例名称和主机名称: 27 2. 查看用户帐户及状态 27 十、 Oracle用户解锁 27 1. 对scott用户解锁 27 2. 更改scott用户的密码: 27 3. 锁定scott用户: 27 十一、 使用OEM 27 十二、 SQL/PLUS连接...
如:触发器,此软件oracle不带,需要单独安装。,5)oracle的企业管理器(oem,oracle,enterprise,manager),位置在,,开始,程序,oracle,oracle,oraclehome90,enterprise,manager,console, ,,即可启动oracle的企业管理...
§3.2.4 显示当前参数值 69 §3.2.5 参数的使用 69 §3.2.6 参数的类型 69 §3.2.7 不能在参数文件中指定的参数 70 §3.2.8 当参数指定错误时怎么办? 70 §3.3 参数内容说明 70 §3.4 DBA常用参数说明 71 §3.4.1 ...
总之,内容基本上包括当前Oracle的最新内容。同时也覆盖了最新的ORACLE8i OCP培训大纲的内容。不仅包含ORACLE 程序设计人员、DBA所必须掌握的知识,而且还含盖了系统分析员所要求的内容。与本书(讲稿)相伴的还有...