SELECT osuser, username, sql_text from v$session a, v$sqltext b 
where a.sql_address =b.address and username='uname'; 
试试

解决方案 »

  1.   

    获得单个对象的DDL语句 
    set heading off 
    set echo off 
    set feedback off 
    set pages off 
    set long 90000 
    select dbms_metadata.get_ddl(‘TABLE’,’TABLENAME’,’SCAME’) from dual; 
    如果获取整个用户的脚本,可以用如下语句 
    select dbms_metadata.get_ddl('TABLE',u.table_name) from user_tables u; 
    当然,如果是索引,则需要修改相关table到index 
    获取视图脚本:
    SEELCT DBMS_METADATA.GET_DDL('VIEW','YOURVIEWNAME') FROM DUAL;
      

  2.   

    beckhambobo(beckham
    我试了,不行。
    select dbms_metadata.get_ddl(‘TABLE’,’TABLENAME’,’SCAME’) from dual;
    得到的是某张表的建表语句,而且要指定表名、方案名。
    select dbms_metadata.get_ddl('TABLE',u.table_name) from user_tables u;
    得到的是所有用户表的建表语句。
    而我是想实现一个触发器,在用户修改任意一张表时,得到他修改表结构的ddl语句,触发器代码如下(现在客户的机器名、时间、oracle用户名都能够得到,就是不能得到用户该库结构的ddl语句,怎么办呐!!):
    CREATE OR REPLACE TRIGGER "GZGUEST"."TRG_ALTER" AFTER
    ALTER ON DATABASE declare 
    PM_NAME VARCHAR2(500); 
    PM_IP_ADDRESS VARCHAR2(500);
    PM_USERNM VARCHAR2(500);
    PM_HOST VARCHAR2(50);
    PM_SESSIONID VARCHAR2(50);
    PM_OSUSERNM VARCHAR2(50);
    PM_SID NUMBER;
    CURRENT_SQL VARCHAR2(500);
    PM_SQLTXT VARCHAR2(2000);PM_SQLADDR VARCHAR2(100);
    INSTERR EXCEPTION;BEGIN
      PM_NAME := 'ALTER';
      PM_SQLTXT:= '';
      SELECT DISTINCT(SID) INTO PM_SID FROM V$MYSTAT;
      
      SELECT SYS_CONTEXT ('USERENV', 'CURRENT_SQL') INTO CURRENT_SQL FROM DUAL;
      SELECT SYS_CONTEXT ('USERENV', 'SESSION_USER') INTO PM_USERNM FROM DUAL;
      SELECT SYS_CONTEXT ('USERENV', 'HOST') INTO PM_HOST FROM DUAL;
      SELECT SYS_CONTEXT ('USERENV', 'IP_ADDRESS') INTO PM_IP_ADDRESS FROM DUAL;
      SELECT SYS_CONTEXT ('USERENV', 'SESSIONID') INTO PM_SESSIONID FROM DUAL;
      SELECT SYS_CONTEXT ('USERENV', 'OS_USER') INTO PM_OSUSERNM FROM DUAL;
     
    -- select TO_CHAR(dbms_metadata.get_ddl('TABLE','TEMP_SPACE','GZGUEST')) into CURRENT_SQL from dual; 
    select TO_CHAR(dbms_metadata.get_ddl('TABLE',u.table_name)) INTO CURRENT_SQL from user_tables u;   
     INSERT INTO GZGUEST.TEMP_CRONTAB (NAME,TM,USERNM,CLHOST,IPADDRESS,SESSIONID,ADTSESSIONID,OSUSERNM,SQLTXT,CURSORID)
      values(PM_NAME,SYSDATE,PM_USERNM,PM_HOST,PM_IP_ADDRESS,PM_SID,PM_SESSIONID,PM_OSUSERNM,PM_SQLTXT,CURRENT_SQL);
      
      EXCEPTION
         WHEN INSTERR THEN
           RETURN;
      
    END;。
      

  3.   

    怎么办呢?有没有办法从一些userenv之外的namespace得到我想要的触发的DDL语句?