`
Just-Do-it
  • 浏览: 28153 次
  • 性别: 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触发器 实现对某个表的增改删的监控操作,并记录到另一个表中。 代码: 代码如下:create or replace trigger test_trigger before insert or update or delete on test_table for each row declare v_...

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

    使用jdbc创建和调用oracle存储过程实现增删改查

    oracle实验报告

    在块中对数据库查询,增、删、改等对数据的操作是由SQL命令完成的。在PL/SQL块中,可以使用SQL的数据查询命令,数据操纵命令和事务控制命令。可使用全部SQL函数。PL/SQL中的SQL语句,可使用SQL的比较操作等运算符...

    韩顺平oracle学习笔记

    2)我想把emp所有的(增,删,改,查/insert,delete,update,select这四个一起可以用all代替) 操作权限赋给leng grant all on emp to leng;(此时登陆用户为scott) 案例2:这时我想把权限收回来怎么办呢, 这时用...

    plsqldev6(oracle数据库图形化管理工具)

    可以在图形化界面下操纵oracle数据库,如连接,增删改查,触发器,存储过程等,解压后,运行安装文件,安装即可。

    C#窗体程序结合oracle数据库完成的超市管理系统,包含完整项目、注释、报告

    2、oracle数据库部分包含建用户、建表、建序列、建触发器、建包头(对每个表进行增、删、改,管理员登录ID、密码、权限验证)、建包体 3、C#程序部分包括完整项目程序、注释,实现接收数据、在窗体程序中调用包中的...

    oracle课程设计

    学习oracle时,结课做的课程设计; 利C#.net语言VS2010开发工具; 主要是对学生信息和课程信息的操作; 用到了增删改查; 存储过程; 序列 触发器。

    Oracle从基础到熟练(太实用了)

    ①:增/删/改 ②:约束 ③:一些查询 五.锁,表分区 ①:锁的概念 ②:并发问题 ③:锁机制 ④:锁的类型 ②:常见分区 六.数据库对象管理 ①:同义词 ②:序列 ③:视图 ④:索引 七.PL/SQL基础 ①:什么是PL/SQL ...

    课程设计 图书管理系统设计(全)

    sql server +Eclipse 完整代码 图书管理系统设计(课程设计)

    Oracle七天速成笔记

    内容包括:数据库系统基本概念 ,工具,SQL语言,数据查询(包括链接查询和分组统计查询)、数据操作(增删改查)、PL/SQL高级编程(视图,函数,存储过程,序列,索引,触发器,游标),最后介绍了数据库的备份和...

    Oracle笔记

    此笔记为个人通过自学所整理的oracle笔记,希望看到的人有什么建议告诉我,或者共同...里面内容主要包括:oracle增删改查、用户管理、索引、视图、PLSQL、存储过程、函数、游标、触发器等等!每个知识点都有案例讲解!

    Oracle数据库课程设计报告(1).doc

    设计环境 1.Windows7旗舰版32位 2.Microsoft Visual Studio 2005 3.Oracle 11g 第2章 概要设计 2.1系统需求分析 图书管理系统主要是用oracle数据库进行逻辑处理,实现对图书信息的增删改查,以 及出库入库的管理。...

    SSH项目完整示例-北大青鸟期末考试

    该项目使用了Eclipse、tomcat、Oracle开发工具完成了登录、注册、增、删、改、查、分页等相关业务,用到了数据库三张表,一个是用户信息表、一个是图书类型、一个是图书信息,其中由于Oracle没有像MySQL那样的自动的...

    Oracle数据库应用开发——数据操作与PLSQL程序设计实验报告.docx

    1.实现数据的增、删、改及合并操作 2.实现简单查询及高级查询操作 3.实现存储过程的创建和调用方法 4.实现触发器的创建方法

    六天带你玩转MYSQL视频教程

    六天带你玩转MYSQL视频教程 MySQL是一个关系型数据库管理系统,由...共6天课程,知识点涉及mysql的增删改查,左右内连接,子查询,触发器,存储过程,且都深入做了讲解!绝对是各位学好mysql数据库的响当当的好视 频。

    全新JAVAEE大神完美就业实战课程 超150G巨制课程轻松实战JAVAEE课程 就业部分.txt

    增删改查 16-SSM分布式案例-互联网商城(学习13天) day01_电商介绍--互联网术语-SOA-分布式-集群介绍-环境配置-框架搭建 day02_Dubbo介绍_dubbo框架整合_商品列表查询实现_分页_逆向工程 day03_Git day04_门户...

    oracle 学习课件

    包含表的增`删`查`改操作,视图的定义及基本操作,游标,触发器的的定义及使用,基本的数据库理论知识

Global site tag (gtag.js) - Google Analytics