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;
Copy

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;
Copy
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;
$$;
Copy

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, weil PACKAGE 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 die CREATE PROCEDURE-Anweisung Teil der Codeeinheitenkategorie PROCEDURE 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 der PACKAGE 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 die DBMS_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.