SnowConvert: Bericht über eingebettete Codeeinheiten¶
Was ist eine eingebettet Codeeinheit??¶
Eine Codeeinheit ist, wie der Name schon sagt, das kleinste eigenständige ausführbare Element. In den meisten Fällen handelt es sich dabei um Anweisungen, aber sie umfassen auch Skriptdateien, da diese als einzelnes Element ausgeführt werden.
Gemäß der vorherigen Definition ist eine eingebettete Codeeinheit also eine Codeeinheit, die sich innerhalb einer Codeeinheit der obersten Ebene befindet. Weitere Informationen finden Sie unter Top-Level Code Units Report.
Beispiele für eingebettete Codeeinheiten¶
Im folgenden Abschnitt finden Sie einige Beispiele für eingebettete Codeeinheiten.
Pakete¶
Ein Paket kann mehrere Elemente innerhalb seines Bodys definieren. Der Paket-Body wird als Codeeinheit der obersten Ebene betrachtet, da diese Elemente nicht einzeln erstellt werden können, ohne den gesamten Paket-Body zu erstellen. Elemente oder Codeeinheiten innerhalb eines Pakets werden als eingebettete Codeeinheiten gezählt.
Die folgenden Anweisungen werden als eingebettete Codeeinheiten in Paketen
gezählt:
Funktionen
Prozeduren
Typen
Cursor
Konstanten
Variablen
Ausnahmen
Pragmas
CREATE OR REPLACE PACKAGE my_package1 IS
PROCEDURE outer_procedure(input_value NUMBER);
END my_package1;
/
CREATE OR REPLACE PACKAGE BODY my_package1 IS
FUNCTION outer_function(value NUMBER) RETURN NUMBER IS
BEGIN
RETURN value * 2;
END inner_function;
PROCEDURE outer_procedure(input_value NUMBER) IS
BEGIN
DBMS_OUTPUT.PUT_LINE('Result of inner function: ' || inner_function(input_value));
DBMS_OUTPUT.PUT_LINE('Input Value: ' || input_value);
END outer_procedure;
END my_package1;
In diesem Fall werden die eingebettete Funktion outer_function(NUMBER)
und die eingebettete Prozedur outer_procedure(NUMBER)
gezählt.
Informationen im Bericht über eingebettete Codeeinheiten¶
Spalte |
Beschreibung |
---|---|
Partition Key |
Der eindeutige Bezeichner der Konvertierung. |
Dateityp |
Der Typ der Datei, in der sich die eingebettete Codeeinheit befindet. (SQL, BTEQ usw.) |
ParentCategory |
Die Kategorie der Codeeinheit der obersten Ebene, in die die Codeeinheit eingebettet ist. |
ParentID |
Der vollständig qualifizierte Name der Codeeinheit der obersten Ebene, in die die Codeeinheit eingebettet ist. |
Kategorie |
Die umfassendere Klasse oder der Typ, zu der bzw. dem jede eingebettete Codeeinheit gehört. |
Code Unit |
Der Typ der eingebetteten Codeeinheit, zu der dieses Element gehört. |
Code Unit Name |
Der Name der eingebetteten Codeeinheit, wenn sie einen hat, wie z. B. Tabellen oder Prozeduren. Für Elemente ohne Namen ist er N/A. |
Dateiname |
Der Name der Datei, in der sich die eingebettete Codeeinheit befindet. Verwendet den relativen Pfad ab dem Eingabeverzeichnis. |
Line Number |
Die Zeilennummer innerhalb der Datei, in der sich die eingebettete Codeeinheit befindet. |
Lines of Code |
Die Gesamtzahl der Codezeilen, die die eingebettete Codeeinheit umfasst. |
EWI Count |
Die Anzahl der EWIs, die in der Codeeinheit gefunden wurden. Mehr über EWIs erfahren Sie hier. |
FDM Count |
Die Anzahl der FDMs, die in der Codeeinheit gefunden wurden. Mehr über FDMs erfahren Sie hier. |
PRF Count |
Die Anzahl der PRFs, die in der Codeeinheit gefunden wurden. Mehr über PRFs erfahren Sie hier. |
Highest EWI Severity |
<p>Der höchste EWI-Schweregrad, der innerhalb der eingebetteten Codeeinheit gefunden wurde.<br>Die Reihenfolge der Schweregrade ist wie folgt:</p><ul><li>N/A (wenn es keine EWIsgibt)</li><li>Low</li><li>Medium</li><li>High</li><li>Critical</li></ul> |
UDFs Used |
Die Namen aller benutzerdefinierten Funktionen, die in der eingebetteten Codeeinheit enthalten sind. Die Namen der verwendeten UDFs werden durch einen senkrechten Strich getrennt, wenn es mehr als einen gibt. |
EWI |
Der Code aller EWIs innerhalb der Codeeinheit. Dieser Code wird durch senkrechte Striche getrennt und enthält keinen sich wiederholenden Code. |
FDM |
Der Code aller FDMs innerhalb der Codeeinheit. Dieser Code wird durch senkrechte Striche getrennt und enthält keinen sich wiederholenden Code. |
PRF |
Der Code aller PRFs innerhalb der Codeeinheit. Dieser Code wird durch senkrechte Striche getrennt und enthält keinen sich wiederholenden Code. |
Conversion Status |
<p>Der endgültige Status der Konvertierung der Codeeinheit.</p><p>Die möglichen Konvertierungsstatus sind:</p><ul><li>NotSupported: Wenn die eingebettete Codeeinheit eine Konvertierungsrate von 0 % hat.</li><li>Partial: Wenn die Konvertierungsrate der eingebetteten Codeeinheit zwischen 0 % und 100 % liegt.</li><li>Success: Wenn die Konvertierungsrate der eingebetteten Codeeinheit 100 % beträgt.</li></ul> |
LoC Conversion Percentage |
Der Prozentsatz der Konvertierungsrate basiert auf Codezeilen. Eine einzelne Codezeile kann unterstützte und nicht unterstützte Fragmente enthalten, je nachdem, wie der Eingabecode formatiert wurde. In diesen Fällen wird die gesamte Zeile als nicht unterstützt betrachtet. |
Beispiel¶
Nehmen Sie an, dass sich die folgende CREATE PACKAGE
-Anweisung in ORACLE SQL in einer Datei namens „Oracle_01.sql“ befindet.
CREATE OR REPLACE PACKAGE my_package1 IS
PROCEDURE calculate_salary(emp_id IN NUMBER);
END my_package1;
/
CREATE OR REPLACE PACKAGE BODY my_package1 IS
PROCEDURE calculate_salary(emp_id IN NUMBER) IS
emp_name VARCHAR2(100);
emp_salary NUMBER;
BEGIN
SELECT name, salary INTO emp_name, emp_salary FROM employees WHERE employee_id = emp_id;
DBMS_OUTPUT.PUT_LINE('Employee ID: ' || emp_id);
DBMS_OUTPUT.PUT_LINE('Employee Name: ' || emp_name);
DBMS_OUTPUT.PUT_LINE('Employee Salary: ' || emp_salary);
END calculate_salary;
END my_package1;
CREATE SCHEMA IF NOT EXISTS my_package1
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
;
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "employees" **
CREATE OR REPLACE PROCEDURE my_package1.calculate_salary(emp_id NUMBER(38, 18))
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
DECLARE
emp_name VARCHAR(100);
emp_salary NUMBER(38, 18);
BEGIN
SELECT name, salary INTO
:emp_name,
:emp_salary
FROM
employees
WHERE employee_id = :emp_id;
--** SSC-FDM-OR0035 - CHECK UDF IMPLEMENTATION FOR DBMS_OUTPUT.PUT_LINE_UDF. **
CALL DBMS_OUTPUT.PUT_LINE_UDF('Employee ID: ' || NVL(:emp_id :: STRING, ''));
--** SSC-FDM-OR0035 - CHECK UDF IMPLEMENTATION FOR DBMS_OUTPUT.PUT_LINE_UDF. **
CALL DBMS_OUTPUT.PUT_LINE_UDF('Employee Name: ' || NVL(:emp_name :: STRING, ''));
--** SSC-FDM-OR0035 - CHECK UDF IMPLEMENTATION FOR DBMS_OUTPUT.PUT_LINE_UDF. **
CALL DBMS_OUTPUT.PUT_LINE_UDF('Employee Salary: ' || NVL(:emp_salary :: STRING, ''));
END;
$$;
Der Bericht über eingebettete Codeeinheiten enthält nur eine eingebettete Prozedur.
Hier sind alle Werte, die in der Eingabe dieser eingebetteten Prozedur innerhalb des Pakets gemeldet werden:
Der Wert von Partition Key hängt von der Migration ab, sodass der Wert hier variiert.
Der File Type ist SQL, da er für eine Datei mit der Erweiterung .sql migriert wurde.
ParentCategory lautet
PACKAGE BODY
, weilPACKAGE BODY
die Codeeinheit der obersten Ebene ist, die die eingebettete Prozedur enthält.Die ParentID ist
my_package1
, da dies der Name der Codeeinheit der obersten Ebene ist, die die eingebettete Prozedur enthält.Die Category für die eingebettete Prozedur ist
PROCEDURE
, da dieCREATE PROCEDURE
-Anweisung Teil der CodeeinheitenkategoriePROCEDURE
ist.Die Code Unit selbst lautet
CREATE PROCEDURE
.Der Code Unit Name lautet
calculate_salary(NUMBER)
.Der File Name der Datei, in der diese Codeeinheit gefunden wurde, lautet „Oracle_01.sql“.
Unter der Annahme, dass die
CREATE PROCEDURE
-Anweisung in derPACKAGE BODY DEFINITION
enthalten ist, ist die Line Number 8.Die Anzahl der Lines of Code ist 9.
In der Spalte EWI Count wird 0 angezeigt, da der Ausgabecode keine EWIs aufweist.
In der Spalte FDM Count wird 3 angezeigt, da der Ausgabecode drei FDMs hat, die sich auf die UDFs beziehen, die dem Ausgabecode hinzugefügt wurden.
In der Spalte PRF Count wird N/A angezeigt, da der Ausgabecode keine PRFs enthält.
die Highest EWI Severity wäre in diesem Fall „N/A“, da keine EWIs vorhanden sind.
Die Spalte UDFs Used enthält
DBMS_OUTPUT.PUT_LINE_UDF
, da diese benutzerdefinierte Funktion hinzugefügt wurde, um dieDBMS_OUTPUT.PUT_LINE
zu konvertieren.In der Spalte EWI wird „N/A“ angezeigt, da es keine EWI-Probleme gibt.
In der Spalte FDM wird in diesem Fall
SSC-FDM-OR0035
angezeigt.In der Spalte PRF wird „N/A“ angezeigt, da es keine PRF-Probleme gibt.
Der Conversion Status lautet
Success
.Die LoC Conversion Percentage beträgt
100 %
, da alle Zeilen erfolgreich konvertiert wurden.