create table create_log
(
    session_id int not null,  -- sessionid
    drop_time  date,  -- drop的時間
    ip_address varchar2(20),  -- ip地址
    object_owner varchar2(30),  -- 對象的擁有者
    object_name varchar2(30),  -- 對象名稱
    object_type varchar2(20),  -- 對象類型
    drop_by_user varchar2(30)       --      執行create語句的用戶
);create or replace trigger create_info 
before create on schema 
begin 
    insert into create_log
     (session_id,
     drop_time,
     ip_address,
     object_owner,
     object_name,
     object_type,
     drop_by_user)
     values(USERENV('SESSIONID'),
     sysdate,
     SYS_CONTEXT('USERENV','IP_ADDRESS'),
     sys.dictionary_obj_owner,
     sys.dictionary_obj_name,   --表名
     sys.dictionary_obj_type,
     sys.login_user);    
end;
/

解决方案 »

  1.   

    大侠,不行啊。我照着执行了一下,然后新建了一个,可是触发器并没有发生。
    还有,如果是在别的schema上写这触发器,是否也是用sys.dictionary_obj_name?
      

  2.   

    QL> select * from create_log;                             SESSION_ID DROP_TIME   IP_ADDRESS           OBJECT_OWNER                   OBJECT_NAME                    OBJECT_TYPE          DROP_BY_USER
    --------------------------------------- ----------- -------------------- ------------------------------ ------------------------------ -------------------- ------------------------------SQL> create table bb (id varchar2(1));Table createdSQL> select * from create_log;                             SESSION_ID DROP_TIME   IP_ADDRESS           OBJECT_OWNER                   OBJECT_NAME                    OBJECT_TYPE          DROP_BY_USER
    --------------------------------------- ----------- -------------------- ------------------------------ ------------------------------ -------------------- ------------------------------
                                    5956430 2003-9-3 15 172.31.10.22         ECSQUERY                       BB                             TABLE                ECSQUERY得到bb这个表名了
      

  3.   

    谢谢。不过,大侠,我试过确实不行,表建好了,但create_log中就是没内容。另外,这是否跟用户有关系,因为非系统用户登陆的。
      

  4.   

    是跟用户有关,如果当前用户不能访问这个create_log表所在的表空间,上面所说的情况就可能发生了。
      

  5.   

    但是此用户可以访问create_log表所在表空间。
      

  6.   

    你的create_info触发器有没有作用?
      

  7.   

    为什么,当我在Enterprise中创建Create_info触发器时,会报“系统触发器不能在SYS用户方案中定义。而在sqlplus中却可以呢?