<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-94  評論-56  文章-3  trackbacks-0
    關于觸發器、存儲過程和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
    posted on 2010-02-04 11:57 小言身寸 閱讀(964) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 免费看一级高潮毛片| 久久精品国产亚洲AV麻豆网站| 亚洲麻豆精品果冻传媒| 亚洲最大的成网4438| 亚洲国产AV无码一区二区三区| 成人无码a级毛片免费| 国产免费看插插插视频| 亚洲中文字幕久久久一区| h视频在线观看免费网站| 亚洲精品福利视频| a级在线免费观看| 亚洲综合伊人久久综合| 亚洲熟妇久久精品| 免费精品人在线二线三线区别| 亚洲国产成人精品激情| 曰皮全部过程视频免费国产30分钟| 亚洲av无码成人精品区一本二本| 亚洲精品97久久中文字幕无码| 久久久久久噜噜精品免费直播| 亚洲阿v天堂在线| 免费看成人AA片无码视频羞羞网| 亚洲日韩乱码中文字幕| 亚洲精品成人在线| 久久午夜夜伦鲁鲁片无码免费| 亚洲午夜国产精品| 国产精品免费播放| 黄色网页在线免费观看| 久久av无码专区亚洲av桃花岛| 青苹果乐园免费高清在线| 免费播放美女一级毛片| 亚洲AV综合色区无码一区爱AV| 91精品免费在线观看| 亚洲av纯肉无码精品动漫| 一本久久a久久精品亚洲| 久久国内免费视频| 久青草国产免费观看| 亚洲欧洲日产国产最新| 亚洲高清无码在线观看| 57pao一国产成永久免费 | 久久久亚洲精品国产| 成人免费福利电影|