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

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

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

    隨筆-7  評(píng)論-24  文章-102  trackbacks-0


    一、行級(jí)觸發(fā)器
    二、語(yǔ)句級(jí)觸發(fā)器
    三、替換觸發(fā)器
    四、模式級(jí)觸發(fā)器
    五、數(shù)據(jù)庫(kù)級(jí)觸發(fā)器



        1、觸發(fā)器一旦創(chuàng)建就會(huì)立刻生效,有時(shí)可能需要臨時(shí)禁用觸發(fā)器,最常見(jiàn)的原因就是涉及數(shù)據(jù)加載。
    ALTER TRIGGER trigger_name [ENABLE | DISABLE];

        2、Oracle 觸發(fā)器里兩個(gè)重要的內(nèi)存邏輯表 :old 和 :new。:old 表保存的是在DML語(yǔ)句之前的數(shù)據(jù),:new 表保存的是在DML語(yǔ)句創(chuàng)建的數(shù)據(jù)。
            old    new
    INSERT    -    √
    DELETE    √    -
    UPDATE    √    √

        3、在觸發(fā)器語(yǔ)句中不能顯式的提交/回滾事務(wù)。




    一、行級(jí)觸發(fā)器
    行級(jí)觸發(fā)器對(duì) DML 語(yǔ)句影響的每個(gè)行執(zhí)行一次。主要應(yīng)用保持?jǐn)?shù)據(jù)完整性。
    例:兩表級(jí)聯(lián)更新,修改部門(mén)表編號(hào)的同時(shí)也修改員工表的部門(mén)編號(hào):
    CREATE OR REPLACE TRIGGER update_dept
      /* 行級(jí)觸發(fā)器,在更新部門(mén)表操作后觸發(fā) */
      AFTER UPDATE ON deptment
      FOR EACH ROW
    BEGIN
      /* new、old 表的有效利用,把舊表的id列值 更新為 新表的id列值 */
      UPDATE emp SET id=:new.id WHERE id=:old.id;
    END;

    UPDATE deptment SET id='yy' WHERE id='01';

    SELECT * FROM deptment;
    SELECT * FROM emp;


    插入時(shí)利用觸發(fā)器+序列實(shí)現(xiàn)整型字段的自增:
    CREATE OR REPLACE TRIGGER set_no
      BEFORE INSERT ON auto
      FOR EACH ROW
    DECLARE
      sn number(5);
    BEGIN
      /* 觸發(fā)器預(yù)處理序列的值 */
      SELECT myseq.nextval INTO sn FROM dual;
      :NEW.a := sn;
    END;

    INSERT INTO auto VALUES(21,'dtt');
    SELECT * FROM auto;
    /* 插入時(shí)表a列由觸發(fā)器產(chǎn)生的值替代用戶(hù)的輸入 */


    二、語(yǔ)句級(jí)觸發(fā)器
    只與語(yǔ)句有關(guān),與行無(wú)關(guān),不涉及數(shù)據(jù)完整性問(wèn)題。
    例如:利用觸發(fā)器記錄,記錄某表中用戶(hù)的操作(日志處理)。
    CREATE OR REPLACE TRIGGER dm1_aa
      AFTER INSERT OR DELETE OR UPDATE ON aa
    BEGIN
      IF INSERTING THEN
        INSERT INTO mylog VALUES(user,sysdate,'I');
      ELSEIF DELETING THEN
        INSERT INTO mylog VALUES(user,sysdate,'D');
      ELSE
        INSERT INTO mylog VALUES(user,sysdate,'U');
      END IF;
    END;
    ps.能否記錄多個(gè)表?"after insert or delete or update on t1,t2" 出錯(cuò)。



    三、替換觸發(fā)器
    解決Oracle視圖中多表更新的限制,只能在視圖中使用,屬于行級(jí)觸發(fā)器。
    例如:在視圖中插入新的部門(mén)同時(shí)插入其所屬的新員工:
    CREATE OF REPLACE TRIGGER tr_v_e_d
      /* 在視圖上創(chuàng)建替換觸發(fā)器 */
      INSTEAD OF INSERT ON v_emp_dept
      FOR EACH ROW
    BEGIN
      /* 替換觸發(fā)器先插入部門(mén)表的信息,然后再插入其所屬員工表的信息 */
      INSERT INTO deptment VALUES(:new.id, :new.name);
      INSERT INTO emp(eid, ename, sex, id) VALUES(:new.eid, :new.ename, :new.sex, :new.d);
    END;

    INSERT INTO v_emp_dept VALUES('456', 'test', 'f', '33', 'hg');
    SELECT * FROM v_emp_dept;


    四、模式級(jí)觸發(fā)器
    可以在模式對(duì)象的操作上建立的觸發(fā)器,如 CREATE、ALTER、DROP、GRANT、REVOKE 和 TRUNCATE 等DDL語(yǔ)句。
    [BEFORE | AFTER] trigger_event ON [schema.]SCHEMA
    例如:對(duì)用戶(hù)所刪除的所有對(duì)象進(jìn)行日志記錄
    CREATE OR REPLACE TRIGGER log_drop_obj
      AFTER DROP ON SCHEMA
    BEGIN
      /* 記錄操作類(lèi)型、操作對(duì)象、操作時(shí)間 */
      INSERT INTO dropped_obj VALUES(ORA_DICT_OBJ_NAME, ORA_DICT_TYPE, SYSDATE);
    END;

    CREATE TABLE for_drop(x char);
    DROP TABLE for_drop;

    SELECT * FROM dropped_obj;



    五、數(shù)據(jù)庫(kù)級(jí)觸發(fā)器
    可以創(chuàng)建在數(shù)據(jù)庫(kù)事件上的觸發(fā)器,包括啟動(dòng)、關(guān)閉、服務(wù)器錯(cuò)誤、登錄和注銷(xiāo)等。這些事件都是實(shí)例范圍內(nèi)的,不與特定的表或視圖關(guān)聯(lián)。
    CREATE OR REPLACE TRIGGER system_startup
      AFTER STARTUP ON DATABASE
    BEGIN
      ...
    END;




    posted on 2008-10-27 00:16 黃小二 閱讀(1523) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): [DB].Oracle
    主站蜘蛛池模板: 亚洲v国产v天堂a无码久久| 91久久亚洲国产成人精品性色| 国产日韩久久免费影院| 亚洲毛片在线观看| 在线免费观看色片| 一二三四在线观看免费中文在线观看| 久久亚洲国产精品一区二区| 亚洲精品V欧洲精品V日韩精品| 一区二区三区福利视频免费观看| 亚洲日韩AV一区二区三区中文| 久久亚洲AV无码西西人体| 国产乱码免费卡1卡二卡3卡| 视频免费1区二区三区| 亚洲电影在线免费观看| 一本久久综合亚洲鲁鲁五月天| 91福利免费视频| 人妖系列免费网站观看| 亚洲一卡二卡三卡| 亚洲色大成网站WWW久久九九| 好吊妞视频免费视频| 91精品啪在线观看国产线免费| 黄色a三级三级三级免费看| 亚洲精品午夜视频| 亚洲三区在线观看无套内射| 日本xxwwxxww在线视频免费| 120秒男女动态视频免费| 久久国产美女免费观看精品| 亚洲AV无码XXX麻豆艾秋| 亚洲精品在线不卡| 亚洲欧洲精品无码AV| 啊v在线免费观看| 在线观看人成网站深夜免费| 91福利免费体验区观看区| 东方aⅴ免费观看久久av| 成人免费夜片在线观看| 亚洲av永久中文无码精品综合 | 三上悠亚在线观看免费| 最新亚洲人成无码网站| 亚洲日本一线产区和二线| 亚洲国产精品午夜电影| 亚洲专区先锋影音|