我想建立一个监视所有数据库表的变动情况的一个日志,即想每一个表的列删除或者新增加时增加一个记录!
不知道如何来确定当前操作表及列的属性,像行级有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;

解决方案 »

  1.   

    系统级触发器中也有许多属性可以调用来进行判断,如判断表的一列是否是否改动了:
    if (ora_sysevent='ALTER' and ora_dict_obj_type='TABLE')  then
      alter_column:=ora_is_alter_column('FOO');
    end if;其它的还有许多,可以在网上找找
      

  2.   

    再转一篇:
    系统环境: 
    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;
      

  3.   

    alter_column:=ora_is_alter_column('FOO');
    不可以知道当前改变的列么?如果有很多列的话不是很麻烦,如果去判断!
    不知道怎么搞的,帮助文档就看不到这方面的信息,刚才还是看原来项目里面写的找到这几个系统对象!DICTIONARY_OBJ_NAME DICTIONARY_OBJ_TYPE