是在进行数据库系统事件时进行触发,主要包括DDL语句,其语法格式如下:
create or replace trigger [schema.]trigger_name {before | after} {DDL_EVENT_LIST | database_event_list} on {database | [schema.]SCHEMA} [when_clause] trigger_body |
其中:
DDL_EVENT_LIST表示一个或多个DDL事件,多个事件可以用or分开;database_event_list表示一个说多个数据库事件,多个事件中间用or分开;
database表示数据库级触发器;schema表示用户级触发器。
例如, 为了记载系统所发生的DDL事件(CREATE,ALTER,DROP),可以建立DDL触发器,为了记载DDL时间信息,应该建立专门的表,以便存放DDL事件信息。
--创建表以管理员方式登陆
CREATE TABLE event_ddl( event VARCHAR2(20), username VARCHAR2(10), owner VARCHAR2(10), obbjname VARCHAR2(20), objtype VARCHAR2(10), time DATE );
|
在建立了表event_ddl之后,就可以在触发器中引用该表,为了记载DDL事件,应该建立DDL触发器,注意,当建立DDL触发器时,必须使用AFTER关键字。
CREATE OR REPLACE TRIGGER tr_ddl AFTER DDL ON scott.schema BEGIN INSERT INTO event_ddl VALUES( ora_sysevent,ora_login_user,ora_dict_obj_owner,ora_dict_obj_name,ora_obj_type,SYSTEM ); END; |
当建立了触发器tr_dll之后,如果在SCOTT方案对象上执行了DDL操作,则会将该新息记载到表event_ddl中。