Obs : lembro DE NOVO que isso só funciona SE o PL/SQL está rodando neste momento : se vc quer ter uma AUDITORIA (ie, um registro PERMANENTE de quem rodou o que e quando, não importa se está rodando no momento ou não) eu Recomendo ativar a Auditoria interna do RDBMS Oracle, vide na doc o comando AUDIT....
[]s Chiappa ---Em oracle_br@yahoogrupos.com.br, <jlchia...@yahoo.com.br> escreveu: Claro que tem, DESDE QUE o PL/SQL (seja qual for : Proc, Package, Func, etc) esteja rodando NESTE MOMENTO : nem sempre o DBA libera acesso (principalmente em bancos PROD) aos objetos internos necessários, mas tem sim.... Um exemplo : => crio e executo uma procedure que leva um tempinho executando : scott@DESENV:SQL>CREATE OR REPLACE PROCEDURE proc_UM_MINUTO IS 2 begin 3 DBMS_LOCK.SLEEP(60); 4* END; scott@DESENV:SQL>/ Procedimento criado. scott@DESENV:SQL>EXEC PROC_UM_MINUTO; ==> com o PL/SQL rodando, executo a consulta numa sessão conectada Com privilégios de consulta nos objs necessários : SYS@DESENV:SQL>@running_plsqls.sql *** Currently Executing Packages **** TYPE OWNER NAME SID SERIAL --------- ------------------------------ ------------------------------ ---------- ---------- PROCEDURE SCOTT PROC_UM_MINUTO 130 6775 PACKAGE SYS DBMS_LOCK 130 6775 ==> é é isso.... A consulta em si é : SYS@DESENV:SQL>GET running_plsqls.sql 1 break on sid skip 1 2 prompt **** Currently Executing Packages **** 3 SELECT /*+ RULE */ 4 substr(DECODE(o.kglobtyp, 5 7, 'PROCEDURE', 8, 'FUNCTION', 9, 'PACKAGE', 12, 'TRIGGER', 13, 6 'CLASS'),1,15) "TYPE", 7 substr(o.kglnaown,1,30) "OWNER", 8 substr(o.kglnaobj,1,30) "NAME", 9 s.indx "SID", 10 s.ksuseser "SERIAL" 11 FROM 12 sys.X$KGLOB o, 13 sys.X$KGLPN p, 14 sys.X$KSUSE s 15 WHERE 16 o.inst_id = USERENV('Instance') AND 17 p.inst_id = USERENV('Instance') AND 18 s.inst_id = USERENV('Instance') AND 19 o.kglhdpmd = 2 AND 20 o.kglobtyp IN (7, 8, 9, 12, 13) AND 21 p.kglpnhdl = o.kglhdadr AND 22 s.addr = p.kglpnses 23* ORDER BY 4, 2, 1 SYS@DESENV:SQL> []s Chiappa