Oracle 用户事件触发器
用户事件触发器是建立在模式级的操作上的触发器。激活该类型触发器的用户事件包括:CREATE、ALTER、DROP、ANAL YZE、ASSOCIATE STATISTICS、DISASSOCIATE 、STA TISTICS、COMMENT、GRANT、REVOKE、RENAME、TRUNCA TE、LOGOFF、SUSPEND 和LOGON。
下面的示例将创建一个用户模式级触发器,以记录用户删除的数据库对象。
(1)以SCOTT身份连接到数据,并建立一个日志信息表。
SQL> create table droped_objects(
2 object_name varchar2(30),
3 object_type varchar2(30),
4 dropped_on date);
表已创建。
(2)创建用户事件触发器,以便记录用户删除的数据库对象。
SQL> create or replace trigger log_drop_trigger
2 before drop on scott.schema
3 begin
4 insert into droped_objects values(
5 ora_dict_obj_name,
6 ora_dict_obj_type,
7 sysdate);
8 end;
9 /
触发器已创建
在编写用户事件触发器时,经常会需要使用一些事件属性函数,例如,上面示例中的ORA_DICT_OBJ_NAME和ORA_DICT_OBJ_TYPE函数。常用的事件属性函数如表7-1所示。
表7-1 事件属性函数
事件属性函数说明
ora_client_ip_address 返回客户端的IP地址
ora_database_name 返回当前数据库名
ora_des_encrypted_password 返回DES加密后的用户口令
ora_dict_obj_name 返回DDL操作所对应的数据库对象名
ora_dict_obj_name_list(name_list out ora_name_list_t) 返回在事件中被修改的对象名列表
ora_dict_obj_owner 返回DDL操作所对应的对象的所有者名
ora_dict_obj_owner_list(owner_list out ora_name_list_t) 返回在事件中被修改的对象的所有者列表
ora_dict_obj_type 返回ddl操作所对应的数据库对象的类型
ora_grantee(user_list out ora_name_list_t) 返回授权事件的授权者
ora_instance_num 返回例程号
ora_is_alter_column(column_name in varchar2) 检测特定列是否被修改
ora_is_creating_nested_table 检测是否正在建立嵌套表
ora_is_drop_column(column_name in varchar2) 检测特定列是否被删除