Über V$SESSION und V$SQL lässt sich das PL/SQL Package ermitteln das ein bestimmtes SQL Statement aufgerufen hat.
In V$SESSION steht uns zur Verfügung (aus der Doku Database Reference 11g R2 )
Über die V$SQL lässt sich sogar die Zeilennummer im PL/SQL Block ermitteln.
In der V$SQL kann verwendet werden (aus der Doku Database Reference 11g R2 )
Mit der ID kann über die DBA_OBJECTS der Objekt Name ermittelt werden.
SELECT * FROM dba_objects WHERE object_id=&MY_PROGRAM_ID
Das ist sehr praktisch um zum Beispiel zu analysieren, welche PL/SQL Objekte in letzter Zeit aufgerufen und welche Zeile SQL Code hier verwendet wurde:
SELECT COUNT(*) , obj.owner , obj.object_type , obj.object_name , s.PROGRAM_LINE# , MIN(to_date(s.first_load_time,'YYYY-MM-DD/HH24:MI:SS')) AS min_first_load , MAX(to_date(s.first_load_time,'YYYY-MM-DD/HH24:MI:SS')) AS max_first_load FROM dba_objects obj , v$sql s WHERE s.program_id = obj.object_id AND s.program_id != 0 GROUP BY obj.owner , obj.object_type , obj.object_name , obj.subobject_name , s.PROGRAM_LINE# ORDER BY obj.owner