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?
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.
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.
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. 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.
Tags und Links oracle code-coverage plsql profiler