我在oracle里建立了系统级触发器 create trigger aaa after create  on database
然后我在主体里写了读视图sys.all_constraints里的内容,但是我在建一个表时,点确定后执行触发器,确读不到我刚才建的表的约束,好象sys.all_constraints是在执行完触发器后才将约束信息写入的,不知道是为什么呢????

解决方案 »

  1.   

    建立DDL触发器:
      create triger triger_name
    after ddl on scott.schema
    begin
    ........
      

  2.   

    创建ddl的trigger. ora_sql_text函数来得到当前正在执行的ddl语句...declare
                    n number;
                    str_stmt varchar2(4000);
                    sql_text ora_name_list_t;
                    l_trace  number;
                    l_alert number;
                    str_session  v$session%rowtype;
                BEGIN
                    n := ora_sql_txt(sql_text);
      

  3.   

    完全可以.创建一个基于用户的trigger
      

  4.   

    Create Or Replace Trigger tri_ddl_before Before ddl 
    ON test.Schema 
    DECLARE 
    sql_text dbms_standar.ora_name_list_t; 
    state_sql Varchar2(4000); 
    BEGIN 
    FOR i IN 1..ora_sql_txt(sql_text) LOOP 
    state_sql := state_sql||sql_text(i); 
    END LOOP; 
    ................
    End If;
    EXCEPTION 
    WHEN NO_DATA_FOUND THEN 
    Null; 
    END tr_ddl_before;