`
Just-Do-it
  • 浏览: 29649 次
  • 性别: Icon_minigender_1
最近访客 更多访客>>
社区版块
存档分类
最新评论

(转)oracle触发器----增 删 改

 
阅读更多
:new --为一个引用最新的列值;
:old --为一个引用以前的列值; 这两个变量只有在使用了关键字 "FOR EACH ROW"时才存在.且update语句两个都有,而insert只有:new ,delect 只有:old;

Old,New新解:
:new中存储的是T表更新内容中已经更新完成的字段;
:old中存储的是更新前的tid内容;
http://topic.csdn.net/u/20071027/22/e560007b-de46-4d34-9c13-f4fe1a08c89b.html



//触发器名UserToTemp   
create or replace trigger UserToTemp after insert or update or delete   
on user_info for each row//对表user_info操作时触发以下事件   
declare//声明变量   
    integrity_error exception;   
    errno            integer;   
    errmsg           char(200);   
    dummy            integer;   
    found            boolean;   
    sexy              varchar2(20);   
  
begin   
if inserting then   
    select sex into sexy from user_info_test;//取出user_info_test表中的sex字段的值赋值给变量sexy   
    insert into User_info_temp(ID,UserName,PassWord,Createdate,Status) values(:NEW.ID,:NEW.UserName,sexy,:NEW.createdate,:NEW.status);//:NEW.UserName的值为表user_info新增加的数据   
elsif updating then   
    update User_info_temp set ID=:NEW.ID,UserName=:NEW.UserName,PassWord=:NEW.PassWord,Status=:NEW.Status where id=:OLD.id;   
elsif deleting then   
    delete from User_info_temp where id=:OLD.id;   
end if;   
exception   
    when integrity_error then   
       raise_application_error(errno, errmsg);   
end;  



另,在使用触发器的过程中,会遇到ORA-04091的错误,这个错误与触发器中对基于进行了SELECT等操作有关。

create or replace trigger tri_card_ins
  after insert on card
  for each row
 
declare
T_COUNT number(10);

begin
  
   select count(*) into T_COUNT from card c,bts b
  where c.ne_name = b.bts_num and c.ne_name = :new.ne_name;
 
  update bts s set s.trx_count =T_COUNT
   where s.bts_num = :new.ne_name;

end tri_card_ins;

下面是错误信息。
[img]

[/img]

这个应该是不可以的。《精通Oracle 10g pl sql编程》

DML触发器使用注意事项:

当编写DML触发器时,触发器代码不能从触发器所对应的基表中读取数据。例如,如果要基于EMP表建立触发器,那么该触发器的执行代码不能包含对EMP表的查询操作。尽管在建立触发器时不会出现任何错误,但在执行相应触发操作时会显示错误信息。

你的问题应该是对CARD表建立的触发器,又查询CARD表。

提问人的追问   2011-07-01 09:25 那么如果我如要现实这样的功能,该怎么做啊?
回答人的补充   2011-07-01 13:47 实现这个功能应该有很多种方法。比如说可以在同一个SESSION里先执行INSERT的操作,再执行UPDATE.或者把整个逻辑写到一个存储过程里。

这样也可以在执行INSERT操作失败时都会回滚,而不会出现脏数据。
提问人的追问   2011-07-01 15:29 小弟刚接触oracle ,不太理解你说的session怎么使用。能给个例子吗?最好具体的点。谢谢啦。谢谢啦。
回答人的补充   2011-07-02 12:09 可以建一个中间表。

CREATE TABLE CARD_MAP (
NE_NAME VARCHAR2(20),
C_DATE  DATE
);

修改触发器。应该可以答到你的要求

create or replace trigger tri_card_ins
  after insert on card
  for each row

declare
T_COUNT number(10);

begin
   INSERT INTO CARD_MAP(NE_NAME,C_DATE) VALUES(:NEW.NE_NAME, SYSDATE);

   select count(*) into T_COUNT from CARD_MAP c,bts b
  where c.ne_name = b.bts_num and c.ne_name = :new.ne_name;

  update bts s set s.trx_count =T_COUNT
   where s.bts_num = :new.ne_name;

end tri_card_ins;
回答人的补充   2011-07-05 22:44 把触发修改一下。不需要每行触发。把你写的触发器中去除FOR EACH ROW


文章分别引自于:
1、http://www.iteye.com/topic/882897;
2、http://wenwen.soso.com/z/q300377397.htm?sp=2080;



  • 大小: 18.2 KB
分享到:
评论

相关推荐

    oracle基本语法-增删改查-新手入门

    ### Oracle基本语法——增删改查 #### 一、Oracle简介与环境搭建 在学习Oracle基本语法之前,首先需要了解Oracle数据库系统的一些基础知识,并确保具备一个可以进行实践操作的环境。 - **Oracle简介**:Oracle是...

    ORACLE增删改查,游标,包,过程,触发器

    在Oracle数据库管理中,"增删改查"(CRUD:Create, Read, Update, Delete)是最基础的操作,是数据库管理员和开发人员必备的技能。接下来我们将深入探讨这些概念以及与之相关的游标、包、过程和触发器。 1. **增删...

    WPF入门增-删-改-查

    **WPF入门增删改查**是针对初学者的一个教程,旨在帮助他们快速掌握Windows Presentation Foundation(WPF)框架下的基本数据操作,包括添加、删除、修改和查询数据。WPF是微软.NET Framework的一部分,它提供了丰富...

    java实现增删改查使用Oracle数据库

    对于初学者来说,掌握如何使用Java操作Oracle数据库进行增删改查是基础且重要的技能。本教程将围绕这个主题展开,帮助你入门这一领域的知识。 一、Java数据库连接(JDBC) 在Java中与Oracle数据库交互,首先需要...

    oracle安装-卸载-初识oracle-笔记

    通过JDBC(Java Database Connectivity)API,Java程序可以连接到Oracle数据库,执行SQL语句,处理结果集,实现数据的增删改查。 2. 如何在Oracle中操作数据 Oracle提供了多种数据操作手段,包括DML语句、存储过程...

    Oracle的增删改查

    Oracle的增删改查

    oracle增删改查

    在Oracle数据库中,"增删改查"(CRUD:Create, Read, Update, Delete)是基本的操作,对于任何数据库管理员或开发人员来说,掌握这些技能至关重要。下面我们将深入探讨Oracle中的这些操作以及如何创建新的数据库。 ...

    oracle监控某表变动触发器例子(监控增,删,改)

    在本例中,我们将讨论如何创建一个触发器来监控表的增、删、改操作,并将这些变动记录到另一个表中。 首先,让我们看下提供的触发器代码: ```sql create or replace trigger test_trigger before insert or ...

    struts+oracle完成增删改查

    在本文中,我们将探讨如何使用Struts2与Oracle数据库协同工作,实现基本的增删改查功能。 首先,为了连接Oracle数据库,我们需要在项目的`lib`目录下包含两个关键的JAR文件:`class12.jar`和`oracle14.jar`。这些...

    SSH框架实现增删改查,Oracle数据库

    在实现增删改查时,我们需要创建Action类,定义对应的方法处理HTTP请求,并通过返回值控制视图的跳转。 2. **Spring**:Spring框架提供依赖注入(DI)和面向切面编程(AOP),使得组件间的耦合度降低。在SSH中,...

    基于Oracle触发器的数据实时同步的实现——在员工医疗保险系统中.pdf

    使用触发器进行同步复制的原理就是在源数据库建立增、删、改触发器。当源数据库有数据变化,相应触发器就会激活,触发器会将变更的数据保存在一个临时表里。等同步完成确认后,然后提交给数据表,用以实现源数据和...

    oracle数据库中的对表中字段的增删改查

    在Oracle数据库中,对表中字段的增删改查是数据库管理的基础操作,涉及到数据库设计、数据完整性以及日常的数据维护工作。以下将详细介绍这四个基本操作,并结合标签“源码”和“工具”来探讨如何在实践中高效地完成...

    ssm简单的增删改查(初学者)

    这个压缩包文件的内容可能是为了帮助初学者理解如何在SSM框架下实现数据库的增删改查操作,其中Oracle作为后端数据库。 首先,我们来详细了解一下SSM框架的组成部分: 1. Spring:这是一个全面的轻量级应用框架,...

    oracle基础-2

    Oracle支持SQL的大部分语法,包括数据的增(INSERT)、删(DELETE)、改(UPDATE)和查(SELECT)操作,以及事务处理、视图、索引和存储过程。 4. **PL/SQL**:Oracle特有的编程语言,扩展了SQL的功能,允许编写...

    使用jdbc创建和调用触发器实现增删改查

    本教程将详细讲解如何使用JDBC来创建和调用Oracle数据库中的触发器,以实现增(Insert)、删(Delete)、改(Update)和查(Select)操作。 首先,触发器是数据库中的一种特殊类型的存储过程,它在特定的数据库事件...

    Oracle课程设计--图书馆书籍管理系统.docx

    - 编写存储过程处理图书的增删改查操作。 4. **JDBC连接设计**: - 使用JDBC实现Oracle数据库的连接与数据交互。 5. **前端界面设计**: - 使用JSP设计用户交互界面。 #### 四、系统设计与分析 - **系统设计**:...

    orcale增删改查

    在Oracle中,"增删改查"(CRUD:Create, Read, Update, Delete)是最基本的数据操作,对于任何数据库管理员或开发者来说都是必备技能。以下是关于Oracle数据库增删改查的详细知识点: 1. **创建(Create)** - **...

    【java】图书管理系统(struts+oracle)-包含数据库

    开发者可能使用SQL语句进行数据操作,包括增删改查,同时也可能利用Oracle提供的存储过程、触发器等高级特性优化数据库性能。 系统中的"图书"标签表明了这是一个专门针对图书管理的应用,可能包含以下功能: 1. ...

    java-oracle-demo

    2. JDBC代码示例:包括连接、执行SQL(增删改查)、处理结果集和关闭资源的代码片段。 3. Oracle特性的使用:Oracle数据库提供了许多特性,如PL/SQL、存储过程、触发器、游标等,如果项目涉及这些,那么在Java中调...

Global site tag (gtag.js) - Google Analytics