Benutzer-Werkzeuge

Webseiten-Werkzeuge


prog:which_package_call_this_sql

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
prog:which_package_call_this_sql [2015/09/24 08:52] – [Den Name und die Zeilennummer eines PL/SQL Package für ein SQL Statement in der DB ermitteln] gpipperrprog:which_package_call_this_sql [2015/09/24 08:53] (aktuell) – [Anlayse] gpipperr
Zeile 1: Zeile 1:
 +====Den Name und die Zeilennummer eines PL/SQL Package für ein SQL Statement in der DB ermitteln====
 +
 +Über **V$SESSION** und **V$SQL** lässt sich das PL/SQL Package ermitteln das ein bestimmtes SQL Statement aufgerufen hat.
 +
 +In <fc #008000>**V$SESSION**</fc>  steht uns zur Verfügung (aus der Doku [[http://docs.oracle.com/cd/E11882_01/server.112/e40402/dynviews_3016.htm]| Database Reference 11g R2]] )
 +
 +  * **PLSQL_ENTRY_OBJECT_ID** - Object ID of the top-most PL/SQL subprogram on the stack (or NULL if there is no PL/SQL subprogram on the stack)
 +  * **PLSQL_ENTRY_SUBPROGRAM_ID** - Subprogram ID of the top-most PL/SQL subprogram on the stack (or NULL if there is no PL/SQL subprogram on the stack)
 +  * **PLSQL_OBJECT_ID** - Object ID of the currently executing PL/SQL subprogram (or NULL if executing SQL)
 +  * **PLSQL_SUBPROGRAM_ID** - Subprogram ID of the currently executing PL/SQL object (or NULL if executing SQL)
 +
 +
 +Über die <fc #008000>**V$SQL**</fc> lässt sich sogar die Zeilennummer im PL/SQL Block ermitteln.
 +
 +In der V$SQL kann verwendet werden (aus der Doku [[http://docs.oracle.com/cd/E18283_01/server.112/e17110/dynviews_3043.htm|Database Reference 11g R2]] 
 +)
 +
 +  * **ROGRAM_ID** - Program identifier
 +  * **PROGRAM_LINE#** - Program line number
 +
 +
 +Mit der ID kann über die DBA_OBJECTS der Objekt Name ermittelt werden.
 +
 +<code sql>
 +select * from dba_objects where  object_id=&MY_PROGRAM_ID
 +</code>
 +=== Anlayse ===
 +
 +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:
 +<code sql>
 +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  
 +</code>
  
"Autor: Gunther Pipperr"
prog/which_package_call_this_sql.txt · Zuletzt geändert: 2015/09/24 08:53 von gpipperr