回覆列表
  • 1 # rlyyo22509

    ORACLE資料庫有四種觸發器,分別是DML、Instead-of、DDL、DB觸發器,一般的應用系統中都是用到DML、Instead-of觸發器,DDL、DB兩種觸發器是DBA管理資料庫用得比較多四種觸發器分別有不同的作用一、DML觸發器:當發出UPDATE、INSERT、DELETE命令就可以觸發已定義好的DML觸發器,是最簡單和常用的一種觸發器語法:create or replace trigger trigger_nameafter|before insert|update|deleteon table_namefor each row二、Instead-of觸發器:當向一個由多個表聯接成的檢視作DML操作時,一般情況下是不允許的,這時候就可以用Instead-of觸發器來解決這種問題(在觸發器寫程式碼分別對各表作相應DML操作),語法是這樣的:create or replace trigger trigger_nameinstead of insert|update|deleteon view_namefor each row三、DDL觸發器:當發出CREATE、ALTER、DROP、TRUNCATE命令時會觸發已定義好的DDL觸發器,這種觸發器可以用來監控某個使用者或整個資料庫的所有物件的結構變化語法:create or replace trigger trigger_namebefore|after create|alter|drop|truncateon schema|database例:--禁止用CREATE、ALTER、DROP、TRUNCATE命令操作APPS使用者的物件create or replace trigger apps_no_ddlbefore create or alter or drop or truncateon appsbeginraise_application_error(-20001,"不允許用DDL操作APPS使用者的物件");end;四、DB事件觸發器:當STARTUP、SHUTDOWN、LOGON、LOGOFF資料庫時就會觸發DB事件觸發器,這種觸發器可以用來監控資料庫什麼時候關閉/打,或者使用者的LOGON/LOGOFF資料庫情況語法:create or replace trigger trigger_namebefore|after startup|shutdown|logon|logoffon database例:--記錄資料庫關閉的時間(shutdown型別要用關鍵字before,startup用after)create or replace trigger db_shutdownbefore shutdownon databasebegininsert into test_tbl(log_event) values("db shutdown at "||to_char(sysdate,"yyyy-mm-dd hh24:mi:ss"));commit;end;--記錄使用者LOGON時間(logoff型別要用關鍵字before,logon用after)create or replace trigger user_logon_dbafter logonon databasebegininsert into test_tbl(username,logon_time) values(user,to_char(sysdate,"yyyy-mm-dd hh24:mi:ss"));commit;end;注意:要建立DDL和DB事件這兩種觸發器必須要有DBA的許可權才行

  • 中秋節和大豐收的關聯?
  • 妻子病逝兩個月後有了新女友,岳母怪我無情,我做錯了嗎?