精华内容
下载资源
问答
  • oracle insert数据成功之后调用触发器触发器调用存储过程,存储实时调用java http
  • 本文实例讲述了Oracle触发器用法。分享给大家供大家参考,具体如下: 一、触发器简介 触发器的定义就是说某个条件成立的时候,触发器里面所定义的语句就会被自动的执行。因此触发器不需要人为的去调用,也不能调用。...
  • 出现原因,是因为在更新的的表和读取的表是同一个表。 CREATE or replace TRIGGER T_userupdateT BEFORE update ON T_user REFERENCING OLD AS old NEW AS N_ROW FOR EACH ROW DECLARE U_xtfidemp1 varchar(36);...
  • Oracle触发器实例代码

    2020-09-09 17:48:10
    Oracle触发器,用于选单后修改选单的表的触发动作。接下来通过本文给大家分享Oracle触发器实例代码,需要的的朋友参考下吧
  • 1.输出普通参数 dbms_output.put_line('参数名'||paramName); 2.输出时间类参数 注意是TO_CHAR dbms_output.put_line('开始时间'||TO_CHAR(startDATE, 'DD-MON-YYYY HH24:MI:SS'));

    1.输出普通参数

    dbms_output.put_line('参数名'||paramName);
    

    2.输出时间类参数
    注意是TO_CHAR

    dbms_output.put_line('开始时间'||TO_CHAR(startDATE, 'DD-MON-YYYY HH24:MI:SS'));
    
    展开全文
  • 基于Oracle触发器的数据实时同步的实现——在员工医疗保险系统
  • oracle触发器调用存储过程,最简单的例子适用于初学者
  • 通常情况下,Oracle数据库禁止在行级...当在行级触发器中使用查询语句时,Oracle数据库会抛出ORA-04091异常。 Oracle官方文档中对ORA-04091异常的说明如下: ORA-04091: table string.string is mutating, trigge...

    通常情况下,Oracle数据库禁止在行级触发器或行级触发器所调用的子程序中使用查询语句。但是,面对复杂的业务逻辑,不可避免的要使用查询语句。

    当在行级触发器中使用查询语句时,Oracle数据库会抛出ORA-04091异常。

    Oracle官方文档中对ORA-04091异常的说明如下:

    ORA-04091: table string.string is mutating, trigger/function may not see it

    Cause: A trigger (or a user defined plsql function that is referenced in this statement) attempted to look at (or modify) a table that was in the middle of being modified by the statement which fired it.

    如果必须要在Trigger中使用查询语句,Oracle也提供了一种途径。

    下面以简单的代码为例做说明:

     1 CREATE OR REPLACE TRIGGER TRG_TEST
     2     BEFORE INSERT OR UPDATE OR DELETE ON SCOTT.EMP
     3     FOR EACH ROW -- 行级触发器
     4 DECLARE
     5     PRAGMA AUTONOMOUS_TRANSACTION; -- 解决行级触发器不能使用查询语句的关键
     6 
     7     V_COUNT PLS_INTEGER;
     8 BEGIN
     9     SELECT COUNT(*) INTO V_COUNT FROM SCOTT.EMP;
    10     IF V_COUNT > 0 THEN
    11         -- DO SOMETHING
    12         NULL;
    13     END IF;
    14 
    15     COMMIT; -- 提交
    16 EXCEPTION
    17     WHEN OTHERS THEN
    18         ROLLBACK; -- 回滚
    19 END TRG_TEST;

    如上面代码所示:在定义Trigger时,声明其事务的提交模式为PRAGMA AUTONOMOUS_TRANSACTION

    但是,用户必须自己提交或回滚事务。

    对于PRAGMA AUTONOMOUS_TRANSACTION的说明请参考Oracle官方文档

    转载于:https://www.cnblogs.com/yitouniu/p/11470665.html

    展开全文
  • 1.通过行触发器备份表数据  – 创建备份表,首次将数据全部备份 ...  – 创建行触发器:当emp2有数据被删除时,将数据备份到emp2_bak表,并记录删除时间  create or replace trigger autoBakEmp2  before
  • 出库入库这样的功能在许多系统中都有。可能叫法不一。有的可能是数量,有的可能是金额。我这里以金额为例实现出库入库也有许多方法,一种是用语言实现,一种是用触发器实现。它们各有千秋。
  • Oracle触发器拼接字段

    2020-02-20 14:14:44
    1. 环境准备 1.1 Sql语句 CREATE TABLE STUDENT( ID int, NAME varchar2(20), COURSE varchar2(20), SCORE int, LEV varchar2(3), ...2. Oracle触发器 2.1 基本结构 CREATE [OR REPLACE]...

    1. 环境准备

    1.1 Sql语句

    CREATE TABLE STUDENT(
      ID int,
      NAME varchar2(20),
      COURSE varchar2(20),
      SCORE int,
      LEV varchar2(3),
      SEARCH varchar2(100)
    );

    2. Oracle触发器

    2.1 基本结构

    CREATE [OR REPLACE] TRIGGER trigger_name  
     {BEFORE | AFTER }  
     {INSERT | DELETE | UPDATE [OF column [, column …]]}  
     [OR {INSERT | DELETE | UPDATE [OF column [, column …]]}...]  
     ON [schema.]table_name | [schema.]view_name   
     [REFERENCING {OLD [AS] old | NEW [AS] new| PARENT as parent}]  
     [FOR EACH ROW ]  
     [WHEN condition]  

    2.2 结构简化

    create or replace trigger 触发器名  
    after update of 字段  
    on 表  
    for each row  
    when (new.字段=条件) 

    3. 创建触发器

    CREATE OR REPLACE TRIGGER UPDATE_STUDENT
    before update or insert on STUDENT
    for each row                                                                                                     
    begin
        if updating('SEARCH') then --如果更新的字段包括Search不更新
          return;
        end if;
        select :new.ID || ',' ||  :new.NAME || ',' ||  :new.COURSE || ',' ||  :new.SCORE || ',' ||  :new.LEV into :new.SEARCH from dual;
    end;  

    4. 试验触发器是否成功

    insert into student(ID,NAME,COURSE,SCORE,LEV) VALUES(1,'张三','数学',98,'优');
    commit;

    展开全文
  • 有时候我们可能有这种需求,在table上建立一个触发器,然后当在table中更新A和B字段时,c字段变为A+B,这就形成了在触发器中修改基表数据的情况. 创建一个测试表: -- Create table create table TEST ( A NUMBER...

    有时候我们可能有这种需求,在table上建立一个触发器,然后当在table中更新A和B字段时,c字段变为A+B,这就形成了在触发器中修改基表数据的情况.

    创建一个测试表:

    复制代码

    -- Create table
    create table TEST
    (
      A  NUMBER,
      B  NUMBER,
      C  NUMBER,
      ID NUMBER not null
    )
    
    -- Create/Recreate primary, unique and foreign key constraints 
    alter table TEST
      add constraint TEST_PRIMARY_ID primary key (ID)

    复制代码

     

    看一看下面这个触发器的写法:

    复制代码

    create or replace trigger test_trigger
      after insert or update on test  
      for each row
    declare
      -- local variables here
    begin
      update test set c = :new.a+:new.b where id = :new.id ;
    end test_trigger;

    复制代码


    我们的目的是在插入或者更新的时候,让c字段的值等于字段a+字段b的值,我们执行以下sql语句:

    insert into test(id,a,b) values(1,10,20);

     

    我们期望会看到c的值自动变成a+b=30,但是我们却发现如下错误:

    从错误提示来看,是说表已经发生了改变,触发器不能读它,因为我们出发器的触发时机设置的是after,也就是在一条记录插入完成之后再进行更新操作,但是这时候表已经发生改变,触发器不能读这个表了.那我们将触发器的触发时间设置before是不是就能达到目的呢,将触发器修改一下:

    复制代码

    create or replace trigger test_trigger
      before insert or update on test  
      for each row
    declare
      -- local variables here
    begin
      update test set c = :new.a+:new.b where id = :new.id ;
    end test_trigger;

    复制代码

     

    编译一下触发器,再次执行上面的插入sql语句,这时候我们发现记录被成功插入了,没有报错,这是不是以为着我们就成功了呢,别急,我们先查询一下test表:

    可以看到,记录虽然成功插入了,但是并没有达到我们预期的目的,也就是c的值变为30.这是为什么呢?是我们的触发器没有执行吗?其实这里触发器确实执行了,但是因为触发器执行的时机是before,也就是在插入记录以前先执行了更新操作,但是这时候表里面实际上还没有id=:new.id(这时等于1)的记录,所以这个更新操作影响的行数为零,接着才执行了插入操作.

    那如何才能达到目的呢?其实在触发器中,我们可以直接访问到当前这条记录,修改一下触发器:

    复制代码

    create or replace trigger test_trigger
      before insert or update on test  
      for each row
    declare
      -- local variables here
    begin
      :new.c := :new.a + :new.b;
    end test_trigger;

    复制代码

    可以使用:new来访问触发器执行时,当前行的值,这时候再执行性一下插入操作:

    可以看到,记录成功插入,并且c字段也变成了我们所预期的值.

    这样我们就达到了在触发器中更改基表的目的,不过这个方法也有局限性:

    1.触发器的执行时机只能设置before,如果设置after,编译将不能通过.

    2.只能对当前被插入或者更新的记录进行操作,无法对其他的记录进行操作.

    转自:https://www.cnblogs.com/xiaobaihome/archive/2012/03/14/2396538.html

    展开全文
  • Oracle触发器

    2018-08-12 10:14:31
    Oracle触发器的一些代码案例,详细解说了触发器的语言规范与应用
  • 请求表操作表:用户信息表(person_tab)  种类:Before delete  功能描述:关联删除所有外键指向该表的数据行,删除与人员关连的数据行  操作表:  日历提示信息表(calendarNote_tab)  公文基础信息表...
  • 触发器if else写法 oracle触发器

    千次阅读 2019-06-10 09:19:32
    故事是这样的,这边有个项目是我们的项目经理写的项目,但是有些功能还是需要外包去做,然后外包做好了,却对项目经理的数据库不了解,然后就想了下,让我去做触发器来适配他们,让外包插入数据到他们的表的时候触发事件...
  • oracle 异常及触发器;异常处理;e_toomanystudents的作用域和本块的其他变量相同 预定义型异常情态 预定义型异常情态可以直接使用没有必要声明 Invalid_cursor:当执行非法的游标操作时会引发这个错误如试图关闭已关闭...
  • 触发器中加入:pragma autonomous_transaction;(在DECLARE后面) 表示是自由事务处理。 如: CREATE OR REPLACE TRIGGER TRIG_INTEGRITY_T_CBQK before insert or update on xd_gqzr_jcsj for each row ...
  • ORACLE触发器 案例

    2020-11-30 16:59:04
    Oracle触发器在MIS 开发的应用 周海涛 吴良刚 摘要:本文介绍了oracle触发器的概念和类型,总结了oracle触发器在开发MIS的应用,并提供了实例以供参考. 关键词:MIS 、触发器 oracle 1.引言 本人在做一个大型的MIS...
  • Oracle 触发器中修改字段值

    千次阅读 2016-12-28 16:32:03
    需求是这样的:根据一个表的某些被修改的字段修改其它字段,用触发器实现。示例代码如下:CREATE TABLE t ( ID INT, update_time DATE, other_col VARCHAR2(20) ); CREATE OR REPLACE TRIGGER trigger_on_t1_...
  • oracle触发器使用总结

    千次阅读 2018-12-05 12:24:51
    oracle触发器使用总结 1.说明 1)触发器是一种特殊的存储过程,触发器一般由事件触发并且不能接受参数,存储器由语句块去调用 2)触发器分类:  1.DML触发器: 创建在表上,由DML事件引发  2.instead of...
  • oracle触发器嵌套if

    2020-04-14 15:34:14
    遇到一个需求就是:要监控某个表的数据变化,这个假设为表一,表一的某些字段如果发生了改变,就要将这个改变的值和字段的信息记录进表二,然后就使用触发器的形式进行这个需求的实现 CREATE OR REPLACE TRIGGER ...
  • 详细整理了oracle中before和after的使用问题
  • Oracle触发器和事务

    千次阅读 2018-11-20 14:23:46
    oracle触发器和事务 2015年11月24日 14:16:43 it_taojingzhan 阅读数:320 编写触发器时,需要注意以下几点: l 触发器不接受参数。 l 一个表上最多可有12个触发器,但同一时间、同一事件、同一类型的触发器...
  • Oracle 触发器中使用游标

    千次阅读 2014-12-26 11:02:49
    为表ANNOUNCEMENT创建插入触发器,原先设计的库是先将选择的所有人员插入到ANNOUNCEMENTORG表,然后在ANNOUNCEMENT表插入其他相关信息。表ANNOUNCEMENTORG的ANNOUNCEMENTCODE和ANNOUNCEMENT的CODE关联。...
  • oracle触发器语法要点

    2017-06-09 16:06:19
    oracle触发器语法要点
  • 一、Oracle触发器的一个简单介绍: 触发器:是特定事件出现的时候,自动执行的代码块。类似于存储过程,但是用户不能直接调用他们。 功 能: 1.允许、限制对表的修改 2.自动生成派生列,比如自增字段 3.强制...
  • Oracle触发器修改自身表

    热门讨论 2011-04-22 22:02:56
    1、行级触发器不支持 ...所以想要触发器对自身表数据做修该,则用行级触发器得到 :new 和 :old对象的相关数据,然后将这样的数据保存到 package,然后在语句级触发期中调用 package包中保存的数据,进行更新操作

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 64,627
精华内容 25,850
关键字:

oracle触发器中如何输出