SnowConvert: Top-Level Code Units Report¶
Was ist eine Codeeinheit der obersten Ebene?¶
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.
Einige Codeeinheiten können innerhalb anderer Codeeinheiten verschachtelt werden. Wenn es in einer Hierarchie von Einheiten keine andere Codeeinheit über ihr gibt, nennt man sie Codeeinheit der obersten Ebene.
Was ist eine Codeeinheit außerhalb des gültigen Bereichs?¶
Codeeinheiten der obersten Ebene außerhalb des gültigen Bereichs sind Codeeinheiten, die sich außerhalb des Konvertierungsbereichs von SnowConvert befinden. Aus diesem Grund werden diese Codeeinheiten bei der Berechnung der Konvertierungsrate nicht berücksichtigt. Jede dieser Codeeinheiten hat keine Konvertierungsrate (sie erscheint als N/A
).
Wenn der Eingabecode nur Codeeinheiten enthält, die nicht in den Geltungsbereich fallen, beträgt die Konvertierungsrate der gesamten Migration 0 % der Codezeilen.
Der folgende CREATE TRIGGER
gilt als Codeeinheit außerhalb des gültigen Bereichs.
CREATE OR REPLACE TRIGGER my_trigger
AFTER
UPDATE
ON my_table
FOR EACH ROW
BEGIN
NULL;
END;
Beispiele für Codeeinheiten der obersten Ebene¶
Im folgenden Abschnitt sehen wir einige Beispiele für Codeeinheiten der obersten Ebene.
Abfragen¶
Im folgenden Beispiel haben wir hier eine einzelne SELECT-Anweisung. Diese Anweisung ist eine einzelne Codeeinheit der obersten Ebene.
SELECT * FROM table1;
In diesem Beispiel haben wir eine verschachtelte SELECT
-Anweisung, die in einer anderen SELECT
-Anweisung verschachtelt ist. Die gesamte Abfrage zählt als eine einzelne Codeeinheit der obersten Ebene.
SELECT * FROM (SELECT * FROM table1);
Objekte¶
Objekte, die mit einer DDL erstellt wurden, zählen als einzelne Codeeinheit der obersten Ebene, auch wenn sie andere Codeeinheiten enthalten.
Die folgende Anweisung erstellt eine Ansicht mit einer Abfrage. In diesem Fall zählt die gesamte CREATE VIEW
als einzelne Codeeinheit der obersten Ebene.
CREATE VIEW view1 AS SELECT * FROM table1;
Die folgende CREATE PROCEDURE
-Anweisung zählt als einzelne Codeeinheit der obersten Ebene, auch wenn sie mehrere Anweisungen enthält.
CREATE PROCEDURE procedure1
AS
BEGIN
DELETE FROM table1;
END;
Befehle¶
Eigenständige Befehle in einer SQL-Datei werden als Codeeinheiten der obersten Ebene betrachtet.
Eine COMMIT
-Anweisung zählt als einzelne Codeeinheit der obersten Ebene.
COMMIT;
Paket-Bodys in Oracle¶
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 Paket-Bodys zählen nicht als Codeeinheiten der obersten Ebene.
Der folgende Code gilt als einzelne CREATE PACKAGE BODY
-Codeeinheit.
CREATE PACKAGE package_body1 IS
FUNCTION function1
RETURN VARCHAR
IS
BEGIN
RETURN 'HELLO'';
END;
END;
Teradata-Skriptdateien¶
Teradata-Skriptdateien wie BTEQ oder TPUMP werden als eigenständige Codeeinheiten ausgeführt. Aus diesem Grund wird die gesamte Datei als einzelne Codeeinheit der obersten Ebene betrachtet. Andere mögliche Codeeinheiten innerhalb dieser Dateien zählen nicht als Codeeinheiten der obersten Ebene.
Die folgende BTEQ-Skriptdatei wird als einzelne BTEQ-Codeeinheit der obersten Ebene betrachtet.
.LOGON e/fml,notebook
.COMPILE FILE = example.spl;
COMMIT;
CALL samplesp1 (8888, pAmount);
.LOGOFF
Transact-SQL-Batches mit GOTO¶
Jede Anweisung von Transact-SQL kann eigenständig ausgeführt werden. In den meisten Fällen wird jede dieser Anweisungen als Codeeinheit der obersten Ebene betrachtet. Wenn es jedoch einen Stapel gibt, der eine GOTO-Anweisung zu einem LABEL innerhalb desselben Batchs enthält, können die Anweisungen des Batchs nicht unabhängig voneinander ausgeführt werden, ohne sicherzustellen, dass sie richtig funktionieren. Aus diesem Grund werden Anweisungen, die sich in einem Batch mit einer GOTO-Anweisung befinden, nicht als Codeeinheiten der obersten Ebene gezählt, sondern nur der Batch.
Das folgende Codebeispiel wird als eine einzelne GOTO/LABEL-Codeeinheit betrachtet:
DECLARE @Counter int;
SET @Counter = 1;
WHILE @Counter < 10
BEGIN
SELECT @Counter
SET @Counter = @Counter + 1
IF @Counter = 4 GOTO Branch_One
IF @Counter = 5 GOTO Branch_Two
END
Branch_One:
SELECT 'Jumping To Branch One.'
GOTO Branch_Three;
Branch_Two:
SELECT 'Jumping To Branch Two.'
Branch_Three:
SELECT 'Jumping To Branch Three.';
GO
Wie wird die Codeeinheitmethodik in anderen Berichten dargestellt?¶
Die Codeeinheitmethodik ist auch in anderen Berichten vertreten. In diesem Abschnitt wird erklärt, wie diese Werte angezeigt werden oder wie sie mit anderen Berichten zusammenhängen.
Problembericht¶
Jede Zeile des Problemberichts enthält einige Informationen über die Codeeinheit, die von dem Problem betroffen ist. Die Spalten, die sich auf Codeeinheiten beziehen, sind die folgenden:
Code Unit Database: Dies ist die Datenbank der Codeeinheit der obersten Ebene, in der das Problem gefunden wurde. Sie gilt nur für Codeeinheiten, die Objekte sind.
Code Unit Schema: Dies ist das Schema der Codeeinheit der obersten Ebene, in der das Problem gefunden wurde. Sie gilt nur für Codeeinheiten, die Objekte sind.
Code Unit Package: Dies ist das Paket der Codeeinheit der obersten Ebene, in der das Problem gefunden wurde. Sie gilt nur für Codeeinheiten, die Objekte sind.
Code Unit Name: Dies ist der Name der Codeeinheit der obersten Ebene, in der das Problem gefunden wurde. Er gilt nur für benannte Codeeinheiten wie Objekte. Dieser Name ist nicht durch Datenbank, Schema oder Paket qualifiziert.
Code Unit ID: Dies ist die ID der Codeeinheit der obersten Ebene, in der das Problem gefunden wurde. Bei diesem Namen ist der Name qualifiziert, und bei Codeeinheiten mit wiederholten Namen wird eine Nummer hinzugefügt.
Code Unit: Dies ist der Typ der Codeeinheit der obersten Ebene, in der das Problem gefunden wurde.
Code Unit Size: Dies ist die Größe der Codeeinheit der obersten Ebene, in der das Problem gefunden wurde.
Bericht zu Objektreferenzen und Bericht über fehlende Objekte¶
Jede Zeile des Berichts zu Objektreferenzen enthält Informationen über die Codeeinheit der obersten Ebene, die ein anderes Element referenziert hat. Bei diesen referenzierten Elementen handelt es sich möglicherweise nicht um Elemente der obersten Ebene, sodass diese anderen Werte möglicherweise nicht in den Bericht über Codeeinheiten der obersten Ebene aufgenommen werden.
Ähnlich wie der Bericht zu Objektreferenzen enthält der Bericht über fehlende Objekte Informationen über die Codeeinheit der obersten Ebene, die ein Element referenziert hat, das im Code nicht gefunden werden konnte.
Caller Code Unit: Dies ist der Typ der Codeeinheit der obersten Ebene, die ein anderes Element referenziert.
Caller Code Unit Database: Dies ist die Datenbank der Codeeinheit der obersten Ebene, die ein anderes Element referenziert.
Caller Code Unit Schema: Dies ist das Schema der Codeeinheit der obersten Ebene, die ein anderes Element referenziert.
Caller Code Unit Name: Dies ist der Name der Codeeinheit der obersten Ebene, die ein anderes Element referenziert.
Caller Code Unit Full Name: Dies ist der vollständige Name der Codeeinheit der obersten Ebene, die ein anderes Element referenziert.
Informationen im Top-Level Code Units Report¶
Spalte |
Beschreibung |
---|---|
Partition Key |
Der eindeutige Bezeichner der Konvertierung. |
Dateityp |
Der Typ der Datei, in der sich die Codeeinheit befindet. (SQL, BTEQ usw.) |
Kategorie |
Die umfassendere Klasse oder der umfassendere Typ, zu dem jede Codeeinheit gehört. |
Code Unit |
Der Typ der Codeeinheit, zu der dieses Element gehört. |
Code Unit Name |
Der Name der Codeeinheit, wenn sie einen hat, wie z. B. Tabellen oder Prozeduren. Für Elemente ohne Namen wie DMLs lautet er N/A. |
Dateiname |
Der Name der Datei, in der sich das Objekt befindet. Verwendet den relativen Pfad ab dem Eingabeverzeichnis. |
Line Number |
Die Zeilennummer innerhalb der Datei, in der sich die Codeeinheit befindet. |
Lines of Code |
Die Gesamtzahl der Codezeilen, die die 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 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 sich in der Codeeinheit befinden. 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 Codeeinheit eine Konvertierungsrate von 0 % hat.</li><li>Partial: Wenn die Konvertierungsrate der Codeeinheit zwischen 0 % und 100 % liegt.</li><li>Success: Wenn die Konvertierungsrate der 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 TABLE
-Anweisung in ORACLE SQL in einer Datei namens „table_example.sql“ befindet.
CREATE TABLE my_table (
my_column DATE DEFAULT TO_DATE(CURRENT_DATE, 'J'),
NOT A VALID COLUMN
);
CREATE OR REPLACE TABLE my_table (
my_column TIMESTAMP /*** SSC-FDM-OR0042 - DATE TYPE COLUMN HAS A DIFFERENT BEHAVIOR IN SNOWFLAKE. ***/ DEFAULT PUBLIC.JULIAN_TO_GREGORIAN_DATE_UDF(CURRENT_DATE(), 'J')
-- ,
-- ** SSC-EWI-0001 - UNRECOGNIZED TOKEN ON LINE '3' COLUMN '3' OF THE SOURCE CODE STARTING AT 'NOT'. EXPECTED 'Column Definition' GRAMMAR. LAST MATCHING TOKEN WAS ',' ON LINE '2' COLUMN '52'. FAILED TOKEN WAS 'NOT' ON LINE '3' COLUMN '3'. CODE '15'. **
-- NOT A VALID COLUMN
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
;
Der Top-Level Code Units Report enthält einen einzigen Eintrag in der zuvor gezeigten Tabelle.
Hier sind alle Werte, die bei der Eingabe dieser CREATE TABLE
-Anweisung gemeldet werden würden:
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.
Die Category ist TABLE, da die
CREATE TABLE
-Anweisung Teil der Codeeinheitenkategorie TABLE ist.Die Code Unit selbst lautet
CREATE TABLE
.Der File Name, der Datei, in der diese Codeeinheit gefunden wurde, lautet „table_example.sql“.
Unter der Annahme, dass die
CREATE TABLE
-Anweisung am Anfang der Datei steht, ist die Line Number 1.Die Anzahl der Lines of Code ist 4.
In der Spalte EWI Count wird 1 angezeigt, da der Ausgabecode eine Parsing-EWI-Meldung aufweist.
Die Spalte FDM Count enthält 1, weil der Ausgabecode ein FDM- Problem bezüglich Datentypen aufweist.
Als PRF Count wird 0 angegeben, da keine PRF-Probleme im Ausgabecode vorhanden sind.
Die Highest EWI Severity wäre in diesem Fall „Critical“, da dies der Schweregrad der Parsing-EWI-Meldung im Beispiel ist. Die andere hat den Schweregrad „Low“.
Die Spalte UDFs Used enthält
JULIAN_TO_GREGORIAN_DATE_UDF
, da diese benutzerdefinierte Funktion hinzugefügt wurde, um dieTO_DATE
-Funktion des Eingabecodes zu konvertieren.In der Spalte EWI wird „SSC-EWI-0001“ angezeigt, da dies eine der EWIs ist, die im Ausgabecode hinzugefügt wurden.
Die Spalte FDM enthält „SSC-FDM-OR0042“, da dies eine der FDMs war, die im Ausgabecode hinzugefügt wurden.
In der Spalte PRF wird „N/A“ angezeigt, da es im Ausgabecode keine PRF-Probleme gibt.
Der Conversion State lautet „Partial“ sein, da nur einige Fragmente dieser Codeeinheit ohne EWIs migriert werden konnten.
Die LoC Conversion Percentage beträgt 50 %, da von 4 Zeilen nur 2 erfolgreich konvertiert wurden.