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

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

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

    Decode360's Blog

    業(yè)精于勤而荒于嬉 QQ:150355677 MSN:decode360@hotmail.com

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 ::  :: 管理 ::
      302 隨筆 :: 26 文章 :: 82 評論 :: 0 Trackbacks
    替代觸發(fā)器
    ?
    ??? 替代觸發(fā)器的意義在于:如果觸發(fā)了觸發(fā)器,則原先的DML操作不再進(jìn)行,而是執(zhí)行觸發(fā)器中的操作。
    ?
    ??? 替代觸發(fā)器最常見的應(yīng)用是在最view的操作時(shí)。由于不能對view直接進(jìn)行操作,所以可以用替代觸發(fā)器來替代。
    ?
    ??? 1、創(chuàng)建一個(gè)簡單的視圖:
    ?

    ??? create view v_test as

    ???? ? select t11.a a1,t11.b b1,t22.a a2,t22.b b2

    ??????? from t11 ,t22

    ???? ? where t11.a = t22.a;

    ?
    ??? 2、創(chuàng)建替代觸發(fā)器
    ?

    ??? create or replace trigger view_trigger

    ???? ? instead of?--等同于after

    ???? ? update

    ???? ? on v_test

    ???? ? for each row

    ??? begin

    ???? ? update t11 set b=:new.b1 where a=:new.a1;

    ??? end ;

    ?
    ??? 注:具體邏輯不是很正確,只為舉例方便。
    ?
    ??? 3、不能修改的view類別:
    ?
    ??? * 含有表連接
    ??? * 有集合運(yùn)算符(union、minus、intersect等)
    ??? * 含有集合函數(shù)(sum、count等)
    ??? * group by connect by start with字句
    ??? * 包含distinct運(yùn)算符
    ?
    ?
    系統(tǒng)事件觸發(fā)器
    ?
    ??? 1、系統(tǒng)事件觸發(fā)器包括:
    ?
    ??? * 數(shù)據(jù)庫的啟動(dòng)(STARTUP)
    ??? * 數(shù)據(jù)庫的關(guān)閉(SHUTDOWN)
    ??? * 數(shù)據(jù)庫服務(wù)器出錯(cuò)(SERVERERROR)
    ?
    ??? 注:STARTUP和SERVERERROR只能使用BEFORE類型,只有SHUTDOWN才能用AFTER
    ?
    ??? 2、創(chuàng)建語法:
    ?
    ??? CREATE OR REPALCE TRIGGER trigger_name
    ??? { BEFORE | AFTER }
    ??? { DATABASE _EVENT_LIST }
    ??? ON [ DATABASE | SCHEMA ]
    ??? trigger body;
    ?
    ??? 注:SERVERERROR可以與SCHEMA關(guān)聯(lián),表示在該模式上發(fā)生錯(cuò)誤時(shí)才觸發(fā)。
    ?
    ??? 3、舉例:
    ?

    ??? create or replace teigger dbstart_trigger

    ???? ? after startup

    ???? ? on database

    ??? begin

    ???? ? insert into t1_log values ( sysdate );

    ??? end ;

    ?
    ?
    用戶事件觸發(fā)器
    ?
    ??? 1、包括以下幾類:
    ?
    ??? * CREATE
    ??? * ALTER
    ??? * DROP
    ??? * ANALYZE
    ??? * ASSOCIATE STATISTICS
    ??? * DISASSOCIATE STATISTICS
    ??? * AUDIT
    ??? * NOTAUDIT
    ??? * COMMENT
    ??? * GRANT
    ??? * REVOKE
    ??? * RENAME
    ??? * TRUNCATE
    ??? * LOGON? --只能用AFTER
    ??? * LOGOFF --只能用BEFORE
    ?
    ??? 2、舉例:
    ?

    ??? create or replace teigger logon_trigger

    ???? ? after logon

    ???? ? on schema??--若用on database則任何登陸均會(huì)觸發(fā)

    ??? begin

    ???? ? insert into t1_log values (user, sysdate );

    ??? end ;

    ?
    ?
    ALTER語句
    ?
    ??? 1、重新編譯
    ?
    ??? ALTER TRIGGER [schema.] trigger_name COMPILE;
    ?
    ??? 作用:如果觸發(fā)器調(diào)用了函數(shù)或過程,當(dāng)函數(shù)或過程被刪除或修改后,觸發(fā)器被標(biāo)記為INVALID,必須重新編譯。
    ?
    ??? 2、啟用/禁用觸發(fā)器
    ?
    ??? ALTER TRIGGER [schema.] trigger_name DISABLE | ENABLE;
    ?
    ??? 作用:DBA要插入大量數(shù)據(jù)時(shí),確定數(shù)據(jù)的正確性,禁用觸發(fā)器后可節(jié)省大量時(shí)間。
    ?
    ??? 3、啟用/禁用某個(gè)表的所有觸發(fā)器
    ?
    ??? ALTER TABLE table_name DISABLE | ENABLE ALL TRIGGERS; --注意S
    ?
    ?
    觸發(fā)器數(shù)據(jù)字典
    ?
    ?
    ??? 使用USER_TRIGGERS、ALL_TRIGGERS、DBA_TRIGGERS查看觸發(fā)器信息
    ?

    SQL > desc user_triggers

    ?

    Name ????????????? Type ?????????? Nullable Default Comments??????????????? ????????????????????????????????????????????????????

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

    TRIGGER_NAME????? VARCHAR2 ( 30 )?? Y??????????????? Name of the trigger ????????????????????????????????????????????????????????

    TRIGGER_TYPE????? VARCHAR2 ( 16 )?? Y??????????????? Type of the trigger ( when it fires) - BEFORE / AFTER and STATEMENT / ROW ???????

    TRIGGERING_EVENT? VARCHAR2 ( 227 )? Y??????????????? Statement that will fire the trigger - INSERT , UPDATE and / or DELETE ????????

    TABLE_OWNER?????? VARCHAR2 ( 30 )?? Y??????????????? Owner of the table that this trigger is associated with ????????????????????

    BASE_OBJECT_TYPE? VARCHAR2 ( 16 )?? Y?????????????????????????????????????? ?????????????????????????????????????????????????????

    TABLE_NAME??????? VARCHAR2 ( 30 )?? Y??????????????? Name of the table that this trigger is associated with ?????????????????????

    COLUMN_NAME?????? VARCHAR2 ( 4000 ) Y??????????????? The name of the column on which the trigger is defined over????????????????

    REFERENCING_NAMES VARCHAR2 ( 128 )? Y??????????????? Names used for referencing to OLD , NEW and PARENT values within the trigger

    WHEN_CLAUSE?????? VARCHAR2 ( 4000 ) Y??????????????? WHEN clause must evaluate to true in order for triggering body to execute ??

    STATUS??????????? VARCHAR2 ( 8 )??? Y??????????????? If DISABLED then trigger will not fire?????????????????????????????????????

    DESCRIPTION ?????? VARCHAR2 ( 4000 ) Y??????????????? Trigger description , useful for re-creating trigger creation statement ?????

    ACTION_TYPE?????? VARCHAR2 ( 11 )?? Y???????????????????????????????????????????????????????????????????????????????????????????

    TRIGGER_BODY????? LONG ?????????? Y??????????????? Action taken by this trigger when it fires?????????????????????????????????

    ?
    ?
    ?
    ?
    ?




    -The End-

    posted on 2008-10-22 20:37 decode360-3 閱讀(252) 評論(0)  編輯  收藏 所屬分類: Oracle
    主站蜘蛛池模板: 57pao一国产成视频永久免费| 五月天婷婷免费视频| 久久er国产精品免费观看2| 免费人成网站在线播放| 中文无码亚洲精品字幕| 日韩视频在线精品视频免费观看| 久久亚洲精品成人av无码网站| 国产成人免费视频| 亚洲视频一区在线观看| 麻豆最新国产剧情AV原创免费| 亚洲理论片在线中文字幕| 国产成人午夜精品免费视频| 亚洲人成在线播放| 精品国产免费观看久久久| 日韩国产欧美亚洲v片| 亚洲一级片免费看| 免费网站观看WWW在线观看| 久久精品国产亚洲av麻豆小说| 亚色九九九全国免费视频| 亚洲AV无码一区二区三区牲色| 免费观看亚洲人成网站| 一出一进一爽一粗一大视频免费的 | 最近免费中文字幕MV在线视频3| 国产成人精品日本亚洲专区61| 丁香花在线视频观看免费| 亚洲经典在线中文字幕| 成年女人午夜毛片免费看| 免费人人潮人人爽一区二区| 亚洲人精品午夜射精日韩| 5555在线播放免费播放| 亚洲国产成人久久精品软件| 国产亚洲精aa成人网站| 特级无码毛片免费视频尤物| 亚洲字幕AV一区二区三区四区| 久久久久亚洲av成人无码电影| 三年片在线观看免费大全电影| 亚洲综合av一区二区三区不卡 | 亚洲成人高清在线观看| 亚洲国产成人久久精品99| 99久久人妻精品免费二区| 亚洲AV无码成人精品区日韩 |