关于触发器、存储过程和DBlink的综合运用
需求描述:

需要在两个不同oracl数据库实例中进行数据逻辑处理。如果A实例中的表有新数据插入或者数据更新,那么在B实例中执行与之相关的存储过程。

先假设A数据用户中表TEST有变动,那么触发器触发调用实例B中的存储过程改写TEST_LOG表
A中操作如下:
1.建表

-------------------------------------------------------------------

create table TEST
(
  T_ID   NUMBER(4),
  T_NAME VARCHAR2(20),

  T_AGE  NUMBER(2),
  T_SEX  CHAR(1)
);

-------------------------------------------------------------------

2.建立与B对应的DBLINK

-------------------------------------------------------------------

create database link INFOSYSTEM
   connect to infosystem identified by
infosystem
   using '(DESCRIPTION =
     (ADDRESS_LIST =
      
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.249)(PORT = 1521))
     )

     (CONNECT_DATA =
       (SERVICE_NAME = ORCL)
     )
   )';

------------------------------------------------------------------

3.建立触发器

------------------------------------------------------------------

CREATE OR REPLACE TRIGGER test_trigger
AFTER DELETE OR INSERT OR UPDATE
ON test
DECLARE
v_type VARCHAR2(15);
BEGIN
IF INSERTING THEN 

  v_type := 'INSERT';
  DBMS_OUTPUT.PUT_LINE('记录已经成功插入,并已记录到日志');

ELSIF UPDATING THEN 
  v_type := 'UPDATE';
 
DBMS_OUTPUT.PUT_LINE('记录已经成功更新,并已记录到日志');
ELSIF DELETING THEN
  v_type
:= 'DELETE';
  DBMS_OUTPUT.PUT_LINE('记录已经成功删除,并已记录到日志');
END IF;
 
my_pro@infosystem(v_type);
END;

----------------------------------------------------------------

B中操作如下:
1.建表

----------------------------------------------------------------
create
table TEST_LOG
(
  L_USER VARCHAR2(15),
  L_TYPE VARCHAR2(15),
 
L_DATE VARCHAR2(30)
);

----------------------------------------------------------------
2.建存储过程

注意一定要加上PRAGMA AUTONOMOUS_TRANSACTION;让这个存储过程有自治的事务控制,不然会影响A的事务控制

----------------------------------------------------------------
create
or replace procedure my_pro(v_type varchar2)
as
PRAGMA
AUTONOMOUS_TRANSACTION;
begin
INSERT INTO test_log VALUES(user,v_type,

        TO_CHAR(sysdate,'yyyy-mm-dd hh24:mi:ss'));
commit;
end;

---------------------------------------------------------------

最后我们在A中输入以下测试语句:
INSERT INTO test VALUES(101,'zhao',22,'M');

UPDATE test SET t_age = 30 WHERE t_id = 101;
DELETE test WHERE t_id =
101;

SELECT * FROM test;
SELECT * FROM test_log@INFOSYSTEM;

结果可能如下:
TEST无数据
TEST_LOG数据
1 AAAPF0AALAAABq8AAA
INFOSYSTEM DELETE 2009-06-12 13:45:30
2 AAAPF0AALAAABq8AAL INFOSYSTEM INSERT
2009-06-12 13:45:30
3 AAAPF0AALAAABq8AAM INFOSYSTEM UPDATE 2009-06-12
13:45:30

