<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)  編輯  收藏

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


    網站導航:
     
    主站蜘蛛池模板: 无码国模国产在线观看免费| 无码视频免费一区二三区 | 亚洲一级大黄大色毛片| 黄色网页在线免费观看| 噜噜嘿在线视频免费观看| 亚洲国产成a人v在线观看| 亚洲免费黄色网址| 亚洲国产成人在线视频| 国内精品乱码卡1卡2卡3免费| 中国在线观看免费国语版| 99人中文字幕亚洲区| 99re在线免费视频| 久久亚洲最大成人网4438| 思思99re66在线精品免费观看| 久久激情亚洲精品无码?V| 特级毛片aaaa免费观看| 亚洲精品人成无码中文毛片| 一级毛片aaaaaa视频免费看| 亚洲综合无码AV一区二区| 国产羞羞的视频在线观看免费| 最好免费观看韩国+日本| 亚洲AV永久无码精品放毛片| 亚洲?V无码乱码国产精品| 特色特黄a毛片高清免费观看| 中文字幕免费在线看线人| 亚洲另类古典武侠| 永久免费视频v片www| 国产成人无码精品久久久久免费 | 成人女人A级毛片免费软件| 成人毛片免费视频| 亚洲妇女无套内射精| 亚洲欧洲日本在线| 日韩精品人妻系列无码专区免费 | 免费无遮挡无码永久视频| 久久亚洲精品视频| 国国内清清草原免费视频99| 羞羞漫画在线成人漫画阅读免费| 免费黄色大片网站| 成人片黄网站色大片免费观看cn | 久操视频免费观看| 日韩亚洲人成在线|