Opa, explica aí : se vc quiser saber se um dado PL/SQL está sendo usado NESTE
MOMENTO, ie, se ele está sendo executado por alguém NESTE MOMENTO, vc pode usar
o script abaixo...
Já se o que vc quer é saber se um dado stored PL/SQL que está gravado no banco
foi no passado recente utilizado ou não pela Aplicação (digamos, vc não tem uma
Documentação confiável e quer saber se o tal PL/SQL pode ser apagado do banco
sem prejuízo para a Aplicação), essa informação NÃO é registrada no database :
vc poderia neste caso varrer os fontes da Aplicação , ou (se não for exigida
uma Precisão / Garantia maior) , a Possibilidade é vc ativar algum tipo de
Auditoria que registre daí pra frente as execuções dos PL/SQLs ou talvez
consultar as V$ de caches do banco...
O script para listar PL/SQLs em execução no momento é :
break on sid skip 1
prompt **** Currently Executing Packages ****
SELECT /*+ RULE */
substr(DECODE(o.kglobtyp,
7, 'PROCEDURE', 8, 'FUNCTION', 9, 'PACKAGE', 12, 'TRIGGER', 13,
'CLASS'),1,15) "TYPE",
substr(o.kglnaown,1,30) "OWNER",
substr(o.kglnaobj,1,30) "NAME",
s.indx "SID",
s.ksuseser "SERIAL"
FROM
sys.X_$KGLOB o,
sys.X_$KGLPN p,
sys.X_$KSUSE s
WHERE
o.inst_id = USERENV('Instance') AND
p.inst_id = USERENV('Instance') AND
s.inst_id = USERENV('Instance') AND
o.kglhdpmd = 2 AND
o.kglobtyp IN (7, 8, 9, 12, 13) AND
p.kglpnhdl = o.kglhdadr AND
s.addr = p.kglpnses
ORDER BY 4, 2, 1
/
[]s
Chiappa