Erstellen eines PL / SQL-Berichts mit DBMS Profiler

9

Ich verwende DBMS_PROFILER für die grundlegende Profilerstellung meiner PL / SQL-Pakete . Ich verwende es auch, um Code-Coverage-Statistiken mit der folgenden Abfrage zu erhalten:

%Vor%

Ich lösche die Tabellen plsql_profiler_data, plsql_profiler_units, plsql_profiler_runs, bevor jeder Profiler ausgeführt wird, so dass ich die Ausführungs-ID nicht jedes Mal kennen muss.

Dadurch erhalten Sie pauschal Informationen zum Prozentsatz des Codes, der während der Profilerstellung abgedeckt wurde. Jetzt versuche ich zu sehen, ob dies als normaler Coverage-Bericht erstellt werden kann, wo ich weiß, welche Codezeile abgedeckt war und welche nicht (sagen wir lineOfCode, iscovered from ...), damit ich einen Bericht mit HTML erstellen kann Formatierung, um anzuzeigen, ob eine Linie abgedeckt wurde oder nicht.

Ich bin nicht sehr kompetent in Oracle-Tabellenstrukturen, wo die Funktionen und Prozeduren gespeichert werden etc. (Habe die obige Abfrage von einem Blog und leicht modifiziert, um Lauf-IDs zu entfernen)

Ist das möglich?

Wenn ja, wie kann ich das erreichen?

    
rajesh 26.07.2013, 06:10
quelle

2 Antworten

1

Ich denke, nähert sich dem, wonach Sie suchen:

%Vor%

Es gibt einige Probleme, die Sie beachten sollten.

1) Viele Zeilen in der Tabelle plsql_profiler_data NOT haben in ihrer Spalte TOTAL_TIME genaue Werte, da sie schneller als die Auflösung des Timers ausgeführt wurden.

Frag Tom nach: Timings :

  

Die Zeitpunkte werden typischerweise nur mit einer bestimmten Zeiteinheit erfasst   granular zu den HSECS.

     

Das bedeutet, dass viele diskrete Ereignisse, die weniger als 1/100   Zweitens scheinen NULL Sekunden zu dauern.

     

Viele diskrete Ereignisse, die weniger als 1/100 Sekunde dauern können   scheinen 1 / 100stel Sekunde zu dauern.

2) Nur die FIRST -Zeile in einer mehrzeiligen Anweisung wird als abgedeckt angezeigt. Wenn Sie also ein INSERT oder was auch immer über mehrere Zeilen teilen, ist mir keine einfache Möglichkeit bekannt, jede -Zeile dieser Anweisung so darzustellen, wie sie in einem Annotated Source-Berichtsstil profiliert ist.

Lesen Sie auch die dbms_profiler Dokumentation diese nützliche Paket-Referenz für die Erstellung von Abfragen für die gesammelten Profiler-Daten.

    
Tom Tresansky 30.08.2013 13:10
quelle
0

Tatsächlich gibt es einige Tools für PL / SQL, die Code-Coverage durchführen. Weitere Informationen finden Sie in den Antworten zu dieser Frage .

Dies besagt, dass Sie Informationen zu benutzererstellter Datenstruktur und Code in den folgenden Tabellen finden können:

  • user_source : Hier finden Sie die Quelle im Feld TEXT , typisiert durch Funktion, Prozedur, Paket, etc.
  • User_tables
  • user_indexes
  • user_types : Wenn Sie irgendeine Art von OO-Code verwenden.
  • Andere Tabellen, die mit user_ beginnen, die Sie möglicherweise benötigen.

Grundsätzlich müssten Sie das Ergebnis Ihrer Abfrage gegen user_source überprüfen und zusätzliche Informationen von den anderen Tabellen erhalten.

    
Guillem Vicens 26.07.2013 06:59
quelle