我想建立一个监视所有数据库表的变动情况的一个日志,即想每一个表的列删除或者新增加时增加一个记录!
不知道如何来确定当前操作表及列的属性,像行级有new和old来用,这个触发器就不知道用什么了,找了半天帮助也没有介绍的,郁闷!create or replace trigger tri_createtable
before alter on life.schema
-- local variables here
begin
null;
dbms_output.put_line('drop table ');
insert into t_Object_change_log (object_name,object_type,Opt_Type,Opt_Content,Opt_Date) values
(表名,'table','drop table',表名,sysdate);
end tri_createtable;
不知道如何来确定当前操作表及列的属性,像行级有new和old来用,这个触发器就不知道用什么了,找了半天帮助也没有介绍的,郁闷!create or replace trigger tri_createtable
before alter on life.schema
-- local variables here
begin
null;
dbms_output.put_line('drop table ');
insert into t_Object_change_log (object_name,object_type,Opt_Type,Opt_Content,Opt_Date) values
(表名,'table','drop table',表名,sysdate);
end tri_createtable;
if (ora_sysevent='ALTER' and ora_dict_obj_type='TABLE') then
alter_column:=ora_is_alter_column('FOO');
end if;其它的还有许多,可以在网上找找
系统环境:
1、操作系统:Windows 2000
2、数据库: Oracle 8i R2 (8.1.6) for NT 企业版
3、安装路径:C:\ORACLE说明: SQL> col OBJECT_NAME format a20SQL> SELECT OBJECT_NAME, --对象名
OBJECT_TYPE, --对象类型
TO_CHAR(CREATED, 'YYYY-Mon-DD HH24:MI') CREATE_TIME, --创建时间
TO_CHAR(LAST_DDL_TIME, 'YYYY-Mon-DD HH24:MI') MOD_TIME, --修改时间
TIMESTAMP, --时间戳
STATUS --状态
FROM USER_OBJECTS
WHERE to_char(LAST_DDL_TIME,'yyyymmdd')>'&日期变量';
create table ddl_event (ddl_time date,modified varchar2(200));
create or replace trigger ddl_event
after DDL on schema
begin
insert into ddl_event(ddl_time,modified)
values(sysdate,ora_dict_obj_type || ' ' || ora_dict_obj_name || ' is ' || ora_sysevent);
end;
不可以知道当前改变的列么?如果有很多列的话不是很麻烦,如果去判断!
不知道怎么搞的,帮助文档就看不到这方面的信息,刚才还是看原来项目里面写的找到这几个系统对象!DICTIONARY_OBJ_NAME DICTIONARY_OBJ_TYPE