<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 小言身寸 閱讀(968) 評論(0)  編輯  收藏

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


    網站導航:
    博客園   IT新聞   Chat2DB   C++博客   博問  
     
    主站蜘蛛池模板: 国产成人99久久亚洲综合精品| 毛片免费视频在线观看| 亚洲人成电影网站国产精品| 亚洲国产成人无码AV在线影院| 美女视频黄的全免费视频网站| 亚洲免费视频观看| 免费在线视频你懂的| 久久精品国产亚洲av麻豆蜜芽| 国产免费毛不卡片| 亚洲国产AV无码一区二区三区| 成人免费无码大片a毛片| 亚洲AV成人无码网站| 日本免费观看网站| 无码毛片一区二区三区视频免费播放| 亚洲高清成人一区二区三区 | 精品久久久久成人码免费动漫| 亚洲性色高清完整版在线观看| 国产四虎免费精品视频| 亚洲乱码在线观看| www.亚洲精品| 中文字幕手机在线免费看电影| 亚洲成A人片在线观看无码不卡| 先锋影音资源片午夜在线观看视频免费播放| 亚洲色欲色欲综合网站| 免费无码一区二区三区| 久久亚洲AV无码精品色午夜| 99热在线免费观看| 久久亚洲国产最新网站| 免费看国产一级特黄aa大片| 两个人看的www免费视频| 中文字幕亚洲综合久久| 成人午夜性A级毛片免费| 一级做a爰片久久免费| 亚洲色欲色欲综合网站| 日韩免费视频观看| 成人爽a毛片免费| 四虎必出精品亚洲高清| 国产亚洲精久久久久久无码77777 国产亚洲精品成人AA片新蒲金 | 亚洲成a人在线看天堂无码| 野花香在线视频免费观看大全| 亚洲av无码国产综合专区 |