关于触发器、存储过程和DBlink的综合运用 (转)的更多相关文章

  1. Mysql 视图 游标 触发器 存储过程 事务

    Mysql 视图 触发器 存储过程 游标 游标是从数据表中提取出来的数据,以临时表的形式存放在内存中,在游标中有一个数据指针,在初始状态下指向的是首记录,利用fetch语句可以移动该指针,从而对游标中 ...

  2. day40 mycql 视图,触发器,存储过程,函数

    视图,触发器,存储过程,自定义函数 -- 回顾 1.mysql 约束 1.非空 not null 2. 主键约束 primary key 3. 唯一约束 unique 4. 外键约束 foreign ...

  3. mysql 视图 触发器 存储过程 函数事务 索引

    mysql 视图 触发器 存储过程 函数事务 索引 视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,并可以将其当 ...

  4. Mysql 视图,触发器,存储过程,函数,事务

    视图 视图虚拟表,是一个我们真实查询结果表,我们希望将某次查询出来的结果作为单独的一个表,就叫视图,无法对图字段内容进行增删改. --格式: CREATE VIEW 视图名字 AS 操作; --比如: ...

  5. SQL查数据库有哪些触发器,存储过程...

    select name from sysobjects where xtype='TR' --所有触发器select name from sysobjects where xtype='P' --所有 ...

  6. Mysql学习---视图/触发器/存储过程/函数/执行计划/sql优化 180101

    视图 视图: 视图是一个虚拟表(非真实存在),动态获取数据,仅仅能做查询操作 本质:[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,并可以将其当作表来使用.由 ...

  7. mysql 触发器 存储过程 java调用

    触发器和存储过程是为了提高SQL的运行效率. SQL语句先编译.后执行,而触发器与存储过程都会提前预编译完成,且只编译一次,供反复调用. 随着时代的进步,硬件与带宽的提升,触发器和存储过程提升效率并不 ...

  8. MySQL 索引 视图 触发器 存储过程 函数

    1.索引 索引相当于图书的目录,可以帮助用户快速的找到需要的内容. 数据库利用各种各样的快速定位技术,能够大大提高查询效率.特别是当数据量非常大,查询涉及多个表时,使用索引往往能使查询速度加快成千上万 ...

  9. SqlServer try catch 捕获触发器\存储过程异常,结合 transaction 事务

    SoEasy~,贴上代码看所有 ALTER trigger [dbo].[tgr_SG_Gathering_update] on [dbo].[SG_Gathering] for update --更 ...

随机推荐

  1. (转载)Unity3d摄像机Camera参数详解

    1. Clear Flags:清除标记.决定屏幕的哪部分将被清除.一般用户使用对台摄像机来描绘不同游戏对象的情况,有3中模式选择: Skybox:天空盒.默认模式.在屏幕中的空白部分将显示当前摄像机的 ...

  2. 高性能图文混排框架,构架顺滑的iOS应用-b

    About GallopGallop是一个功能强大.性能优秀的图文混排框架. Features主要用于解决以下需求: 滚动列表的性能优化.Gallop使用异步绘制.视图层级合并.观察mainRunlo ...

  3. Delphi XE5 android 获取电池电量

    uses AndroidAPI.JNI.GraphicsContentViewText, AndroidAPI.JNI.JavaTypes, AndroidAPI.JNI.OS; function B ...

  4. Linux find example

    find | xargs echo >> x1 find -exec echo {} \; >> x2 1.查找/var目录下属主为root并且属组为mail的所有文件:fin ...

  5. 5.5 准备创建bean

    5.5  准备创建bean 我们不可能指望在一个函数中完成一个复杂的逻辑,而且我们跟踪了这么多Spring代码,经历了这么多函数,或多或少也发现了一些规律:一个真正干活的函数其实是以do开头的,比如d ...

  6. 使用Redis构建简单的ORM

    Reids相关的资料引用 http://www.tuicool.com/articles/bURJRj [Reids各种数据类型的应用场景] https://github.com/antirez/re ...

  7. 【数学/扩展欧几里得/Lucas定理】BZOJ 1951 :[Sdoi 2010]古代猪文

    Description “在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心……” ——选自猪王国民歌 很久很久以前,在山的那边 ...

  8. [转载].Net中如何操作IIS(源代码)

    ///***********************************************************///************** IIS控制管理类 1.0 Beta ** ...

  9. js中replace的正则替换

    temp: video":"\t<ul class=\"g-list tabview-cont on\">\t\r\n\t\t<li clas ...

  10. PHP 怎么随机获取数组里面的值

    注意array_rand随机返回的是KEY值的集合 <?php srand((float) microtime() * 10000000); $input = array("Neo&q ...