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的权限才行
标签:oracle