`

oracle 触发器 trigger

阅读更多

oracle trigger

 

第一个demo是最简单的trigger的实例,是表触发器

 

-- unit one -- table trigger 最简单的表触发器,在table名为project表insert,update,delete时触发
create or replace trigger project_trigger_name
  after insert or update or delete on project
begin
  if to_char(sysdate, 'DY', 'nls_date_language=AMERICAN') in ('SAT', 'SUM') THEN
    dbms_output.put_line('having break now');
  else
    case
      when not INSERTING then -- other condition like deleting,inserting,updating
        dbms_output.put_line('go to work');
        else
          null;
    end case;
  end if;
end;
drop trigger project_trigger_name;

-- table trigger test
select * from project;
 insert into project(xmid, xmmc, xmbbh) values('test_20120706', '测试项目', 0);
delete from project pro
 where pro.xmid = 'test_20120706'
   and pro.xmbbh = 0;

 

第二个demo,是行触发器(for each),可以用old,new别名取当前操作行的新旧值,行触发器是每行触发一次

         并且添加行触发器的限制条件,如 when (old.xmmc = 'other name')

 

--unit two -- table row trigger 行触发器,
create or replace trigger project_row_trigger_name
  after update of xmmc, xmid on project
  for each row
  when (old.xmmc = 'other name') -- add limited condition for table row trigger
begin
  if inserting then
    dbms_output.put_line('dead');
  else
    dbms_output.put_line('have a life');
  end if;
  if :new.xmmc = :old.xmmc then
    -- use new and old can use value
    dbms_output.put_line('same name update');
  else
    dbms_output.put_line('different name update');
  end if;
end;
 
 -- table row trigger test
 update project set xmmc = 'other name' where xmid = 'test_20120706';
 

第三个demo,是无法运行的trigger,有错,因为在触发器里同时操作了触发条件的表project

 

 -- unit three -- wrong table row trigger test
 create or replace trigger project_trigger_error
   after update of xmmc, xmid on project
   for each row -- decorate each row
   when (old.xmmc = 'other name')
 declare
   maxmc varchar(100);
 begin
   -- operate the table,as update table -- operate conflict
   select max(xmmc)into maxmc from project; 
   dbms_output.put_line(maxmc);
 end;
 

 

第四个trigger 是 oracle特殊的instead of触发器

可以允许复杂视图进行DML操作:

 

 -- unit four -- 'instead of' trigger
 --test for update table and view, complicated view doesn't allow to do something DML operation.
 select * from v_lpromis_yxgl_khxx contract where contract.ID = 'id1';
 update v_lpromis_yxgl_khxx contract set contract.KHQC = '微软' where contract.ID = 'id1';
 
 select * from contract contract;
 update contract contract set contract.khqc = '微软' where contract.ID = 'id1';
 -- use 'instead of' trigger can do DML operation on complicated view
 create or replace trigger tr_instead_of_contract
   instead of update on v_lpromis_yxgl_khxx -- use instead of to replace after or befer
   for each row
 begin
 
   update contract contract
      set contract.khqc = :new.khqc
    where contract.ID = :new.id;
 
 end;
 -- test for update view after create 'instead of' trigger
  update v_lpromis_yxgl_khxx contract set contract.KHQC = '微软' where contract.ID = 'id1';
 

 

-- 目前还缺少系统事务,管理事务的demo,有时间一定补上来

0
0
分享到:
评论

相关推荐

    oracle触发器的创建与使用

    【Oracle触发器的创建与使用】是数据库管理中不可或缺的一部分,尤其在Oracle数据库系统中,触发器扮演着关键角色。触发器是一种存储过程,当特定的数据库事件发生时(如INSERT、UPDATE或DELETE操作),它会被自动...

    oracle 触发器实时调用java 中http接口

    总之,"Oracle触发器实时调用Java中HTTP接口"是一个数据库与应用程序实时通信的示例,涉及Oracle的触发器、存储过程和UTL_HTTP包,以及Java HTTP服务器的设计和实现。这样的设计需要对Oracle PL/SQL和Java网络编程有...

    个人亲测oracle触发器调用java程序

    Oracle触发器调用Java程序 Oracle触发器是Oracle数据库中的一种机制,可以在数据库中执行特定的操作。在本文中,我们将介绍如何使用Oracle触发器调用Java程序。 一、加载Java程序 首先,我们需要将Java程序加载到...

    关于oracle触发器before和after的应用问题

    ### Oracle触发器Before和After应用详解 #### 引言 Oracle数据库系统中,触发器是一项核心功能,用于响应特定事件的自动执行代码块。本文旨在深入解析Oracle触发器中的Before和After两种触发时机,以及它们在...

    Oracle触发器语法详解

    "Oracle触发器语法详解" Oracle 触发器是一种特殊的存储过程,它在插入、删除或修改特定表中的数据时触发执行,它比数据库本身标准的功能有更精细和更复杂的数据控制能力。触发器可以基于数据库的值使用户具有操作...

    Oracle触发器备份表数据

    在深入探讨如何利用Oracle触发器备份表数据之前,我们首先需要理解几个关键概念:Oracle数据库、触发器以及备份策略。Oracle数据库是全球领先的数据库管理系统之一,以其强大的性能、可靠的安全性和丰富的功能受到...

    Oracle触发器 实例讲解

    Oracle 触发器实例讲解 Oracle 触发器是一种特定事件出现的时候,自动执行的代码块。类似于存储过程,但是用户不能直接调用他们。它主要有以下几个功能: 1. 允许/限制对表的修改:触发器可以控制对表的修改操作,...

    oracle触发器调用存储过程

    "Oracle触发器调用存储过程" Oracle触发器可以调用存储过程,以实现业务逻辑的自动化执行。然而,在触发器中调用存储过程时,需要注意事务的隔离性,以避免出现锁定和死锁的问题。Oracle自治事务(Autonomous ...

    利用 Oracle 系统触发器防止误删除表操作

    ### 利用Oracle系统触发器防止误删除表操作 #### 背景介绍 在企业级应用中,数据库的安全性和稳定性至关重要。Oracle作为一款广泛使用的数据库管理系统,提供了丰富的功能来保障数据安全。其中,系统触发器是Oracle...

    oracle触发器功能介绍

    Oracle触发器是数据库对象之一,它在特定的数据库操作(如INSERT、UPDATE或DELETE)发生时自动执行。触发器主要用于实现复杂的业务规则和数据验证,它们可以扩展SQL的功能,允许在数据修改前后执行一系列的动作。...

    oracle触发器(trigger).pdf

    Oracle触发器(Trigger)是一种特殊的存储过程,它的执行并非由程序调用或手动启动,而是由特定的数据库事件触发,比如对表进行INSERT、DELETE或UPDATE操作时自动激活执行。触发器广泛应用于增强数据完整性约束和...

    oracle触发器语法要点

    ### Oracle触发器语法要点 #### 一、触发器概述 Oracle触发器是一种存储过程,它在特定的数据库事件(如INSERT、UPDATE或DELETE)发生时自动执行。触发器可以用于实施复杂的业务规则、数据完整性检查或者自动生成...

    数据库oracle触发器课件

    触发器(Trigger)是Oracle数据库中一种预定义的PL/SQL程序,它会在特定的数据库事件(如INSERT、UPDATE、DELETE)发生时自动执行。触发器主要用于实现业务规则、数据完整性检查和审计等需求。创建DML触发器时,...

    Oracle触发器里调用Java程序

    本篇文章将探讨如何在Oracle触发器中调用Java程序,以扩展数据库的功能并利用Java丰富的库资源。 首先,我们需要了解Oracle的PL/SQL(Procedural Language/Structured Query Language)语言,它是Oracle数据库内置...

    oracle触发器与存储过程高级编程

    本节将深入探讨“Oracle触发器与存储过程高级编程”的相关知识。 **触发器(Triggers)** 触发器是一种数据库对象,它在特定的数据库事件(如INSERT、UPDATE或DELETE)发生时自动执行。通过定义触发器,我们可以...

    oracle触发器

    ### Oracle触发器详解 在Oracle数据库管理中,触发器是一种非常强大的工具,它允许你在特定的数据库事件(如数据插入、更新或删除)发生时自动执行预定义的SQL语句或PL/SQL代码块。这使得数据库能够在无需外部程序...

Global site tag (gtag.js) - Google Analytics