: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数据库管理中,"增删改查"(CRUD:Create, Read, Update, Delete)是最基础的操作,是数据库管理员和开发人员必备的技能。接下来我们将深入探讨这些概念以及与之相关的游标、包、过程和触发器。 1. **增删...
**WPF入门增删改查**是针对初学者的一个教程,旨在帮助他们快速掌握Windows Presentation Foundation(WPF)框架下的基本数据操作,包括添加、删除、修改和查询数据。WPF是微软.NET Framework的一部分,它提供了丰富...
对于初学者来说,掌握如何使用Java操作Oracle数据库进行增删改查是基础且重要的技能。本教程将围绕这个主题展开,帮助你入门这一领域的知识。 一、Java数据库连接(JDBC) 在Java中与Oracle数据库交互,首先需要...
通过JDBC(Java Database Connectivity)API,Java程序可以连接到Oracle数据库,执行SQL语句,处理结果集,实现数据的增删改查。 2. 如何在Oracle中操作数据 Oracle提供了多种数据操作手段,包括DML语句、存储过程...
Oracle的增删改查
在Oracle数据库中,"增删改查"(CRUD:Create, Read, Update, Delete)是基本的操作,对于任何数据库管理员或开发人员来说,掌握这些技能至关重要。下面我们将深入探讨Oracle中的这些操作以及如何创建新的数据库。 ...
在本例中,我们将讨论如何创建一个触发器来监控表的增、删、改操作,并将这些变动记录到另一个表中。 首先,让我们看下提供的触发器代码: ```sql create or replace trigger test_trigger before insert or ...
在本文中,我们将探讨如何使用Struts2与Oracle数据库协同工作,实现基本的增删改查功能。 首先,为了连接Oracle数据库,我们需要在项目的`lib`目录下包含两个关键的JAR文件:`class12.jar`和`oracle14.jar`。这些...
在实现增删改查时,我们需要创建Action类,定义对应的方法处理HTTP请求,并通过返回值控制视图的跳转。 2. **Spring**:Spring框架提供依赖注入(DI)和面向切面编程(AOP),使得组件间的耦合度降低。在SSH中,...
使用触发器进行同步复制的原理就是在源数据库建立增、删、改触发器。当源数据库有数据变化,相应触发器就会激活,触发器会将变更的数据保存在一个临时表里。等同步完成确认后,然后提交给数据表,用以实现源数据和...
在Oracle数据库中,对表中字段的增删改查是数据库管理的基础操作,涉及到数据库设计、数据完整性以及日常的数据维护工作。以下将详细介绍这四个基本操作,并结合标签“源码”和“工具”来探讨如何在实践中高效地完成...
这个压缩包文件的内容可能是为了帮助初学者理解如何在SSM框架下实现数据库的增删改查操作,其中Oracle作为后端数据库。 首先,我们来详细了解一下SSM框架的组成部分: 1. Spring:这是一个全面的轻量级应用框架,...
Oracle支持SQL的大部分语法,包括数据的增(INSERT)、删(DELETE)、改(UPDATE)和查(SELECT)操作,以及事务处理、视图、索引和存储过程。 4. **PL/SQL**:Oracle特有的编程语言,扩展了SQL的功能,允许编写...
本教程将详细讲解如何使用JDBC来创建和调用Oracle数据库中的触发器,以实现增(Insert)、删(Delete)、改(Update)和查(Select)操作。 首先,触发器是数据库中的一种特殊类型的存储过程,它在特定的数据库事件...
- 编写存储过程处理图书的增删改查操作。 4. **JDBC连接设计**: - 使用JDBC实现Oracle数据库的连接与数据交互。 5. **前端界面设计**: - 使用JSP设计用户交互界面。 #### 四、系统设计与分析 - **系统设计**:...
在Oracle中,"增删改查"(CRUD:Create, Read, Update, Delete)是最基本的数据操作,对于任何数据库管理员或开发者来说都是必备技能。以下是关于Oracle数据库增删改查的详细知识点: 1. **创建(Create)** - **...
开发者可能使用SQL语句进行数据操作,包括增删改查,同时也可能利用Oracle提供的存储过程、触发器等高级特性优化数据库性能。 系统中的"图书"标签表明了这是一个专门针对图书管理的应用,可能包含以下功能: 1. ...
2. JDBC代码示例:包括连接、执行SQL(增删改查)、处理结果集和关闭资源的代码片段。 3. Oracle特性的使用:Oracle数据库提供了许多特性,如PL/SQL、存储过程、触发器、游标等,如果项目涉及这些,那么在Java中调...