SnowConvert AI – Oracle – COLLECTIONS AND RECORDS¶
Übersetzungsreferenz zur Konvertierung von COLLECTIONS und RECORDS von Oracle in Snowflake Scripting
Warnung
Dieser Abschnitt ist noch in Arbeit, die Informationen können sich in Zukunft noch ändern.
Allgemeine Beschreibung¶
Mit PL/SQL können Sie zwei Arten von zusammengesetzten Datentypen definieren: Sammlung und Datensatz, wobei „zusammengesetzt“ ein Datentyp ist, der Werte speichert, die interne Komponenten haben.
In einer Sammlung haben die internen Komponenten immer denselben Datentyp und werden als Elemente bezeichnet.
In einem Datensatz können die internen Komponenten unterschiedliche Datentypen haben und werden als Felder bezeichnet. (Oracle PL/SQL Language Reference COLLECTIONS AND RECORDS)
Bemerkung
Berücksichtigen Sie die Übersetzungsreferenz für die CREATE TYPE-Anweisung, da sich einige Problemumgehungen überschneiden können und in beiden Szenarien anwendbar sind.
Einschränkungen¶
Snowflake unterstützt laut seiner Online-Dokumentation Nicht unterstützte Datentypen keine benutzerdefinierten Datentypen, zu denen PL-Sammlungen und -Datensätze gehören. Es werden jedoch semistrukturierte Datentypen unterstützt, mit denen sowohl die hierarchieähnliche Struktur von Datensätzen als auch die Elementstruktur von benutzerdefinierten Typen für Sammlungen nachgebildet werden kann. Aus diesem Grund gibt es mehrere Arten von Features, für die es keine Umgehungsmöglichkeit gibt.
Im Folgenden sind die Features aufgeführt, für die NO eine Umgehungsmöglichkeit vorschlägt:
Die Größe der Variablen darf nicht größer sein als 16MB¶
Snowflake setzt VARIANT, OBJECT und die maximale Größe von ARRAY auf 16MBs. Das heißt, wenn ein Datensatz, eine Sammlung oder ein Element davon diese Größe überschreitet, führt dies zu einem Laufzeitfehler.
Varray-Kapazität kann nicht begrenzt werden¶
Die Varrays von Oracle bieten die Möglichkeit, die Anzahl der Elemente innerhalb der Varrays zu begrenzen. Dies wird von Snowflake nicht unterstützt.
Vorgeschlagene Umgehungsmöglichkeit¶
Über die Definition von Datensatztypen¶
Die vorgeschlagene Umgehungsmöglichkeit ist die Verwendung eines semistrukturierten Datentyps OBJECT, um den Datentyp von Oracle nachzuahmen.
Über die Definition von Sammlungsarten¶
Es gibt zwei verschiedene Umgehungsmöglichkeiten, die von der Art der zu migrierenden Sammlung abhängen:
Es wird vorgeschlagen, assoziative Arrays in einen semistrukturierten Datentyp OBJECT umzuwandeln.
Es wird vorgeschlagen, Varrays und verschachtelte Tabellenarrays in einen semistrukturierten Datentyp ARRAY zu ändern.
Aktuelle Unterstützung von SnowConvert AI¶
The next table shows a summary of the current support provided by the SnowConvert AI tool. Please keep in mind that translations may still not be final, and more work may be needed.
Untergeordnetes Feature |
Aktueller Anerkennungsstatus |
Aktueller Übersetzungsstatus |
Hat bekannte Problemumgehungen |
|---|---|---|---|
Anerkannt. |
Nicht übersetzt. |
Ja. |
|
Nicht anerkannt. |
Nicht übersetzt. |
Ja. |
|
Anerkannt. |
Nicht übersetzt. |
Ja. |
|
Anerkannt. |
Nicht übersetzt. |
Ja. |
Bekannte Probleme¶
1. Associate Arrays are considered a Nested Table¶
Ab sofort unterscheidet SnowConvert AI nicht zwischen einem assoziativen Array und einer verschachtelten Tabelle, was bedeutet, dass sie bei der Zählung vermischt werden.
Definition eines assoziativen Array-Typs¶
Dies ist eine Übersetzungsreferenz zur Konvertierung der Deklaration für assoziative Arrays von Oracle in Snowflake
Warnung
Dieser Abschnitt ist noch in Arbeit, die Informationen können sich in Zukunft noch ändern.
Bemerkung
Einige Teile des Ausgabecodes wurden aus Gründen der Übersichtlichkeit weggelassen.
Beschreibung¶
Ein assoziatives Array (früher PL/SQL-Tabelle oder Index-by-Tabelle genannt) ist eine Menge von Schlüsselwert-Paaren. Jeder Schlüssel ist ein eindeutiger Index, der verwendet wird, um den zugehörigen Wert mit der Syntax
variable_name(index)zu finden.Der Datentyp des
indexkann entweder ein Zeichenfolgentyp (VARCHAR2,VARCHAR,STRING, oderLONG) oderPLS_INTEGERsein. Indizes werden in der Sortierreihenfolge gespeichert, nicht in der Reihenfolge ihrer Erstellung. Bei Zeichenfolgentypen wird die Sortierreihenfolge durch die InitialisierungsparameterNLS_SORTundNLS_COMPbestimmt.
Warnung
Nicht zu verwechseln mit der PL/SQL NESTED TABLE Typdefinition.
Für die Übersetzung wird die Typdefinition durch einen semistrukturierten Datentyp OBJECT ersetzt und anschließend werden seine Verwendungen in allen Operationen entsprechend geändert.
To define an Associative Array type, the syntax is as follows:
Um eine Variable dieses Typs zu deklarieren:
Beispielhafte Quellcode-Muster¶
Varchar-indiziertes assoziatives Array¶
Oracle¶
Ergebnis¶
DBMS-OUTPUT |
|---|
1 |
3 |
4 |
2 |
3 |
Snowflake¶
Bitte beachten Sie den Parameter „true“ in OBJECT_INSERT. Dies geschieht, damit das Element aktualisiert wird, wenn es bereits im Array vorhanden ist.
Ergebnis¶
DBMS-OUTPUT |
|---|
1 |
3 |
4 |
2 |
3 |
Numerisch indiziertes assoziatives Array¶
Oracle¶
Ergebnis¶
DBMS-OUTPUT |
|---|
-1 |
3 |
-4 |
-2 |
-3 |
Snowflake¶
Bitte beachten Sie, dass der numerische Wert entsprechend in Varchar umgewandelt wird, wenn die Operation dies erfordert. Beachten Sie außerdem den Parameter „true“ in OBJECT_INSERT. Dies geschieht, damit das Element aktualisiert wird, wenn es bereits im Array vorhanden ist.
Ergebnis¶
DBMS-OUTPUT |
|---|
-1 |
3 |
-4 |
-2 |
-3 |
Datensatzelement numerisch indiziertes assoziatives Array¶
In diesem Fall besteht das assoziative Array aus einer Datensatzstruktur und diese Struktur muss erhalten bleiben. Zu diesem Zweck wurden weitere Operationen für Einfügungen hinzugefügt.
Oracle¶
Ergebnis¶
DBMS-OUTPUT |
|---|
-1 |
3 |
-4 |
-2 |
-3 |
Snowflake¶
In diesem Szenario geht das Einfügen/Aktualisieren von einer automatischen Erstellung des Datensatzes innerhalb des assoziativen Arrays aus und dies muss bei der Erstellung neuer Datensätze berücksichtigt werden.
Ergebnis¶
DBMS-OUTPUT |
|---|
-1 |
3 |
-4 |
-2 |
-3 |
Bekannte Probleme¶
1. They are currently not being recognized¶
SnowConvert AI behandelt diese Sammlungen als verschachtelte Tabellenarrays. Es gibt ein Arbeitselement, um dies zu beheben.
Zugehörige EWIs¶
Keine zugehörigen EWIs.
Sammlungsmethoden¶
Dies ist eine Übersetzungsreferenz zur Konvertierung der Sammlungsmethoden von Oracle in Snowflake
Warnung
Dieser Abschnitt ist noch in Arbeit, die Informationen können sich in Zukunft ändern
Bemerkung
Einige Teile des Ausgabecodes wurden aus Gründen der Übersichtlichkeit weggelassen.
Beschreibung¶
Eine Sammlungsmethode ist ein PL/SQL-Unterprogramm – entweder eine Funktion, die Informationen über eine Sammlung zurückgibt, oder eine Prozedur, die auf einer Sammlung arbeitet. Sammlungsmethoden erleichtern die Verwendung von Sammlungen und die Wartung Ihrer Anwendungen.
Einige dieser Methoden lassen sich den nativen halbstrukturierten Operationen von Snowflake zuordnen. Diejenigen, die das nicht können oder Unterschiede aufweisen, werden einer UDF-Implementierung zugeordnet.
Aktuelle Unterstützung von SnowConvert AI¶
The next table shows a summary of the current support provided by the SnowConvert AI tool. Please keep in mind that translations may still not be final, and more work may be needed.
Methode |
Aktueller Anerkennungsstatus |
Aktueller Übersetzungsstatus |
Zugeordnet zu |
|---|---|---|---|
Nicht anerkannt. |
Nicht übersetzt. |
UDF |
|
Nicht anerkannt. |
Nicht übersetzt. |
UDF (To be defined) |
|
Nicht anerkannt. |
Nicht übersetzt. |
UDF |
|
Nicht anerkannt. |
Nicht übersetzt. |
||
Nicht anerkannt. |
Nicht übersetzt. |
UDF |
|
Nicht anerkannt. |
Nicht übersetzt. |
UDF |
|
Nicht anerkannt. |
Nicht übersetzt. |
||
Nicht anerkannt. |
Nicht übersetzt. |
Nicht unterstützt. |
|
Nicht anerkannt. |
Nicht übersetzt. |
UDF (To be defined) |
|
Nicht anerkannt. |
Nicht übersetzt. |
UDF (To be defined) |
Beispielhafte Quellcode-Muster¶
COUNT¶
Diese Methode gibt die Anzahl der „nicht undefinierten“ (nicht zu verwechseln mit null) Elemente innerhalb einer Sammlung zurück (verschachtelte Tabellen können spärlich werden, wenn diese Elemente dazwischen liegen). Bei assoziativen Arrays gibt sie die Anzahl der Schlüssel im Array zurück.
Oracle¶
Ergebnis¶
DBMS-OUTPUT |
|---|
2 |
3 |
4 |
Snowflake¶
Das Snowflake-Äquivalent ist die ARRAY_SIZE-Methode.
Ergebnis¶
DBMS-OUTPUT |
|---|
2 |
3 |
4 |
EXISTS¶
Diese Methode gibt „true“ zurück, wenn das angegebene Element in der Sammlung enthalten ist. In assoziativen Arrays prüft es, ob der Schlüssel enthalten ist.
Oracle¶
Ergebnis¶
DBMS-OUTPUT |
|---|
2 |
3 |
4 |
Snowflake¶
Das Snowflake-Äquivalent ist die ARRAY_CONTAINS-Methode. Beachten Sie, dass bei der Verwendung von Varchar-Elementen eine Umwandlung in Variant erforderlich ist.
Ergebnis¶
DBMS-OUTPUT |
|---|
2 |
3 |
4 |
FIRST/LAST¶
Diese beiden Methoden geben jeweils das erste/letzte Element der Sammlung zurück. Wenn die Sammlung leer ist, wird null zurückgegeben. Diese Operation wird einer UDF zugeordnet, die in weiteren Überarbeitungen hinzugefügt wird.
Oracle¶
Ergebnis¶
DBMS-OUTPUT |
|---|
abc |
bca |
–Diese leeren Bereiche sind auf die Auswertung auf null zurückzuführen |
1 |
4 |
Snowflake¶
UDFs¶
Ergebnis¶
DBMS-OUTPUT |
|---|
abc |
bca |
–Diese leeren Bereiche sind auf die Auswertung auf null zurückzuführen |
1 |
4 |
DELETE¶
Diese Methode wird verwendet, um Elemente aus einer Sammlung zu entfernen. Es gibt drei mögliche Varianten:
.DELETE entfernt alle Elemente.
.DELETE(n) entfernt das Element, dessen Index mit „n“ übereinstimmt.
.DELETE(n, m) entfernt die Indizes von „n“ bis „m“.
Bemerkung
In Oracle führt die Verwendung dieser Operation für verschachtelte Tabellen dazu, dass sie „undefinierte“ Elemente enthalten, da sie spärlich sind.
Warnung
Bitte beachten Sie, dass die zweite und dritte Version nicht für Varrays gilt.
Oracle¶
Der Einfachheit halber prüft dieses Beispiel nur die Anzahl der Elemente, kann aber so geändert werden, dass der Inhalt der einzelnen Sammlungen angezeigt wird.
Ergebnis¶
DBMS-OUTPUT |
|---|
0 |
0 |
3 |
2 |
0 |
3 |
1 |
Snowflake¶
Snowflake unterstützt keine Löschungen aus einem bestehenden ARRAY und aus diesem Grund besteht die einzige angebotene Umgehungsmöglichkeit darin, ein neues ARRAY in Abhängigkeit von den ursprünglichen Parametern des DELETE neu zu erstellen.
Bemerkung
Beachten Sie, dass eine UDF hinzugefügt wurde, um die Funktionalität für die Aktualisierung des Elements zu implementieren.
Diese UDF wird in späteren Revisionen hinzugefügt werden.
Ergebnis¶
DBMS-OUTPUT |
|---|
0 |
0 |
3 |
2 |
0 |
3 |
1 |
EXTEND¶
Diese Methode wird verwendet, um neue Elemente an eine verschachtelte Tabelle oder ein Varray anzuhängen. Es gibt drei mögliche Varianten:
.EXTEND fügt ein Nullelement ein.
.EXTEND(n) fügt „n“ Nullelemente ein.
.EXTEND(n, i) fügt „n“ Kopien des Elements bei „i“ ein.
Oracle¶
Ergebnis¶
DBMS-OUTPUT |
|---|
5 |
5 |
5 |
Snowflake¶
Bemerkung
Beachten Sie, dass eine UDF hinzugefügt wurde, um die Funktionalität für die Aktualisierung des Elements zu implementieren.
Diese UDF wird in späteren Revisionen hinzugefügt werden.
Ergebnis¶
DBMS-OUTPUT |
|---|
5 |
5 |
5 |
TRIM¶
Diese Methode wird verwendet, um die letzten Elemente aus einer verschachtelten Tabelle oder einem Varray zu entfernen. Es gibt zwei mögliche Varianten:
.TRIM entfernt das letzte Element.
.TRIM(n) löscht die letzten „n“ Elemente.
Bemerkung
Diese Funktion kann mit Hilfe von ARRAYwerden _SLICE implementiert werden
Oracle¶
Ergebnis¶
LIMIT¶
Diese Methode gibt das maximale Limit eines Varrays zurück.
Gefahr
Diese Methode wird in Snowflake nicht unterstützt.
Oracle¶
Ergebnis¶
DBMS-OUTPUT |
|---|
5 |
6 |
PRIOR/NEXT¶
Diese Methode gibt den vorherigen/nächsten Index zurück, wenn ein Index angegeben wird. Wenn es keinen vorherigen/nächsten gibt, wird null zurückgegeben. Sie wird am häufigsten verwendet, um eine Sammlung zu durchsuchen.
Oracle¶
Ergebnis¶
DBMS-OUTPUT |
|---|
– Leere Bereiche sind auf Nullergebnisse zurückzuführen |
1 |
3 |
abc |
jkl |
jkl |
Bekannte Probleme¶
1. Limit method is not supported in Snowflake¶
Snowflake bietet keine Unterstützung für Varrays mit begrenztem Speicherplatz. Aus diesem Grund wird diese Methode nicht unterstützt.
Zugehörige EWIs¶
Keine zugehörigen EWIs.
Typdefinition für verschachtelte Tabellen-Arrays¶
Dies ist eine Übersetzungsreferenz zur Konvertierung der Deklaration für verschachtelte Tabellenarrays von Oracle in Snowflake
Warnung
Dieser Abschnitt ist noch in Arbeit, die Informationen können sich in Zukunft noch ändern.
Bemerkung
Dieser Abschnitt gilt für die PL/SQL-Version der verschachtelten Tabellenarrays; für die eigenständige Version siehe Definition verschachtelter Tabellentypen.
Bemerkung
Einige Teile des Ausgabecodes wurden aus Gründen der Übersichtlichkeit weggelassen.
Beschreibung¶
In der Datenbank ist eine verschachtelte Tabelle ein Spaltentyp, der eine unbestimmte Anzahl von Zeilen in keiner bestimmten Reihenfolge speichert.
Wenn Sie einen verschachtelten Tabellenwert aus der Datenbank in eine PL/SQL-Variable für verschachtelte Tabellen abrufen, vergibt PL/SQL den Zeilen fortlaufende Indizes, beginnend bei 1. Mit diesen Indizes können Sie auf die einzelnen Zeilen der Variablen für verschachtelte Tabellen zugreifen. Die Syntax lautet
variable_name(index). Die Indizes und die Zeilenreihenfolge einer verschachtelten Tabelle bleiben möglicherweise nicht stabil, wenn Sie die verschachtelte Tabelle speichern und aus der Datenbank abrufen.
Für die Übersetzung wird die Typdefinition durch einen semistrukturierten Datentyp ARRAY ersetzt und anschließend werden seine Verwendungen in allen Operationen entsprechend geändert. Bitte beachten Sie, dass die Übersetzung für verschachtelte Tabellen und Varrays identisch ist.
To define a Nested Table Array type, the syntax is as follows:
Um eine Variable dieses Typs zu deklarieren:
Beispielhafte Quellcode-Muster¶
Definitionen für verschachtelte Tabellen-Arrays¶
Dies veranschaulicht, wie Sie verschiedene verschachtelte Tabellenarrays erstellen und die Definitionen für die Variablen migrieren können.
Oracle¶
Snowflake¶
Iteration der verschachtelten Tabelle¶
Oracle¶
Ergebnis¶
DBMS-OUTPUT |
|---|
10 |
20 |
30 |
40 |
20 |
30 |
Snowflake¶
Bemerkung
Beachten Sie, dass eine UDF hinzugefügt wurde, um die Funktionalität für die Aktualisierung des Elements zu implementieren.
Diese UDF wird in späteren Revisionen hinzugefügt werden.
UDF¶
Ergebnis¶
DBMS-OUTPUT |
|---|
10 |
20 |
30 |
40 |
20 |
30 |
Bekannte Probleme¶
1. They are currently not being converted¶
SnowConvert AI unterstützt nicht die Übersetzung dieser Elemente.
2. Indexing needs to be modified¶
Die Indizes von Oracle beginnen bei 1, bei Snowflake beginnen sie bei 0.
Zugehörige EWIs¶
Keine zugehörigen EWIs.
Datensatztyp-Definition¶
Dies ist eine Übersetzungsreferenz zur Konvertierung der Datensatzdeklaration von Oracle in Snowflake
Warnung
Dieser Abschnitt ist noch in Arbeit, die Informationen können sich in Zukunft noch ändern.
Bemerkung
Einige Teile des Ausgabecodes wurden aus Gründen der Übersichtlichkeit weggelassen.
Beschreibung¶
Eine Datensatzvariable ist eine zusammengesetzte Variable, deren interne Komponenten, Felder genannt, unterschiedliche Datentypen haben können. Der Wert einer Datensatzvariablen und die Werte ihrer Felder können sich ändern.
Sie referenzieren eine ganze Datensatzvariable über ihren Namen. Sie referenzieren ein Datensatzfeld mit der Syntax
record.field.Sie können eine Datensatzvariable auf jede dieser Arten erstellen:
Definieren Sie einen Datensatztyp und deklarieren Sie dann eine Variable dieses Typs.
Verwenden Sie
%ROWTYPE, um eine Datensatzvariable zu deklarieren, die entweder eine vollständige oder teilweise Zeile einer Datenbanktabelle oder -ansicht darstellt.Verwenden Sie
%TYPE, um eine Datensatzvariable vom gleichen Typ wie eine zuvor deklarierte Datensatzvariable zu deklarieren.
Für die Übersetzung wird die Typdefinition durch einen semistrukturierten Datentyp OBJECT ersetzt und anschließend werden seine Verwendungen in allen Operationen entsprechend geändert.
To define a Record type, the syntax is as follows:
Um eine Variable dieses Typs zu deklarieren:
Beispielhafte Quellcode-Muster¶
Bemerkung
Einige Teile des Ausgabecodes wurden aus Gründen der Übersichtlichkeit weggelassen.
Datensatzinitialisierung und -zuweisung¶
In diesem Beispiel wird versucht, zwei neue Zeilen mit Hilfe einer Datensatzvariablen einzufügen, die mitten in der Prozedur neu zugewiesen wird.
Oracle¶
Ergebnis¶
COL1 |
COL2 |
|---|---|
1,5 |
1 |
2.5 |
2 |
Snowflake¶
Beachten Sie, wie die Neuzuweisungen durch ein OBJECT_INSERT ersetzt werden, die aktualisiert, wenn die Spalte bereits existiert, und wie die VALUES-Klausel durch ein SELECT ersetzt wird.
Ergebnis¶
COL1 |
COL2 |
|---|---|
1,5 |
1 |
2.5 |
2 |
%ROWTYPE Record and Values Record¶
Da es die Operationen sind, die die Struktur definieren, können diese Definitionen durch einen OBJECT-Datentyp ersetzt werden, aber die Werte des Datensatzes müssen zerlegt werden, da das Einfügen des Datensatzes „wie er ist“ nicht unterstützt wird.
Oracle¶
Ergebnis¶
COL1 |
COL2 |
COL3 |
|---|---|---|
1 |
„Hello“ |
25-DEC-20 |
Snowflake¶
Please note finally how the OBJECT variable needs to be initialized to add the information to it.
Ergebnis¶
COL1 |
COL2 |
COL3 |
|---|---|---|
1 |
„Hello“ |
25-DEC-20 |
Abrufen von Daten in einem Datensatz¶
Oracle¶
Ergebnis¶
DBMS-OUTPUT |
|---|
1 |
Hello |
25-DEC-20 |
Snowflake¶
Bitte beachten Sie das zusätzliche OBJECT_CONSTRUCT in der Cursor-Definition. Dadurch kann ein OBJECT extrahiert werden, das dann verwendet werden kann, um die FETCH-Anweisung nahtlos zu migrieren.
Ergebnis¶
DBMS-OUTPUT |
|---|
1 |
Hello |
25-DEC-20 |
Zuweisung einer Datensatzvariable in einem SELECT INTO¶
Diese Transformation besteht darin, die Funktion OBJECT_CONTRUCT zu nutzen, um den Datensatz unter Verwendung der SELECT-Spalten als Argumente zu initialisieren.
Beispiel für Hilfscode¶
Oracle¶
Snowflake¶
Oracle¶
Ergebnis¶
COL1 |
COL2 |
|---|---|
SELECT 1 |
NAME 1 |
SELECT 2 |
NAME 2 |
SELECT 3 |
NAME 3 |
SELECT 4 |
NAME 4 |
Snowflake¶
Ergebnis¶
COL1 |
COL2 |
|---|---|
SELECT 1 |
NAME 1 |
SELECT 2 |
NAME 2 |
SELECT 3 |
NAME 3 |
SELECT 4 |
NAME 4 |
Bekannte Probleme¶
1. The following functionalities are currently not being converted:¶
Abrufen von Daten in einem Datensatz.
Verschachtelte Datensätze (Datensätze in Datensätzen).
Sammlungen innerhalb von Aufzeichnungen.
Zugehörige EWIs¶
[SSC-EWI-0036](../../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/generalEWI. md#ssc-ewi-0036): Datentyp in einen anderen Datentyp konvertiert.
SSC-EWI-0056: CREATE-Typ wird nicht unterstützt
SSC-FDM-0006: Spalte vom Typ ‚number‘ verhält sich in Snowflake möglicherweise nicht ähnlich.
SSC-FDM-OR0042: In Zeitstempel transformierter Datumstyp weist ein anderes Verhalten auf.
SSC-FDM-OR0035: DBMS_OUTPUT. UDF-Implementierung von PUTLINE-Prüfung.
SSC-PRF-0003: Das Abrufen innerhalb einer Schleife wird als komplexes Muster betrachtet; dies kann die Leistung von Snowflake beeinträchtigen.
Definition des Varray-Typs¶
Dies ist eine Übersetzungsreferenz zur Konvertierung der Varray-Deklaration von Oracle in Snowflake
Warnung
Dieser Abschnitt ist noch in Arbeit, die Informationen können sich in Zukunft noch ändern.
Bemerkung
Dieser Abschnitt gilt für die PL/SQL-Version von Varrays; für die eigenständige Version siehe Definition von Array-Typen.
Bemerkung
Einige Teile des Ausgabecodes wurden aus Gründen der Übersichtlichkeit weggelassen.
Beschreibung¶
Ein Varray (Array mit variabler Größe) ist ein Array, dessen Anzahl der Elemente zwischen null (leer) und der angegebenen Maximalgröße variieren kann.
Um auf ein Element einer Varray-Variablen zuzugreifen, verwenden Sie die Syntax
variable_name(index). Der untere Grenzwert fürindexist 1, der obere Grenzwert ist die aktuelle Anzahl der Elemente. Der obere Grenzwert ändert sich, wenn Sie Elemente hinzufügen oder löschen, aber er kann die maximale Größe nicht überschreiten. Wenn Sie ein Varray speichern und aus der Datenbank abrufen, bleiben seine Indizes und die Reihenfolge der Elemente unverändert.
Für die Übersetzung wird die Typdefinition durch einen semistrukturierten Datentyp ARRAY ersetzt und anschließend werden seine Verwendungen in allen Operationen entsprechend geändert. Bitte beachten Sie, dass die Übersetzung für verschachtelte Tabellen und Varrays identisch ist.
To define a varray type, the syntax is as follows:
Um eine Variable dieses Typs zu deklarieren:
Beispielhafte Quellcode-Muster¶
Varray-Definitionen¶
Dies veranschaulicht, wie Sie auf drei verschiedene Arten ein Varray erstellen und wie Sie diese Definitionen für die Variablen migrieren können.
Oracle¶
Snowflake¶
Varray-Iteration¶
Oracle¶
Ergebnis¶
DBMS-OUTPUT |
|---|
10 |
20 |
30 |
40 |
20 |
30 |
Snowflake¶
Bemerkung
Beachten Sie, dass eine UDF hinzugefügt wurde, um die Funktionalität für die Aktualisierung des Elements zu implementieren.
Diese UDF wird in späteren Revisionen hinzugefügt werden.
UDF¶
Ergebnis¶
DBMS-OUTPUT |
|---|
10 |
20 |
30 |
40 |
20 |
30 |
Bekannte Probleme¶
1. They are currently not being converted¶
SnowConvert AI unterstützt nicht die Übersetzung dieser Elemente.
2. Indexing needs to be modified¶
Die Indizes von Oracle beginnen bei 1, bei Snowflake beginnen sie bei 0.
3. Array Density may not match the original¶
Da der Datentyp ARRAY spärlich werden kann, sollten Sie beim Hinzufügen oder Löschen von Arrays vorsichtig sein. Die Verwendung von ARRAY_COMPACT() nach solchen Operationen kann hilfreich sein, wenn die Dichte ein Problem darstellt.
Zugehörige EWIs¶
SSC-EWI-0058: Die Funktionalität wird derzeit nicht von Snowflake Scripting unterstützt.
SSC-EWI-0062: Die Verwendung des CUSTOM-Typs wurde in ‚variant‘ geändert.
[SSC-EWI-0073](../../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/generalEWI. md#ssc-ewi-0073): Überprüfung der Funktionsäquivalenz ausstehend.
SSC-EWI-OR0108: Die folgende ASSIGNMENT-Anweisung wird von Snowflake Scripting nicht unterstützt.
SSC-FDM-OR0035: DBMS_OUTPUT. UDF-Implementierung von PUTLINE-Prüfung.
Sammlung Bulk-Operationen¶
Dies ist eine Übersetzungsreferenz zur Konvertierung der Sammlung Bulk-Operationen von Oracle in Snowflake
Warnung
Dieser Abschnitt ist noch in Arbeit, die Informationen können sich in Zukunft ändern
Bemerkung
Einige Teile des Ausgabecodes wurden aus Gründen der Übersichtlichkeit weggelassen.
Beschreibung¶
Die
BULKCOLLECT-Klausel, ein Feature von Bulk-SQL, gibt die Ergebnisse von SQL bis PL/SQL in Batches und nicht einzeln zurück.Die
BULKCOLLECT-Klausel kann vorkommen in der:
SELECT``INTO-Anweisung
FETCH-Anweisung
RETURNINGINTO-Klausel von:
DELETE-Anweisung
INSERT-Anweisung
UPDATE-Anweisung
EXECUTE``IMMEDIATE-AnweisungMit der Klausel
BULKCOLLECTruft jede der vorangehenden Anweisungen ein ganzes Resultset ab und speichert es in einer oder mehreren Sammlungsvariablen in einer einzigen Operation (was effizienter ist als die Verwendung einer Schleifenanweisung, um eine Ergebniszeile nach der anderen abzurufen).
(Oracle PL/SQL Language Reference BULK COLLECT CLAUSE)
In diesem Abschnitt finden Sie einige Umgehungsmöglichkeiten für SELECTs und FETCH-Cursor mit BULK-Klauseln.
Beispielhafte Quellcode-Muster¶
Quelltabelle¶
Oracle¶
Snowflake¶
BULK COLLECT von einer Tabelle¶
Oracle¶
Ergebnis¶
DBMS-OUTPUT |
|---|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
Snowflake¶
Gefahr
EXECUTE IMMEDIATE mit der BULK COLLECT-Klausel werden keine Umgehungsmöglichkeiten angeboten.
Bemerkung
Bitte beachten Sie, dass der FETCH-Cursor zwar größtenteils beibehalten werden kann, aus Leistungsgründen aber nach Möglichkeit in SELECT-Anweisungen umgewandelt werden sollte.
Ergebnis¶
DBMS-OUTPUT |
|---|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
– EXECUTE IMMEDIATE NOT EXECUTED, wird nicht unterstützt. |
SELECT INTO-Anweisungsfall¶
In diesem Fall verwendet die Übersetzungsspezifikation RESULTSETs. Lesen Sie die Dokumentation zu den Anweisungen WITH, SELECT und BULK COLLECT INTO hier:
Bekannte Probleme¶
1. Heavy performance issues on FETCH Cursor workaround¶
Die Umgehungsmöglichkeit für den FETCH-Cursor hat aufgrund der temporären Tabelle hohe Leistungsanforderungen. Es wird empfohlen, diese manuell in SELECT-Anweisungen zu migrieren
2. Execute immediate statements are not transformed¶
Sie werden von SnowConvert AI nicht unterstützt, können aber manuell in SELECT-Anweisungen geändert werden.
Zugehörige EWIs¶
SSC-EWI-0058: Die Funktionalität wird derzeit nicht von Snowflake Scripting unterstützt.
SSC-EWI-0062: Die Verwendung des CUSTOM-Typs wurde in ‚variant‘ geändert.
[SSC-EWI-0073](../../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/generalEWI. md#ssc-ewi-0073): Überprüfung der Funktionsäquivalenz ausstehend
SSC-EWI-OR0036: Bei Problemen mit der Auflösung von Typen verhält sich die arithmetische Operation zwischen Zeichenfolge und Datum möglicherweise nicht korrekt.
SSC-EWI-OR0108: Die folgende ASSIGNMENT-Anweisung wird von Snowflake Scripting nicht unterstützt.
SSC-FDM-OR0035: DBMS_OUTPUT. UDF-Implementierung von PUTLINE-Prüfung.
SSC-PRF-0001: Diese Anweisung umfasst die Verwendung von Cursor-Fetch-Bulk-Vorgängen.
SSC-EWI-0030: Die folgende Anweisung enthält Verwendungen von dynamischem SQL.
WITH-, SELECT- und BULKCOLLECTINTO-Anweisungen¶
Gefahr
Dieser Abschnitt ist eine Übersetzungsspezifikation. Die Informationen können sich in Zukunft ändern.
Bemerkung
Einige Teile des Ausgabecodes wurden aus Gründen der Übersichtlichkeit weggelassen.
Beschreibung¶
Dieser Abschnitt ist eine Übersetzungsspezifikation für die Anweisung WITH im Anschluss an eine Anweisung SELECT, die eine Anweisung BULK COLLECT INTO verwendet. Weitere Informationen finden Sie in der folgenden Dokumentation:
[SnowConvert AI – Übersetzung von Bulk Collect](# Bulk-collect-from-a-table).
Beispielhafte Quellcode-Muster¶
Bemerkung
Einige Teile des Ausgabecodes wurden aus Gründen der Übersichtlichkeit weggelassen.
Die folgende Abfrage wird für die folgenden Beispiele verwendet.
Oracle¶
Snowflake¶
1. Inside procedure simple case¶
Gefahr
Dies ist ein Ansatz, der einen Resultset-Datentyp verwendet. Benutzerdefinierte Typen müssen überprüft werden. In der folgenden Snowflake-Dokumentation finden Sie weitere Informationen zu RESULTSETs.
Das folgende Beispiel verwendet einen benutzerdefinierten Typ, der indirekt als Tabelle deklariert ist. Die Übersetzung für diesen Fall implementiert ein RESULTSET als Datentyp in Snowflake. Das Resultset wird in einer Variablen gespeichert, die in einer TABLE() Funktion eingeschlossen zurückgegeben werden muss.
Oracle¶
Ergebnis¶
Bemerkung
Die Abfrage liefert keine Ergebnisse, aber die erwarteten gesammelten Informationen wären die für das Beispiel verwendeten IT-Gehaltsinformationen:
IT_Salary |
|---|
75000 |
80000 |
Gefahr
Eine der Beschränkungen von RESULTSETs ist, dass sie nicht als Tabellen verwendet werden können. Z.B.: select * from my_result_set; (Dies ist ein Fehler, lesen Sie die folgende Dokumentation für weitere Informationen).
Snowflake¶
Ergebnis¶
SALARY |
|---|
77500 |
80000 |
2. Simple case for iterations: FOR LOOP statement¶
Im folgenden Fall geht es darum, eine Übersetzung für die Iteration mit FOR...LOOP zu definieren. In diesem Fall ist der benutzerdefinierte Typ implizit eine Tabelle, so dass es möglich ist, einen Cursor für die Iteration zu verwenden. Lesen Sie die folgende Dokumentation, um mehr zu erfahren:
Snowflake-Dokumentation über die Rückgabe einer Tabelle für einen Cursor.
In diesem Fall ist es notwendig, einen Cursor für die Iteration zu erstellen. Lesen Sie die folgende Dokumentation zur zur Syntax der Cursorzuweisung.
Oracle¶
Ergebnis¶
Snowflake¶
Ergebnis¶
SIMPLE_PROCEDURE |
|---|
Durchschnittsgehalt für IT-Abteilung: 77.500 |
Bekannte Probleme¶
1. Resulset limitations.¶
Es gibt Beschränkungen bei der Verwendung des Datentyps RESULTSET. Lesen Sie die folgende Snowflake Dokumentation , um mehr zu erfahren. Markante Beschränkungen sind die folgenden:
Deklarieren einer Spalte vom Typ RESULTSET
Deklarieren eines Parameters vom Typ RESULTSET
Deklarieren des Rückgabetyps einer gespeicherten Prozedur als RESULTSET.
2. Execute statements with Bulk Collect clause are not supported.¶
Lesen Sie die folgende Dokumentation Bulk Collect from a Table.
Zugehörige EWIs¶
SSC-EWI-0058: Die Funktionalität wird derzeit nicht von Snowflake Scripting unterstützt.
SSC-EWI-0062: Die Verwendung des CUSTOM-Typs wurde in ‚variant‘ geändert.
[SSC-EWI-0073](../../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/generalEWI. md#ssc-ewi-0073): Überprüfung der Funktionsäquivalenz ausstehend
SSC-EWI-OR0036: Bei Problemen mit der Auflösung von Typen verhält sich die arithmetische Operation zwischen Zeichenfolge und Datum möglicherweise nicht korrekt.
SSC-EWI-OR0072: Prozedurales Element wird nicht unterstützt
SSC-EWI-OR0104: Nicht verwendbare Sammlungsvariable.
SSC-FDM-0006: Spalte vom Typ ‚number‘ verhält sich in Snowflake möglicherweise nicht ähnlich.
SSC-FDM-OR0035: DBMS_OUTPUT. UDF-Implementierung von PUTLINE-Prüfung.