SnowConvert AI – Oracle – PL/SQL in Snowflake Scripting¶
ASSIGNMENT STATEMENT¶
Beschreibung¶
Die ASSIGNMENT-Anweisung setzt den Wert eines Datenelements auf einen gültigen Wert.\ (Oracle PL/SQL-Sprachreferenz – ASSIGNMENT-Anweisung)
Bemerkung
Einige Teile des Ausgabecodes wurden aus Gründen der Übersichtlichkeit weggelassen.
Syntax der ASSIGNMENT-Anweisung von Oracle¶
Syntax der ASSIGNMENT-Anweisung von Snowflake Scripting¶
Bemerkung
LET-Schlüsselwort wird für Zuweisungsanweisungen nicht benötigt, wenn die Variable zuvor deklariert wurde. Weitere Informationen finden Sie in der Dokumentation Snowflake-Zuweisung.
Beispielhafte Quellcode-Muster¶
1. Scalar Variables¶
Oracle¶
Ergebnis¶
COL1 |
COL2 |
COL3 |
COL4 |
|---|---|---|---|
1 |
4.2 |
Hello World |
1 |
Snowflake Scripting¶
Ergebnis¶
COL1 |
COL2 |
COL3 |
COL4 |
|---|---|---|---|
1.000000000000000000 |
4.000000000000000000 |
Hello World |
1 |
Warnung
Die Transformation für einige Datentypen muss aktualisiert werden, dies kann zu anderen Ergebnissen führen. Zum Beispiel rundet NUMBER auf NUMBER den Wert und das Dezimalkomma geht verloren. Es gibt bereits ein Work-Element zu diesem Thema.
2. Out Parameter Assignment¶
Weitere Informationen darüber, wie die Ausgabeparameter umgewandelt werden, finden Sie im folgenden Artikel Ausgabeparameter.
3. Not Supported Assignments¶
Oracle¶
Snowflake Scripting¶
Bekannte Probleme¶
1. Several Unsupported Assignment Statements¶
Derzeit werden Transformationen für Cursor-, Auflistungs-, Datensatz- und benutzerdefinierte Typvariablen von Snow Scripting nicht unterstützt. Daher werden Zuweisungsanweisungen, die diese Variablen verwenden, kommentiert und als nicht unterstützt gekennzeichnet. Die Änderung dieser Variablen in semistrukturierte Daten von Snowflake könnte in einigen Szenarien eine Umgehungsmöglichkeit schaffen.
CALL¶
Beschreibung¶
Es gibt zwei Arten von CALL-Anweisungen in Oracle:
1-CALL-Anweisung:¶
Verwenden Sie die Anweisung
CALL, um eine Routine (eine eigenständige Prozedur oder Funktion oder eine innerhalb eines Typs oder Pakets definierte Prozedur oder Funktion) aus SQL heraus auszuführen. (Oracle SQL Language Reference CALL)
2-Call-Spezifikation:¶
Eine Call-Spezifikation deklariert eine Java-Methode oder ein C-Unterprogramm, so dass es von PL/SQL aus aufgerufen werden kann. (Oracle SQL Language Reference Call Specification)
The CALL Specification is not supported in Snowflake Scripting since this is part of the development libraries for C and JAVA, not a SQL statement, therefore this statement is not transformed.
Bekannte Probleme¶
Es wurden keine Probleme gefunden.
Zugehörige EWIs¶
Keine zugehörigen EWIs.
CASE¶
Übersetzungsreferenz für CASE-Anweisungen
Beschreibung¶
Die Anweisung
CASEwählt aus einer Sequenz von Bedingungen aus und führt eine entsprechende Anweisung aus. Weitere Informationen zu Oracle CASE finden Sie hier.
Bemerkung
Einige Teile des Ausgabecodes wurden aus Gründen der Übersichtlichkeit weggelassen.
Simple Case¶
Syntax der CASE-Anweisung von Oracle¶
Syntax der CASE-Anweisung von Snowflake Scripting¶
Searched Case¶
Syntax der CASE-Anweisung von Oracle¶
Syntax der CASE-Anweisung von Snowflake Scripting¶
Beispielhafte Quellcode-Muster¶
Sample auxiliary table¶
Oracle¶
Snowflake¶
Simple Case¶
Oracle¶
Ergebnis¶
COL |
|---|
Schlecht |
Keine solche Bewertung |
Ausgezeichnet |
Snowflake Scripting¶
Ergebnis¶
COL |
|---|
Schlecht |
Keine solche Bewertung |
Ausgezeichnet |
Searched Case¶
Oracle¶
Ergebnis¶
COL |
|---|
Schlecht |
Keine solche Bewertung |
Ausgezeichnet |
Snowflake Scripting¶
Ergebnis¶
COL |
|---|
Schlecht |
Keine solche Bewertung |
Ausgezeichnet |
Bekannte Probleme¶
1. Labels are not supported in Snowflake Scripting CASE syntax¶
Die Beschriftungen werden je nach ihrer Position auskommentiert oder entfernt.
Zugehörige EWIs¶
SSC-EWI-0094: Label-Deklaration wird nicht unterstützt.
SSC-FDM-0007: Element mit fehlenden Abhängigkeiten.
COMPOUND STATEMENTS¶
Dieser Abschnitt ist eine Übersetzungsspezifikation für die zusammengesetzten Anweisungen
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.
Allgemeine Beschreibung¶
Die Grundeinheit eines PL/SQL-Quellprogramms ist der Block, in dem zusammengehörige Deklarationen und Anweisungen zusammengefasst werden.
Ein PL/SQL-Block wird durch die Schlüsselwörter DECLARE, BEGIN, EXCEPTION, und END definiert. Diese Schlüsselwörter unterteilen den Block in einen deklarativen Teil, einen ausführbaren Teil und einen Teil zur Behandlung von Ausnahmen. Es wird nur der ausführbare Teil benötigt. (PL/SQL Anonyme Blöcke)
Der BEGIN...END-Block in Oracle kann die folgenden Eigenschaften haben:
Verschachtelt sein.
Enthält die Anweisung DECLARE für Variablen.
Gruppieren Sie mehrere SQL oder PL/SQL-Anweisungen.
Oracle-Syntax¶
Snowflake-Syntax¶
Bemerkung
In Snowflake kann ein BEGIN/END-Block das Top-Level-Konstrukt innerhalb eines anonymen Blocks sein (Snowflake-Dokumentation).
Beispielhafte Quellcode-Muster¶
1. IF-ELSE block¶
Weitere Informationen zu IF-Anweisungen finden Sie in der folgenden Dokumentation: Übersetzung von SnowConvert AI IF-Anweisungen und Dokumentation zu IF-Anweisungen von Snowflake
Oracle¶
Ergebnis¶
Snowflake¶
Warnung
Wenn Sie eine Prozedur oder eine benutzerdefinierte Funktion (UDF) aufrufen, müssen Sie Code generieren, um die Äquivalenz als Aufrufergebnisse-Variable zu unterstützen. Wird in diesem Fall zum Drucken der Informationen verwendet.
Sehen Sie sich die [hier](../ Built-in-packages.md#put_line-procedure) verwendete benutzerdefinierte Funktion (UDF) genauer an.
Ergebnis¶
2. CASE statement¶
Weitere Informationen dazu finden Sie in der folgenden Dokumentation: Dokumentation zu SnowConvert AI CASE-Anweisungen und Dokumentation zur CASE-Anweisung von Snowflake
Oracle¶
Ergebnis¶
Snowflake¶
Warnung
Wenn Sie eine Prozedur oder eine benutzerdefinierte Funktion (UDF) aufrufen, müssen Sie Code generieren, um die Äquivalenz als Aufrufergebnisse-Variable zu unterstützen. Wird in diesem Fall zum Drucken der Informationen verwendet.
Sehen Sie sich die [hier](../ Built-in-packages.md#put_line-procedure) verwendete benutzerdefinierte Funktion (UDF) genauer an.
Ergebnis¶
3. LOOP statements¶
Weitere Informationen dazu finden Sie in der folgenden Dokumentation: Dokumentation zu SnowConvert AI FOR LOOP-Anweisungen, Dokumentation zu LOOP-Anweisungen und Dokumentation zu FOR-Anweisungen von Snowflake.
Oracle¶
Ergebnis¶
Snowflake¶
Erste Registerkarte¶
Ergebnis¶
4. Procedure call and OUTPUT parameters¶
Ein anonymer Block in Oracle kann Aufrufe von Prozeduren enthalten. Darüber hinaus kann die folgende Dokumentation hilfreich sein: Dokumentation zu SnowConvert AI-Prozeduren.
Im folgenden Beispiel werden die OUT-Parameter verwendet; Informationen zu der aktuellen Transformation finden Sie hier: SnowConvert AI OUTPUT-Parameter.
Oracle¶
Ergebnis¶
Snowflake¶
Ergebnis¶
5. Alter session¶
Weitere Informationen finden Sie in der folgenden Dokumentation: Dokumentation zu ALTER SESSION.
Beachten Sie, dass in Oracle der Block BEGIN...END die Anweisung EXECUTE IMMEDIATE verwenden sollte, um die Anweisungen Alter Session auszuführen.
Oracle¶
Ergebnis¶
Snowflake¶
Ergebnis¶
6. Cursors¶
Das folgende Beispiel zeigt die Verwendung von CURSOR innerhalb eines BEGIN...END-Blocks. Weitere Informationen finden Sie in der folgenden Dokumentation: Dokumentation zu CURSOR.
Oracle¶
Ergebnis¶
Snowflake¶
Warnung
Wenn Sie eine Prozedur oder eine benutzerdefinierte Funktion (UDF) aufrufen, müssen Sie Code generieren, um die Äquivalenz als Aufrufergebnisse-Variable zu unterstützen. Wird in diesem Fall zum Drucken der Informationen verwendet.
Sehen Sie sich die [hier](../ Built-in-packages.md#put_line-procedure) verwendete benutzerdefinierte Funktion (UDF) genauer an.
Ergebnis¶
7. Select statements¶
Weitere Informationen finden Sie in der folgenden Dokumentation: Dokumentation zu ‚SELECT‘-Anweisungen.
Oracle¶
Ergebnis¶
Snowflake¶
Warnung
Wenn Sie eine Prozedur oder eine benutzerdefinierte Funktion (UDF) aufrufen, müssen Sie Code generieren, um die Äquivalenz als Aufrufergebnisse-Variable zu unterstützen. Wird in diesem Fall zum Drucken der Informationen verwendet.
Sehen Sie sich die [hier](../ Built-in-packages.md#put_line-procedure) verwendete benutzerdefinierte Funktion (UDF) genauer an.
Ergebnis¶
8. Join Statements¶
Weitere Informationen dazu finden Sie in der folgenden Dokumentation: Dokumentation zu JOIN-Anweisungen.
Oracle¶
Ergebnis¶
Snowflake¶
Warnung
Wenn Sie eine Prozedur oder eine benutzerdefinierte Funktion (UDF) aufrufen, müssen Sie Code generieren, um die Äquivalenz als Aufrufergebnisse-Variable zu unterstützen. Wird in diesem Fall zum Drucken der Informationen verwendet.
Sehen Sie sich die [hier](../ Built-in-packages.md#put_line-procedure) verwendete benutzerdefinierte Funktion (UDF) genauer an.
9. Exception handling¶
Oracle¶
Ergebnis¶
Snowflake¶
Warnung
ZERO_DIVIDE-Ausnahme wird in Snowflake nicht unterstützt.
Ergebnis¶
Bekannte Probleme¶
Nicht unterstützte GOTO-Anweisungen in Oracle.
Ausnahmen, die GOTO-Anweisungen verwenden, können ebenfalls betroffen sein.
Die Cursor-Funktionalität kann im Rahmen der derzeitigen Übersetzungsbeschränkungen angepasst werden.
Zugehörige EWIs¶
SSC-EWI-0027:Die folgende Anweisung verwendet eine Variable/ein Literal mit einer ungültigen Abfrage und wird nicht ausgeführt.
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-FDM-OR0035: DBMS_OUTPUT. UDF-Implementierung von PUTLINE-Prüfung.
SSC-FDM-0006: Spalte vom Typ ‚number‘ verhält sich in Snowflake möglicherweise nicht ähnlich.
SSC-PRF-0004: Diese Anweisung hat Verwendungen für Cursor-FOR-Schleife.
SSC-EWI-0030: Die folgende Anweisung enthält Verwendungen von dynamischem SQL.
CONTINUE¶
Übersetzungsreferenz zur Konvertierung der CONTINUE-Anweisung von Oracle in Snowflake Scripting
Beschreibung¶
Die
CONTINUE-Anweisung beendet die aktuelle Iteration einer Schleife, entweder bedingt oder ohne Bedingungen, und übergibt die Kontrolle an die nächste Iteration entweder der aktuellen Schleife oder einer umschließenden, beschrifteten Schleife.\ (Oracle PL/SQL-Sprachreferenz – CONTINUE-Anweisung)
Bemerkung
Einige Teile des Ausgabecodes wurden aus Gründen der Übersichtlichkeit weggelassen.
Syntax der CONTINUE-Anweisung von Oracle¶
Syntax der CONTINUE-Anweisung von Snowflake Scripting¶
Beispielhafte Quellcode-Muster¶
1. Simple Continue¶
Der Code überspringt die Anweisung INSERT, indem er CONTINUE verwendet.
Hinweis
Dieser Fall ist funktionell gleichwertig.
Oracle¶
Ergebnis¶
ITERATOR |
|---|
Snowflake Scripting¶
Ergebnis¶
ITERATOR |
|---|
2. Continue with condition¶
Der Code überspringt das Einfügen gerader Zahlen durch die Verwendung von CONTINUE.
Bemerkung
Dieser Fall ist funktionell nicht gleichwertig, aber Sie können die Bedingung in eine IF-Anweisung umwandeln.
Oracle¶
Ergebnis¶
ITERATOR |
|---|
1 |
3 |
5 |
7 |
9 |
11 |
13 |
15 |
17 |
19 |
21 |
Snowflake Scripting¶
Ergebnis¶
ITERATOR |
|---|
1 |
3 |
5 |
7 |
9 |
11 |
13 |
15 |
17 |
19 |
21 |
3. Continue with label and condition¶
Der Code überspringt Zeile 19, und die innere Schleife wird nur einmal ausgeführt, da CONTINUE über das Label immer zur äußeren Schleife springt.
Hinweis
Dieser Fall ist funktionell äquivalent zur Anwendung des gleichen Prozesses wie das vorherige Beispiel.
Bemerkung
Beachten Sie, dass die Labels auskommentiert werden.
Oracle¶
Ergebnis¶
ITERATOR |
|---|
I1 |
K1 |
K2 |
K3 |
K4 |
K5 |
I2 |
I3 |
I4 |
I5 |
I6 |
I7 |
I8 |
I9 |
I10 |
I11 |
Snowflake Scripting¶
Ergebnis¶
ITERATOR |
|---|
I1 |
K1 |
K2 |
K3 |
K4 |
K5 |
I2 |
I3 |
I4 |
I5 |
I6 |
I7 |
I8 |
I9 |
I10 |
I11 |
Bekannte Probleme¶
Es wurden keine Probleme gefunden.
Zugehörige EWIs¶
SSC-EWI-0094: Label-Deklaration wird nicht unterstützt.
DECLARE¶
Übersetzungsreferenz zur Konvertierung der DECLARE-Anweisung von Oracle in Snowflake Scripting
Bemerkung
Einige Teile des Ausgabecodes wurden aus Gründen der Übersichtlichkeit weggelassen.
Beschreibung¶
Die Oracle DECLARE-Anweisung ist ein optionaler Teil der PL/SQL Blockanweisung. Es ermöglicht die Erstellung von Variablen, Konstanten, Prozedurendeklarationen und -definitionen, Funktionsdeklarationen und -definitionen, Ausnahmen, Cursors, Typen und vielen anderen Anweisungen. Weitere Informationen zu Oracle DECLARE finden Sie hier.
Syntax der DECLARE-Anweisung von Oracle¶
Syntax der DECLARE-Anweisung von Snowflake Scripting¶
Beispielhafte Quellcode-Muster¶
Variablendeklaration¶
Syntax der Variablendeklaration von Oracle¶
Syntax der Variablendeklaration in Snowflake Scripting¶
Oracle¶
Snowflake Scripting¶
Konstanten-Deklaration¶
Warnung
Konstanten werden in Snowflake Scripting nicht unterstützt, aber sie werden in Variablen umgewandelt, um die Verhaltensweise zu simulieren.
Syntax der Konstantendeklaration von Oracle¶
Syntax der Variablendeklaration in Snowflake Scripting¶
Oracle¶
Snowflake Scripting¶
Cursordeklaration¶
Syntax der Cursordeklaration von Oracle¶
Syntax der Cursordeklaration von Snowflake Scripting¶
Gefahr
Die Oracle _ Cursordeklaration _ ist nicht erforderlich, so dass sie im Ausgabecode auskommentiert werden kann. Die _ Cursordefinition _ wird anstelle von verwendet und in die Snowflake Scripting _ Cursordeklaration _ umgewandelt. Lesen Sie bitte den Abschnitt CURSOR um weitere Informationen über die Cursordefinition zu erhalten.
Ausnahmedeklaration¶
Auf die Ausnahmendeklaration kann manchmal auch die Initialisierung der Ausnahme folgen. Die aktuelle Transformation nimmt beide und fügt sie in die Snowflake Scripting-Ausnahmendeklaration ein. Das Original PRAGMA EXCEPTION_INIT wird auskommentiert.
Syntax der Ausnahmedeklaration von Oracle¶
Syntax der Ausnahmedeklaration von Snowflake Scripting¶
Oracle¶
Snowflake Scripting¶
Nicht unterstützte Fälle¶
Die folgenden Oracle-Deklarationsanweisungen werden vom Snowflake Scripting-Deklarationsblock nicht unterstützt:
Deklaration von Cursorvariablen
Deklaration von Sammlungsvariablen
Deklaration von Datensatzvariablen
Typdefinition (alle Varianten)
Deklaration und Definition von Funktionen
Deklaration und Definition von Prozeduren
Bekannte Probleme¶
1. The variable declarations with NOT NULL constraints are not supported by Snow Scripting.¶
Die Erstellung von Variablen mit der Einschränkung NOT NULL führt in Snow Scripting zu einem Fehler.
2. The cursor declaration has no equivalent to Snowflake Scripting.¶
Die Oracle-Cursordeklaration ist nutzlos, daher kann sie im Ausgabecode auskommentiert werden. Die Cursordefinition wird stattdessen verwendet und in die Snowflake Scripting Cursordeklaration umgewandelt.
3. The exception code exceeds Snowflake Scripting limits.¶
Der Oracle-Ausnahmecode wird entfernt, wenn er die Grenzen des Snowflake Scripting-Codes überschreitet. Der Ausnahmecode muss eine Ganzzahl zwischen -20000 und -20999 sein.
3. The not supported cases.¶
Es gibt einige Oracle-Deklarationsanweisungen, die vom Snowflake Scripting-Deklarationsblock nicht unterstützt werden, so dass sie möglicherweise auskommentiert werden und eine Warnung hinzugefügt wird.
Zugehörige EWIs¶
SSC-EWI-OR0051: PRAGMA EXCEPTION_INIT wird nicht unterstützt.
SSC-EWI-OR0099: Der Ausnahmecode überschreitet die Snowflake Scripting-Beschränkung
SSC-FDM-0016: Konstanten werden von Snowflake Scripting nicht unterstützt. Sie wurde in eine Variable umgewandelt.
SSC-FDM-OR0025: „Not Null“-Einschränkung wird in Snowflake-Prozeduren nicht unterstützt.
DEFAULT PARAMETERS¶
In diesem Artikel geht es um die aktuelle Transformation der Standardparameter und wie deren Funktionalität emuliert wird.
Bemerkung
Einige Teile des Ausgabecodes wurden aus Gründen der Übersichtlichkeit weggelassen.
Beschreibung¶
Ein Standardparameter ist ein Parameter, der einen Wert hat, falls im Prozedur- oder Funktionsaufruf kein Argument übergeben wird. Da Snowflake keine Standardparameter unterstützt, fügt SnowConvert AI den Standardwert in den Prozedur- oder Funktionsaufruf ein.
In der Deklaration wird die DEFAULT VALUE-Klausel des Parameters entfernt. Beide Syntaxen, das Symbol : = und die Klausel DEFAULT werden unterstützt.
Beispielhafte Quellcode-Muster¶
Sample auxiliaryy code¶
Oracle¶
Snowflake¶
Standardparameter-Deklaration¶
Oracle¶
Snowflake Scripting¶
Aufrufen von Prozeduren mit Standardparametern¶
Oracle¶
Snowflake Scripting¶
Um zu überprüfen, ob die Funktionalität korrekt emuliert wird, führt die folgende Abfrage die Prozedur und SELECT aus der zuvor erwähnten Tabelle aus.
Oracle¶
Ergebnis¶
COL1 |
COL2 |
|---|---|
10 |
15 |
10 |
1 |
10 |
15 |
10 |
2 |
1 |
2 |
Snowflake Scripting¶
Ergebnis¶
COL1 |
COL2 |
|---|---|
10 |
15 |
10 |
1 |
10 |
15 |
10 |
2 |
1 |
2 |
Aufrufen von Prozeduren mit benannten Argumenten und Standardparametern¶
Oracle¶
Snowflake Scripting¶
Um zu überprüfen, ob die Funktionalität korrekt emuliert wird, führt die folgende Abfrage die Prozedur und SELECT aus der zuvor erwähnten Tabelle aus.
Oracle¶
Ergebnis¶
COL1 |
COL2 |
COL3 |
|---|---|---|
10 |
20 |
30 |
10 |
20 |
30 |
20 |
30 |
10 |
100 |
30 |
10 |
100 |
10 |
30 |
100 |
10 |
1000 |
Snowflake Scripting¶
Ergebnis¶
COL1 |
COL2 |
COL3 |
|---|---|---|
10 |
20 |
30 |
10 |
20 |
30 |
20 |
30 |
10 |
100 |
30 |
10 |
100 |
10 |
30 |
100 |
10 |
1000 |
Bekannte Probleme¶
1. Keine Probleme gefunden
Zugehörige EWIs¶
Keine zugehörigen EWIs.
EXECUTE IMMEDIATE¶
Übersetzungsreferenz zur Konvertierung der EXECUTE IMMEDIATE-Anweisung von Oracle in Snowflake Scripting
Beschreibung¶
Die Anweisung
EXECUTEIMMEDIATEerstellt und führt eine dynamische Anweisung SQL in einer einzigen Operation aus.Native dynamische SQL verwendet die Anweisung
EXECUTEIMMEDIATE, um die meisten dynamischen SQL-Anweisungen zu verarbeiten. (Oracle PL/SQL Language Reference EXECUTE IMMEDIATE Statement)
EXECUTE IMMEDIATE-Syntax von Oracle¶
Snowflake Scripting unterstützt diese Anweisung, wenn auch mit einigen funktionalen Unterschieden. Weitere Informationen über das Snowflake-Pendant finden Sie in der Snowflake-Dokumentation EXECUTE IMMEDIATE.
EXECUTE IMMEDIATE-Syntax von Snowflake Scripting¶
Beispielhafte Quellcode-Muster¶
In den nächsten Beispielen wird eine Tabelle erstellt und versucht, die Tabelle mit Execute Immediate zu löschen.
Verwendung einer fest codierten Zeichenfolge¶
Oracle¶
Snowflake Scripting¶
Speichern der Zeichenfolge in einer Variablen¶
Oracle¶
Snowflake Scripting¶
Verkettung für Parameter in dynamischen Anweisungen¶
Oracle¶
Snowflake Scripting¶
Transformation der USING-Klausel¶
Oracle¶
Ergebnisse¶
COL1 |
|---|
1 |
Snowflake Scripting¶
Bemerkung
Bitte beachten Sie, dass Parameter in der USING-Klausel in Snowflake Scripting in Klammern gesetzt werden müssen.
Ergebnisse¶
COL1 |
|---|
1 |
Bekannte Probleme¶
1. Immediate Execution results cannot be stored in variables.¶
SnowScripting unterstützt weder INTO- noch BULK COLLECT INTO-Klauseln. Aus diesem Grund müssen die Ergebnisse auf anderem Wege übermittelt werden.
2. Numeric Placeholders¶
Numerische Namen für Platzhalter werden derzeit nicht von SnowConvert AI erkannt, aber es gibt ein Work-Element, um dieses Problem zu beheben.
3. Argument Expressions are not supported by Snowflake Scripting¶
In Oracle ist es möglich, Ausdrücke als Argumente für die verwendende Klausel zu verwenden. Dies wird jedoch von Snowflake Scripting nicht unterstützt und ist daher auskommentiert.
4. Dynamic SQL Execution queries may be marked incorrectly as non-runnable.¶
In einigen Szenarien kann eine Ausführungsanweisung unabhängig davon, ob sie sicher oder nicht sicher ist, kommentiert werden. Bitte berücksichtigen Sie dies:
Oracle¶
Snowflake Scripting¶
Bemerkung
Bitte beachten Sie, dass Parameter in der USING-Klausel in Snowflake Scripting in Klammern gesetzt werden müssen.
Zugehörige EWIs¶
SSC-EWI-0027: Variable mit ungültiger Abfrage.
SSC-EWI-0030: Die folgende Anweisung enthält Verwendungen von dynamischem SQL.
EXIT¶
Übersetzungsreferenz zur Konvertierung der EXIT-Anweisung von Oracle in Snowflake Scripting
Bemerkung
Einige Teile des Ausgabecodes wurden aus Gründen der Übersichtlichkeit weggelassen.
Beschreibung¶
Die
EXIT-Anweisung beendet die aktuelle Iteration einer Schleife, entweder bedingt oder ohne Bedingungen, und übergibt die Kontrolle an das Ende entweder der aktuellen Schleife oder einer umschließenden, beschrifteten Schleife.\ (Oracle PL/SQL-Sprachreferenz – EXIT-Anweisung)
Syntax der EXIT-Anweisung von Oracle¶
Syntax der EXIT-Anweisung von Snowflake Scripting¶
Beispielhafte Quellcode-Muster¶
Bemerkung
Beachten Sie, dass Sie EXITmit BREAKändern können und alles wie gewohnt funktioniert.
1. Simple Exit¶
Der Code überspringt die Anweisung INSERT, indem er EXIT verwendet.
Hinweis
Dieser Fall ist funktionell gleichwertig.
Oracle¶
Ergebnis¶
ITERATOR |
|---|
Snowflake Scripting¶
Ergebnis¶
ITERATOR |
|---|
2. Exit with condition¶
Der Code verlässt die Schleife, wenn der Iterator größer als 5 ist.
Hinweis
Dieser Fall ist funktionell gleichwertig, indem die Bedingung in eine IF- Anweisung umgewandelt wird.
Oracle¶
Ergebnis¶
ITERATOR |
|---|
1 |
2 |
3 |
4 |
5 |
6 |
Snowflake Scripting¶
Ergebnis¶
ITERATOR |
|---|
1 |
2 |
3 |
4 |
5 |
6 |
3. Exit with label and condition¶
Der Code unterbricht beide Schleifen, indem er die Anweisung EXIT verwendet, die auf die äußere Schleife verweist.
Hinweis
Dieser Fall ist funktionell äquivalent zur Anwendung des gleichen Prozesses wie das vorherige Beispiel.
Bemerkung
Beachten Sie, dass die Labels auskommentiert werden.
Oracle¶
Ergebnis¶
ITERATOR |
|---|
I1 |
K1 |
K2 |
K3 |
K4 |
K5 |
Snowflake Scripting¶
Ergebnis¶
ITERATOR |
|---|
I1 |
K1 |
K2 |
K3 |
K4 |
K5 |
Bekannte Probleme¶
Es wurden keine Probleme gefunden.
Zugehörige EWIs¶
SSC-EWI-0094: Label-Deklaration wird nicht unterstützt.
EXPRESSIONS¶
Übersetzungsreferenz von Oracle-Ausdrücken in Snow Scripting
Bemerkung
Einige Teile des Ausgabecodes wurden aus Gründen der Übersichtlichkeit weggelassen.
Beschreibung¶
In der folgenden Tabelle finden Sie eine Zusammenfassung, wie Sie die verschiedenen Oracle-Ausdruckstypen in Snow Scripting umwandeln können.
Syntax |
Status der Konvertierung |
Notizen |
|---|---|---|
Teilweise |
||
Teilweise |
||
Teilweise |
||
Teilweise |
||
Vollständig |
N/A |
|
Vollständig |
N/A |
|
Nicht übersetzt |
Snowflake hat kein natives Äquivalent für Oracle-Sammlungen. Siehe Sammlungen und Datensätze. |
|
Nicht übersetzt |
Snowflake hat kein natives Äquivalent für Oracle-Datensatztypen. Siehe Sammlungen und Datensätze. |
Teilweise unterstützte gemeinsame Szenarien¶
Oracle-Konstanten¶
Oracle¶
Ergebnis¶
COL |
|---|
CONSTANT-TEXT |
Snowflake¶
Ergebnis¶
COL |
|---|
CONSTANT-TEXT |
Nicht unterstützte numerische Ausdrücke¶
Oracle¶
Ergebnis¶
COL |
|---|
4 |
104 |
11 |
3 |
Nicht unterstützte boolesche Ausdrücke¶
Oracle¶
Zugehörige EWIs.¶
SSC-FDM-0016: Konstanten werden von Snowflake Scripting nicht unterstützt. Sie wurde in eine Variable umgewandelt.
FOR LOOP¶
Beschreibung¶
Bei jeder Iteration der Anweisung
FORLOOPwerden die Anweisungen ausgeführt, der Index wird entweder erhöht oder verringert und die Kontrolle kehrt an den Anfang der Schleife zurück. (Oracle PL/SQL Language Reference FOR LOOP Statement).
Oracle-Syntax¶
Snowflake Scripting-Syntax¶
Snowflake Scripting unterstützt FOR LOOP, das eine bestimmte Anzahl von Schleifen durchläuft. Die Ober- und Untergrenzen müssen INTEGER sein. Weitere Informationen finden Sie in der Snowflake Scripting-Dokumentation.
Die Verhaltensweise von Oracle FOR LOOP kann auch durch die Verwendung der Anweisungen geändert werden:
Beispielhafte Quellcode-Muster¶
1. FOR LOOP¶
Hinweis
Dieser Fall ist funktionell gleichwertig.
Oracle-Beispiel für FOR LOOP¶
Snowflake Scripting-Beispiel für FOR LOOP¶
2. FOR LOOP with additional clauses¶
Oracle-Beispiel für FOR LOOP¶
Snowflake Scripting-Beispiel für FOR LOOP¶
3. FOR LOOP with multiple conditions¶
Oracle-Beispiel für FOR LOOP¶
Snowflake Scripting-Beispiel für FOR LOOP¶
4. FOR LOOP with unsupported format¶
Oracle-Beispiel für FOR LOOP¶
Snowflake Scripting-Beispiel für FOR LOOP¶
Warnung
Die Transformation für benutzerdefinierte Typen wird für Snowflake Scripting derzeit nicht unterstützt.
Bekannte Probleme¶
1. For With Multiple Conditions¶
Oracle erlaubt mehrere Bedingungen in einer einzigen FOR LOOP, Snowflake Scripting hingegen erlaubt nur eine Bedingung pro FOR LOOP. Nur die erste Bedingung wird migriert und die anderen werden bei der Transformation ignoriert. Prüfen Sie SSC-FDM-OR0022.
Oracle¶
Snowflake Scripting-Beispiel für FOR LOOP¶
2. Veränderliche vs. unveränderliche Zählervariable
Oracle erlaubt es, den Wert der Variable FOR LOOP innerhalb der Schleife zu ändern. Die aktuelle Dokumentation enthält diese Funktion, aber Snowflake empfiehlt, dies zu vermeiden. Das Ändern des Werts dieser Variable kann zu fehlerhaften Ergebnissen bei Snowflake Scripting führen.
3. Ganzzahl vs. Float-Zahl für Ober- oder Untergrenze
Snowflake Scripting erlaubt nur den Typ INTEGER oder einen Ausdruck, der zu INTEGER als Begrenzung für die FOR LOOP-Bedingung ausgewertet wird. Gleitende Zahlen werden auf- oder abgerundet und verändern die ursprüngliche Begrenzung.
4. Von Oracle nicht unterstützte Klauseln
Oracle erlaubt zusätzliche Klauseln für die FOR LOOP-Bedingung. Wie die BY-Klausel für ein schrittweises Inkrement in der Bedingung. Und die WHILE- und WHEN-Klausel für boolesche Ausdrücke. Diese zusätzlichen Klauseln werden in Snowflake Scripting nicht unterstützt und bei der Transformation ignoriert. Überprüfen Sie SSC-EWI-OR0101.
Oracle¶
Snowflake Scripting¶
5. Nicht unterstützte Formate
Oracle erlaubt verschiedene Arten von Bedingungen für FOR LOOP. Es unterstützt boolesche Ausdrücke, Sammlungen, Datensätze … Snowflake Scripting unterstützt jedoch nur FOR LOOP mit definierten Ganzzahlen als Begrenzungen. Alle anderen Formate sind als nicht unterstützt gekennzeichnet und erfordern zusätzlichen manuellen Aufwand für die Umwandlung. Überprüfen Sie SSC-EWI-OR0103.
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-OR0100: „For Loop With Multiple Conditions“ wird derzeit von Snowflake Scripting nicht unterstützt. Es wird nur die erste Bedingung verwendet.
SSC-EWI-OR0101: Eine bestimmte For-Loop-Klausel wird derzeit von Snowflake Scripting nicht unterstützt.
SSC-EWI-OR0103: Das For-Loop-Format wird derzeit von Snowflake Scripting nicht unterstützt.
FORALL¶
Beschreibung¶
Die Anweisung
FORALLführt eine Anweisung DML mehrfach aus, mit unterschiedlichen Werten in denVALUES- undWHERE-Klauseln. (Oracle PL/SQL Language Reference FORALL Statement).
Oracle-Syntax¶
Warnung
Snowflake Scripting ist nicht direkt gleichwertig mit der Anweisung FORALL, kann aber mit verschiedenen Umgehungsmöglichkeiten emuliert werden, um eine funktionale Gleichwertigkeit zu erreichen.
Beispielhafte Quellcode-Muster¶
Datenkonfiguration¶
Oracle¶
Tabellen 1¶
Tabellen 2¶
Snowflake¶
Tabellen 1¶
Tabellen 2¶
1. FORALL With Collection of Records¶
Oracle¶
Hinweis
Die drei folgenden Fälle haben die gleiche Transformation zu Snowflake Scripting und sind funktional gleichwertig.
Quelle¶
Ergebnisse¶
COLUMN1 |
COLUMN2 |
|---|
Snowflake¶
FORALL mit Sammlung von Datensätzen¶
Ergebnisse¶
COLUMN1 |
COLUMN2 |
|---|---|
1.000000000000000000 |
2.000000000000000000 |
1.000000000000000000 |
2.000000000000000000 |
2.000000000000000000 |
3.000000000000000000 |
3.000000000000000000 |
4.000000000000000000 |
4.000000000000000000 |
5.000000000000000000 |
5.000000000000000000 |
6.000000000000000000 |
Bemerkung
Die EWIs SSC-PRF-0001 und SSC-PRF-0003 werden in jedem FETCH BULK COLLECT-Vorkommen in die FORALL-Anweisung eingefügt.
2. FORALL With INSERT INTO¶
Oracle¶
FORALL-Beispiel¶
Ergebnisse¶
COLUMN1 |
COLUMN2 |
|---|---|
1 |
2 |
1 |
2 |
2 |
3 |
3 |
4 |
4 |
5 |
5 |
6 |
Snowflake¶
FORALL-Äquivalent¶
Ergebnisse¶
COLUMN1 |
COLUMN2 |
|---|---|
1.000000000000000000 |
2.000000000000000000 |
1.000000000000000000 |
2.000000000000000000 |
2.000000000000000000 |
3.000000000000000000 |
3.000000000000000000 |
4.000000000000000000 |
4.000000000000000000 |
5.000000000000000000 |
5.000000000000000000 |
6.000000000000000000 |
3. FORALL With Multiple Fetched Collections¶
Oracle¶
Mit INSERT INTO¶
Mit UPDATE¶
Ergebnisse von INSERT INTO¶
COLUMN1 |
COLUMN2 |
|---|---|
1 |
2 |
2 |
3 |
3 |
4 |
4 |
5 |
5 |
6 |
1 |
2 |
Ergebnisse von UPDATE¶
COLUMN1 |
COLUMN2 |
|---|---|
1 |
2. |
Snowflake¶
Mit INSERT INTO¶
Mit UPDATE¶
Ergebnisse von INSERT INTO¶
COLUMN1 |
COLUMN2 |
|---|---|
1.000000000000000000 |
2.000000000000000000 |
1.000000000000000000 |
2.000000000000000000 |
2.000000000000000000 |
3.000000000000000000 |
3.000000000000000000 |
4.000000000000000000 |
4.000000000000000000 |
5.000000000000000000 |
5.000000000000000000 |
6.000000000000000000 |
Ergebnisse von UPDATE¶
COLUMN1 |
COLUMN2 |
|---|---|
1.000000000000000000 |
2.000000000000000000 |
4. FORALL With Record of Collections¶
Oracle¶
FORALL-Beispiel¶
Ergebnisse¶
COLUMN1 |
COLUMN2 |
|---|---|
1 |
2 |
1 |
2 |
2 |
3 |
3 |
4 |
4 |
5 |
5 |
6 |
Snowflake¶
FORALL-Äquivalent in Scripting¶
Ergebnisse¶
COLUMN1 |
COLUMN2 |
|---|---|
1.000000000000000000 |
2.000000000000000000 |
1.000000000000000000 |
2.000000000000000000 |
2.000000000000000000 |
3.000000000000000000 |
3.000000000000000000 |
4.000000000000000000 |
4.000000000000000000 |
5.000000000000000000 |
5.000000000000000000 |
6.000000000000000000 |
5. FORALL With Dynamic SQL¶
Oracle¶
FORALL-Beispiel¶
Ergebnisse¶
COLUMN1 |
COLUMN2 |
|---|---|
1 |
2 |
1 |
2 |
2 |
3 |
3 |
4 |
4 |
5 |
5 |
6 |
Snowflake¶
FORALL-Äquivalent¶
Ergebnisse¶
COLUMN1 |
COLUMN2 |
|---|---|
1.000000000000000000 |
2.000000000000000000 |
1.000000000000000000 |
2.000000000000000000 |
2.000000000000000000 |
3.000000000000000000 |
3.000000000000000000 |
4.000000000000000000 |
4.000000000000000000 |
5.000000000000000000 |
5.000000000000000000 |
6.000000000000000000 |
6. FORALL With Literal SQL¶
Oracle¶
FORALL-Beispiel¶
Ergebnisse¶
COLUMN1 |
COLUMN2 |
|---|---|
1 |
2 |
1 |
2 |
2 |
3 |
3 |
4 |
4 |
5 |
5 |
6 |
Snowflake¶
FORALL-Äquivalent¶
Ergebnisse¶
COLUMN1 |
COLUMN2 |
|---|---|
1 |
2 |
1 |
2 |
2 |
3 |
3 |
4 |
4 |
5 |
5 |
6 |
7. FORALL With Parametrized Cursors¶
Oracle¶
FORALL-Beispiel¶
Ergebnisse¶
COLUMN1 |
COLUMN2 |
|---|---|
1 |
2 |
1 |
2 |
2 |
3 |
3 |
4 |
4 |
5 |
5 |
6 |
Snowflake¶
FORALL-Äquivalent¶
Ergebnisse¶
COLUMN1 |
COLUMN2 |
|---|---|
1 |
2 |
1 |
2 |
2 |
3 |
3 |
4 |
4 |
5 |
5 |
6 |
8. FORALL Without LOOPS¶
Oracle¶
FORALL-Beispiel¶
Ergebnisse¶
COLUMN1 |
COLUMN2 |
|---|---|
1 |
2 |
1 |
2 |
2 |
3 |
3 |
4 |
4 |
5 |
5 |
6 |
Snowflake¶
FORALL-Äquivalent¶
Ergebnisse¶
COLUMN1 |
COLUMN2 |
|---|---|
1.000000000000000000 |
2.000000000000000000 |
1.000000000000000000 |
2.000000000000000000 |
2.000000000000000000 |
3.000000000000000000 |
3.000000000000000000 |
4.000000000000000000 |
4.000000000000000000 |
5.000000000000000000 |
5.000000000000000000 |
6.000000000000000000 |
9. FORALL With UPDATE Statements¶
Oracle¶
FORALL-Beispiel¶
Ergebnisse¶
COLUMN1 |
COLUMN2 |
|---|---|
54321 |
2 |
Snowflake¶
FORALL-Äquivalent¶
Ergebnisse¶
COLUMN1 |
COLUMN2 |
|---|---|
54321 |
2 |
10. FORALL With DELETE Statements¶
Oracle¶
FORALL-Beispiel¶
Ergebnisse¶
Snowflake¶
FORALL-Äquivalent¶
Ergebnisse¶
11. FORALL With PACKAGE References¶
Oracle¶
FORALL-Beispiel¶
Ergebnisse¶
COLUMN1 |
COLUMN2 |
|---|---|
1 |
2 |
10 |
10 |
Snowflake¶
FORALL-Äquivalent¶
Ergebnisse¶
COLUMN1 |
COLUMN2 |
|---|---|
1.000000000000000000 |
2.000000000000000000 |
10.000000000000000000 |
10.000000000000000000 |
Warnung
Die obige Transformation funktioniert nur, wenn die im Paket definierte Variable ein Datensatz von Collections ist.
12. FORALL With MERGE Statements¶
Oracle¶
FORALL-Beispiel¶
Ergebnisse¶
COLUMN1 |
COLUMN2 |
|---|---|
1 |
4 |
2 |
3 |
3 |
4 |
4 |
5 |
5 |
6 |
Snowflake¶
FORALL-Äquivalent¶
Ergebnisse¶
COLUMN1 |
COLUMN2 |
|---|---|
2.000000000000000000 |
3.000000000000000000 |
3.000000000000000000 |
4.000000000000000000 |
4.000000000000000000 |
5.000000000000000000 |
5.000000000000000000 |
6.000000000000000000 |
1.000000000000000000 |
4.000000000000000000 |
Warnung
Die obige Transformation funktioniert nur, wenn die Anweisung SELECT innerhalb von MERGE eine Auswahl aus der Tabelle DUAL trifft.
13. Default FORALL transformation¶
Bemerkung
Möglicherweise sind auch die Bulk Cursor-Hilfefunktionen für Sie von Interesse.
Oracle¶
FORALL-Beispiel¶
Ergebnisse¶
COLUMN1 |
COLUMN2 |
|---|---|
1 |
2 |
1 |
2 |
2 |
3 |
3 |
4 |
4 |
5 |
5 |
6 |
Snowflake¶
FORALL-Äquivalent¶
Ergebnisse¶
COLUMN1 |
COLUMN2 |
|---|---|
1.000000000000000000 |
2.000000000000000000 |
1.000000000000000000 |
2.000000000000000000 |
2.000000000000000000 |
3.000000000000000000 |
3.000000000000000000 |
4.000000000000000000 |
4.000000000000000000 |
5.000000000000000000 |
5.000000000000000000 |
6.000000000000000000 |
Bemerkung
Diese Transformation wird nur durchgeführt, wenn keine der zuvor genannten Transformationen möglich ist.
14. Multiple FORALL inside a LOOP clause¶
Bemerkung
Dieses Muster findet Anwendung, wenn es mehr als eine FORALL in derselben Prozedur gibt und diese die folgende Struktur aufweist.
Oracle¶
FORALL-Beispiel¶
Ergebnisse¶
COLUMN1 |
COLUMN2 |
|---|---|
54321 |
2 |
54321 |
2 |
54321 |
3 |
54321 |
4 |
54321 |
5 |
54321 |
6 |
Snowflake¶
FORALL-Äquivalent¶
Ergebnisse¶
COLUMN1 |
COLUMN2 |
|---|---|
54321 |
2 |
54321 |
2 |
54321 |
3 |
54321 |
4 |
54321 |
5 |
54321 |
6 |
15. Multiple FORALL inside different LOOP clauses¶
Bemerkung
Dieses Muster findet Anwendung, wenn es mehr als eine FORALL in derselben Prozedur gibt und diese die folgende Struktur aufweist.
Oracle¶
FORALL-Beispiel¶
Ergebnisse¶
COLUMN1 |
COLUMN2 |
|---|---|
54321 |
2 |
54321 |
2 |
54321 |
3 |
54321 |
4 |
54321 |
5 |
54321 |
6 |
Snowflake¶
FORALL-Äquivalent¶
Ergebnisse¶
COLUMN1 |
COLUMN2 |
|---|---|
54321 |
2 |
54321 |
2 |
54321 |
3 |
54321 |
4 |
54321 |
5 |
54321 |
6 |
16. FORALL with MERGE INTO with LOG ERRORS¶
Warnung
Dieses Muster ist noch nicht implementiert
Oracle¶
LOG-ERRORS¶
Snowflake¶
LOG-ERRORS¶
17. FORALL with INSERT with LOG ERRORS¶
Warnung
Dieses Muster ist noch nicht implementiert
Oracle¶
LOG-ERRORS¶
Snowflake¶
LOG-ERRORS¶
Bekannte Probleme¶
Es wurden keine Probleme gefunden.
Zugehörige EWIs¶
SSC-EWI-0030: Die folgende Anweisung enthält Verwendungen von dynamischem SQL.
[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](../../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/generalEWI. md#ssc-ewi-0056): Typ erstellen wird nicht unterstützt.
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-OR0049: Paketkonstanten in zustandsabhängigen Paketen werden noch nicht unterstützt.
SSC-FDM-0006: Spalte vom Typ ‚number‘ verhält sich in Snowflake möglicherweise nicht ähnlich.
SSC-FDM-0015: Referenzierter kundenspezifischer Typ in der Abfrage nicht gefunden.
SSC-PRF-0001: Diese Anweisung umfasst die Verwendung von Cursor-Fetch-Bulk-Vorgängen.
SSC-PRF-0003: Das Abrufen innerhalb einer Schleife wird als komplexes Muster betrachtet; dies kann die Leistung von Snowflake beeinträchtigen.
IF¶
Beschreibung¶
Die Anweisung IF führt eine Sequenz von einer oder mehreren Anweisungen aus oder überspringt sie, je nach dem Wert eines BOOLEAN-Ausdrucks. Weitere Informationen zu Oracle IF finden Sie hier.
Beispielhafte Quellcode-Muster¶
Sample auxiliary table¶
Mögliche IF Variationen¶
Oracle¶
Code 1¶
Code 2¶
Code 3¶
Code 4¶
Ergebnis 1¶
COL1 |
|---|
ein/e |
Ergebnis 2¶
COL1 |
|---|
Unerwartete Eingabe. |
Ergebnis 3¶
COL1 |
|---|
drei |
Ergebnis 4¶
COL1 |
|---|
Unerwartete Eingabe. |
Snowflake Scripting¶
Code 1¶
Code 2¶
Code 3¶
Code 4¶
Ergebnis 1¶
COL1 |
|---|
ein/e |
Ergebnis 2¶
COL1 |
|---|
Unerwartete Eingabe. |
Ergebnis 3¶
COL1 |
|---|
drei |
Ergebnis 4¶
COL1 |
|---|
Unerwartete Eingabe. |
Bekannte Probleme¶
Es wurden keine Probleme gefunden.
Zugehörige EWIs¶
Keine zugehörigen EWIs.
IS EMPTY¶
Dies ist eine Übersetzungsreferenz für die Konvertierung der IS EMPTY-Anweisung von Oracle in Snowflake
Warnung
Dieser Abschnitt ist noch in Arbeit; die Informationen können sich in Zukunft ändern.
Beschreibung¶
Verwenden Sie die Bedingungen IS [NOT] EMPTY, um zu testen, ob eine angegebene verschachtelte Tabelle leer ist, unabhängig davon, ob irgendwelche Elemente der Sammlung NULL sind. (Dokumentation).
Oracle-Syntax¶
Beispielhafte Quellcode-Muster¶
Oracle¶
Das folgende Beispiel zeigt die Verwendung der Anweisung IS EMPTY. Die Anweisung wird auf eine verschachtelte Tabelle angewendet, die eine UDT als Definitionstyp verwendet. Die Ausgabe zeigt die Namen der Mitarbeiter an, die keine Telefonnummer haben.
Ausgabe¶
EMP_NAME |
|---|
Jane Smith |
Snowflake¶
Die unten gezeigte Snowflake-Abfrage ist die Entsprechung der Funktionalität der Anweisung IS EMPTY. Insbesondere die Anweisung IS EMPTY unterscheidet zwischen einem NULL- und einem EMPTY-Objekt.
Beachten Sie, dass die benutzerdefinierten Typen in VARIANT umgewandelt werden. Der Typ VARIANT in Snowflake ist in der Lage, Objekte und Arrays zu speichern. Da es sich bei einer verschachtelten Tabelle um eine Sequenz von Informationen handelt, ist der Typ ARRAY der geeignetste Typ, um sie neu zu definieren und zu überprüfen, ob das Objekt ARRAY leer ist.
Die ARRAY_SIZE äquivalente Lösung erlaubt auch die Frage nach der Nullbarkeit der verschachtelten Tabelle (transformiert in VARIANT). Mit anderen Worten, der Typ VARIANT kann auch NULLs und leere ARRAYs speichern.
Ausgabe¶
EMP_NAME |
|---|
Jane Smith |
Andere mögliche Kombinationen¶
| Description | Oracle | Snowflake |
|---|---|---|
| Ask for a IS NOT EMPTY | | |
| Ask for NULL instead of EMPTY | | |
Bekannte Probleme¶
1. Benutzerdefinierte Typen werden in den Typ VARIANT umgewandelt.¶
Da benutzerdefinierte Typen nicht unterstützt werden, werden sie in Variantentypen umgewandelt, die unter Umständen manuellen Aufwand erfordern, um einige Funktionalitäten zu gewährleisten.
Auf der folgenden Seite finden Sie weitere Informationen:
2. Verschachtelte Tabellen werden nicht unterstützt.¶
Verschachtelte Tabellen werden derzeit nicht unterstützt. Der beste Ansatz auf der Grundlage dieser Äquivalenz ist, verschachtelte Tabellen als Variant zu behandeln, aber Arrays mit JSON-Daten darin zu deklarieren und die Snowflake-Funktion PARSE_JSON auszuführen, um die verschachtelten Informationen aufzufüllen.
Auf den folgenden Seiten finden Sie weitere Informationen:
3. INSERT-Anweisungen werden für benutzerdefinierte Typen nicht unterstützt.¶
Da benutzerdefinierte Typen nicht unterstützt werden, werden auch die INSERT-Anweisungen für diese Typen nicht unterstützt. Speziell in verschachtelten Tabellen muss die Anweisung INSERT INTO... VALUES in INSERT INTO...SELECT geändert werden, da die Funktion ARRAY_CONSTRUCT in diesem Muster verwendet werden soll.
Auf der folgenden Seite finden Sie weitere Informationen:
4. Die Logik sollte an ARRAY-Typen angepasst werden.¶
Da die verschachtelten Tabellen gleichwertig in VARIANT umgewandelt werden und sich wie ARRAYsverhalten sollten, müssen die Funktionalität und Logik der Implementierung von Prozeduren und der Interaktion mit den Daten angepasst werden.
Sehen Sie sich die folgenden Beispiele an:
4.1 Gleichwertigkeit der Prozeduren¶
Oracle¶
Snowflake¶
Ausgabe¶
PROC1 |
|---|
IS EMPTY |
4.2 SELECT-Anweisungen¶
Die Ausgaben können von den Tabellen auf ARRAYs abweichen.
Oracle¶
Ausgabe¶
PHONE_NUMBER |
|---|
1234567890 |
Snowflake¶
Ausgabe¶
PHONE_NUMBERS_COL |
|---|
[ 1234567890 ] |
Zugehörige EWIs¶
[SSC-EWI-0056](../../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/generalEWI. md#ssc-ewi-0056): Typ erstellen wird nicht 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-OR0035: Die Tabellenfunktion wird nicht unterstützt, wenn sie als Sammlung von Ausdrücken verwendet wird.
SSC-FDM-0006: Spalte vom Typ ‚number‘ verhält sich in Snowflake möglicherweise nicht ähnlich.
SSC-FDM-0015: Referenzierter kundenspezifischer Typ in der Abfrage nicht gefunden.
SSC-FDM-OR0035: DBMS_OUTPUT. UDF-Implementierung von PUTLINE-Prüfung.
LOCK TABLE¶
Bemerkung
Nicht relevante Anweisung.
Warnung
Beachten Sie, dass diese Anweisung aus der Migration entfernt wurde, da es sich um eine nicht relevante Syntax handelt. Das bedeutet, dass sie in Snowflake nicht erforderlich ist.
Beschreibung¶
In Oracle ermöglicht die Anweisung LOCK TABLE den expliziten Erwerb einer gemeinsamen oder exklusiven Tabellensperre für die angegebene Tabelle. Die Sperre der Tabelle hält bis zum Ende der aktuellen Transaktion an. Weitere Informationen finden Sie hier.
Syntax
Beispielhafte Quellcode-Muster¶
Tabelle sperren¶
Beachten Sie, dass in diesem Beispiel die Anweisung LOCK TABLE gelöscht wurde. Das liegt daran, dass Snowflake Sperren auf eine andere Art und Weise durch Transaktionen handhabt.
Oracle¶
Snowflake¶
LOG ERROR¶
Bemerkung
Einige Teile des Ausgabecodes wurden aus Gründen der Übersichtlichkeit weggelassen.
Beschreibung¶
Die Anweisung
FORALLführt eine Anweisung DML mehrfach aus, mit unterschiedlichen Werten in denVALUES- undWHERE-Klauseln. (Oracle PL/SQL Language Reference FORALL Statement).
Oracle-Syntax¶
Warnung
Snowflake Scripting ist nicht direkt gleichwertig mit der Anweisung FORALL, kann aber mit verschiedenen Umgehungsmöglichkeiten emuliert werden, um eine funktionale Gleichwertigkeit zu erreichen.
Beispielhafte Quellcode-Muster¶
Datenkonfiguration¶
Oracle¶
Tabellen¶
Snowflake¶
Tabellen¶
1. MERGE INTO Inside a FORALL¶
Oracle¶
Hinweis
Die drei folgenden Fälle haben die gleiche Transformation zu Snowflake Scripting und sind funktional gleichwertig.
Fall 1¶
Snowflake¶
FORALL mit Sammlung von Datensätzen¶
2. FORALL With INSERT INTO¶
Oracle¶
FORALL-Beispiel¶
Ergebnisse¶
COLUMN1 |
COLUMN2 |
|---|---|
1 |
2 |
1 |
2 |
2 |
3 |
3 |
4 |
4 |
5 |
5 |
6 |
Snowflake¶
FORALL-Äquivalent¶
Ergebnisse¶
COLUMN1 |
COLUMN2 |
|---|---|
1.000000000000000000 |
2.000000000000000000 |
1.000000000000000000 |
2.000000000000000000 |
2.000000000000000000 |
3.000000000000000000 |
3.000000000000000000 |
4.000000000000000000 |
4.000000000000000000 |
5.000000000000000000 |
5.000000000000000000 |
6.000000000000000000 |
3. FORALL With Multiple Fetched Collections¶
Oracle¶
Mit INSERT INTO¶
Mit UPDATE¶
Ergebnisse von INSERT INTO¶
COLUMN1 |
COLUMN2 |
|---|---|
1 |
2 |
2 |
3 |
3 |
4 |
4 |
5 |
5 |
6 |
1 |
2 |
Ergebnisse von UPDATE¶
COLUMN1 |
COLUMN2 |
|---|---|
1 |
2 |
Snowflake¶
Mit INSERT INTO¶
Mit UPDATE¶
Ergebnisse von INSERT INTO¶
COLUMN1 |
COLUMN2 |
|---|---|
1.000000000000000000 |
2.000000000000000000 |
1.000000000000000000 |
2.000000000000000000 |
2.000000000000000000 |
3.000000000000000000 |
3.000000000000000000 |
4.000000000000000000 |
4.000000000000000000 |
5.000000000000000000 |
5.000000000000000000 |
6.000000000000000000 |
Ergebnisse von UPDATE¶
COLUMN1 |
COLUMN2 |
|---|---|
1.000000000000000000 |
2.000000000000000000 |
4. FORALL With Record of Collections¶
Oracle¶
FORALL-Beispiel¶
Ergebnisse¶
COLUMN1 |
COLUMN2 |
|---|---|
1 |
2 |
1 |
2 |
2 |
3 |
3 |
4 |
4 |
5 |
5 |
6 |
Snowflake¶
FORALL-Äquivalent in Scripting¶
Ergebnisse¶
COLUMN1 |
COLUMN2 |
|---|---|
1.000000000000000000 |
2.000000000000000000 |
1.000000000000000000 |
2.000000000000000000 |
2.000000000000000000 |
3.000000000000000000 |
3.000000000000000000 |
4.000000000000000000 |
4.000000000000000000 |
5.000000000000000000 |
5.000000000000000000 |
6.000000000000000000 |
5. FORALL With Dynamic SQL¶
Oracle¶
FORALL-Beispiel¶
Ergebnisse¶
COLUMN1 |
COLUMN2 |
|---|---|
1 |
2 |
1 |
2 |
2 |
3 |
3 |
4 |
4 |
5 |
5 |
6 |
Snowflake¶
FORALL-Äquivalent¶
Ergebnisse¶
COLUMN1 |
COLUMN2 |
|---|---|
1.000000000000000000 |
2.000000000000000000 |
1.000000000000000000 |
2.000000000000000000 |
2.000000000000000000 |
3.000000000000000000 |
3.000000000000000000 |
4.000000000000000000 |
4.000000000000000000 |
5.000000000000000000 |
5.000000000000000000 |
6.000 |
6. FORALL Without LOOPS¶
Oracle¶
FORALL-Beispiel¶
Ergebnisse¶
COLUMN1 |
COLUMN2 |
|---|---|
1 |
2 |
1 |
2 |
2 |
3 |
3 |
4 |
4 |
5 |
5 |
6 |
Snowflake¶
FORALL-Äquivalent¶
Ergebnisse¶
COLUMN1 |
COLUMN2 |
|---|---|
1.000000000000000000 |
2.000000000000000000 |
1.000000000000000000 |
2.000000000000000000 |
2.000000000000000000 |
3.000000000000000000 |
3.000000000000000000 |
4.000000000000000000 |
4.000000000000000000 |
5.000000000000000000 |
5.000000000000000000 |
6.000000000000000000 |
7. FORALL With UPDATE Statements¶
Oracle¶
FORALL-Beispiel¶
Ergebnisse¶
COLUMN1 |
COLUMN2 |
|---|---|
54321 |
2 |
Snowflake¶
FORALL-Äquivalent¶
Ergebnisse¶
8. FORALL With DELETE Statements¶
Oracle¶
FORALL-Beispiel¶
Ergebnisse¶
Snowflake¶
FORALL-Äquivalent¶
Ergebnisse¶
Bekannte Probleme¶
Es wurden keine Probleme gefunden.
Zugehörige EWIs¶
SSC-EWI-0030: Die folgende Anweisung enthält Verwendungen von dynamischem SQL.
[SSC-EWI-0036](../../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/generalEWI. md#ssc-ewi-0036): Datentyp in einen anderen Datentyp konvertiert.
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-OR0129: Das TYPE-Attribut konnte nicht aufgelöst werden.
SSC-FDM-0006: Spalte vom Typ ‚number‘ verhält sich in Snowflake möglicherweise nicht ähnlich.
SSC-FDM-OR0031: Die Klausel zur Fehlerprotokollierung in DML-Anweisungen wird von Snowflake nicht unterstützt.
SSC-PRF-0001: Diese Anweisung umfasst die Verwendung von Cursor-Fetch-Bulk-Vorgängen.
SSC-PRF-0003: Das Abrufen innerhalb einer Schleife wird als komplexes Muster betrachtet; dies kann die Leistung von Snowflake beeinträchtigen.
LOOP¶
Übersetzungsreferenz zur Konvertierung der LOOP-Anweisung von Oracle in Snowflake Scripting
Beschreibung¶
Mit jeder Iteration der BASIC
LOOP-Anweisung werden die zugehörigen Anweisungen ausgeführt und die Kontrolle kehrt zum Anfang der Schleife zurück. DieLOOP-Anweisung endet, wenn eine Anweisung innerhalb der Schleife die Kontrolle an außerhalb der Schleife überträgt oder eine Ausnahme auslöst.\ (Oracle PL/SQL-Sprachreferenz – BASIC LOOP-Anweisung)
BASIC LOOP-Syntax von Oracle¶
BASIC LOOP-Syntax von Snowflake Scripting¶
Die Verhaltensweise von Oracle BASIC LOOP kann auch durch die Verwendung der Anweisungen geändert werden:
Beispielhafte Quellcode-Muster¶
Simple Loop-Case¶
Hinweis
Dieser Fall ist funktionell gleichwertig.
Oracle¶
Ergebnis¶
ITERATOR |
|---|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
Snowflake Scripting¶
Ergebnis¶
ITERATOR |
|---|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
Bekannte Probleme¶
Es wurden keine Probleme gefunden.
Zugehörige EWIs¶
Keine zugehörigen EWIs.
OUTPUT PARAMETERS¶
Beschreibung¶
Ein Ausgabeparameter ist ein Parameter, dessen Wert aus der gespeicherten Prozedur/dem Funktionsmodul zurück an den aufrufenden PL/SQL-Block übergeben wird. Da die Ausgabeparameter von Snowflake Scripting nicht unterstützt werden, wurde eine Lösung implementiert, um ihre Funktionalität zu emulieren.
Beispielhafte Quellcode-Muster¶
Einzelner Out-Parameter¶
Oracle¶
Snowflake Scripting¶
Mehrere Out-Parameter¶
Oracle¶
Snowflake Scripting¶
Um zu überprüfen, ob die Funktionalität korrekt emuliert wird, führt die folgende Abfrage die Prozedur und SELECT aus der zuvor erwähnten Tabelle aus.
Oracle¶
Ergebnis¶
COL1 |
COL2 |
|---|---|
123 |
-1 |
123 |
456 |
Snowflake Scripting¶
Ergebnis¶
COL1 |
COL2 |
|---|---|
123.000000000000000000 |
-1 |
123.000000000000000000 |
456.000000000000000000 |
Kundendatentyp OUT-Parameter¶
Wenn der Ausgabeparameter ein Kundendatentyp ist, ähnelt der Prozess einem regulären Datentyp.
Oracle¶
Snowflake Scripting¶
Cursor OUT-Parameter¶
Cursor OUT-Parameter werden in Snowflake nicht unterstützt; dennoch wird eine Problemumgehung, die das Verhalten von Oracle emuliert, auf den transformierten Code angewendet. Die Prozedur mit den OUT-Parametern erzeugt eine temporäre Tabelle mit einem dynamischen Namen, und der Prozeduraufruf definiert den Namen der temporären Tabelle als Zeichenfolge, um die Tabelle innerhalb des Prozeduraufrufs zu erstellen.
Oracle¶
Snowflake Scripting¶
Datensatz OUT-Parameter¶
Datensätze werden in Snowflake nicht nativ unterstützt; es wurde jedoch eine Problemumgehung verwendet, um sie als Ausgabeparameter zu emulieren. Durch die Definition einer OBJECT-Variablen anstelle des Datensatzes können wir die Feldstruktur des Datensatzes emulieren, indem wir das Ergebnis des Out-Parameters jeder Objekteigenschaft zuweisen. Außerdem wird für jedes Datensatzfeld, das als Ausgabeparameter zugewiesen ist, eine neue Variable mit dem Feldtyp generiert.
Oracle¶
Snowflake Scripting¶
Paketvariablen als OUT-Parameter¶
Pakete werden in Snowflake nicht unterstützt, daher sollten deren lokale Members, wie Variablen oder Konstanten, ebenfalls mithilfe einer Problemumgehung erhalten werden. In diesem Szenario würde die Paketvariable mithilfe einer Sitzungsvariablen emuliert, die nach dem Festlegen einer lokalen Variablen mit dem Ausgabeparameterergebnis aktualisiert würde.
Oracle¶
Snowflake Scripting¶
Bekannte Probleme¶
1. Procedures with output parameters inside packages may not work correctly¶
Derzeit gibt es ein Problem bei der Erfassung der semantischen Informationen von Prozeduren, die sich innerhalb von Paketen befinden. Aus diesem Grund kann die Transformation für Ausgabeparameter nur teilweise oder gar nicht funktionieren. Es wird bereits daran gearbeitet, dieses Problem zu lösen.
2. Some data types may not work properly¶
Wie in der Transformation zu sehen ist, wird beim Abrufen des Wertes aus den aufgerufenen Prozeduren eine implizite Transformation von VARIANT auf den von der Variablen angegebenen Typ durchgeführt. Da es viele mögliche Datentypen gibt, können einige Übertragungen fehlschlagen oder andere Daten enthalten.
Zugehörige EWIs¶
SSC-FDM-0006: Spalte vom Typ ‚number‘ verhält sich in Snowflake möglicherweise nicht ähnlich.
SSC-FDM-0007: Element mit fehlenden Abhängigkeiten.
SSC-FDM-0015: Datentyp wird nicht erkannt.
NESTED-PROCEDURES¶
Beschreibung¶
In PL/SQL von Oracle bezieht sich NESTED PROCEDURES auf eine Prozedur, die innerhalb des deklarativen Abschnitts eines anderen PL/SQL-Blocks deklariert und definiert wird. Dieser übergeordnete Block kann eine andere Prozedur, eine Funktion oder ein Pakettext sein. Weitere Informationen finden Sie in der Dokumentation zu Oracle-Prozedurdeklarationen und -Definitionen.
Bemerkung
Die im Folgenden beschriebenen Transformationen sind spezifisch für Prozeduren, die in andere Prozeduren oder Pakete eingebettet sind.
Beispielhafte Quellcode-Muster¶
Modus für IN-Parameter für verschachtelte Prozeduren¶
Das IN-Schlüsselwort wird entfernt, da verschachtelte Snowflake-Prozeduren IN-Parameter nur implizit unterstützen.
Oracle¶
Snowflake Scripting¶
Modus für OUT-Parameter für verschachtelte Prozeduren¶
Die verschachtelten Prozeduren von SnowScript unterstützen keine Ausgabeparameter. Um diese Funktionalität in Snowflake zu replizieren, muss ein RETURN-Typ auf der Grundlage der Ausgabeparameter erstellt werden.
Wenn es nur einen Ausgabeparameter gibt, wird dieser Parameter am Ende zurückgegeben. Bei mehreren Ausgabeparametern wird ein Objektkonstrukt generiert, das deren Werte enthält. Während des Aufrufs werden diese Werte einer Variablen zugewiesen und anschließend werden diese Ergebnisse den entsprechenden Variablen oder Parametern zugewiesen.
Oracle¶
Snowflake Scripting¶
Mehrere OUT Parameter in verschachtelten Prozeduren¶
Oracle¶
Snowflake Scripting¶
Verschachtelte Prozeduren auf mehreren Ebenen¶
Snowflake erlaubt nur eine Verschachtelungsebene für verschachtelte Prozeduren. Daher wird eine verschachtelte Prozedur innerhalb einer anderen verschachtelten Prozedur nicht unterstützt. Tritt ein solcher Fall auf, enthält die Transformation den Fehler !!!RESOLVE EWI!!! /*** SSC-EWI-0111 - ONLY ONE LEVEL OF NESTING IS ALLOWED FOR NESTED PROCEDURES IN SNOWFLAKE. ***/!!!
Oracle¶
Snowflake Scripting¶
Standardwerte in verschachtelten Prozeduren¶
Argumente in verschachtelten Prozeduren unterstützen keine Standardklauseln. Wenn also ein verschachtelter Prozeduraufruf einen optionalen Parameter weglässt, muss der Standardwert für dieses Argument innerhalb des Prozeduraufrufs übergeben werden. SnowConvert AI identifiziert diese Szenarios automatisch und füllt die Prozeduraufrufe entsprechend.
Oracle¶
Snowflake Scripting¶
Überladen von verschachtelten Prozeduren¶
Snowflake unterstützt nicht das Überladen von verschachtelten Prozeduren. Tritt ein solcher Fall auf, wird der EWI SSC-EWI-0112 - NESTED PROCEDURE OVERLOADING IS NOT SUPPORTED hinzugefügt.
Oracle¶
Snowflake Scripting¶
Verschachtelte Prozedur ohne Parameterliste¶
In Snowflake erfordert eine verschachtelte Prozedurdefinition leere Klammern (), um syntaktisch gültig zu sein, wenn es keine Parameter hat; im Gegensatz zu Oracle, wo sie nicht benötigt werden. SnowConvert AI fügt diese automatisch während der Übersetzung hinzu.
Oracle¶
Snowflake Scripting¶
Verschachtelte Prozedur mit REFCURSOR-Ausgabeparameter¶
Oracle¶
Snowflake Scripting¶
Verschachtelte Prozedur mit NOCOPY-Parameteroption¶
In Oracle PL/SQL ist das NOCOPY-Schlüsselwort ein Optimierungshinweis für die OUT- und IN OUT-Prozedurparameter. Standardmäßig übergibt Oracle diese Parameter als Wert, erstellt während des Aufrufs eine teure Kopie der Daten und kopiert diese nach Abschluss wieder zurück. Dies kann bei großen Datenstrukturen einen erheblichen Leistungsaufwand verursachen.
NOCOPY weist Oracle an, stattdessen per Referenz zu übergeben, sodass die Prozedur die ursprünglichen Daten direkt ändern kann. Dies reduziert den Kopieraufwand und verbessert die Leistung. Änderungen sind jedoch sofort wirksam und werden nicht implizit rückgängig gemacht, wenn innerhalb der Prozedur eine unberücksichtigte Ausnahme auftritt.
Deshalb entfernen wir die NOCOPY-Parameteroption und fügen FDM SSC-FDM-OR0050 - EXCEPTIONS WITH NOCOPY PARAMETERS MAY LEAD TO DATA INCONSISTENCY hinzu. Dies liegt daran, dass die Ausführung der Prozedur beim Auftreten einer Ausnahme beendet wird und dadurch die RETURN-Anweisung nicht mehr erreicht wird. Infolgedessen behält die Variable im Declare-Block des Aufrufers ihre Anfangswerte bei, da die Prozedur keinen neuen Wert zur Zuweisung erfolgreich zurückliefert.
Oracle¶
Snowflake Scripting¶
Bekannte Probleme¶
1. Multi-level Nested Procedures¶
Unsere Transformationsbemühungen für verschachtelte Prozeduren in Snowflake beschränken sich auf solche, die direkt innerhalb anderer Prozeduren verschachtelt sind und nur eine Ebene der Verschachtelung unterstützen. Wenn es mehr als eine Verschachtelungsebene gibt oder eine Prozedur in einer eigenständigen Funktion verschachtelt ist, wird die Transformation nicht unterstützt und der EWI !!!RESOLVE EWI!!! /*** SSC-EWI-0111 - ONLY ONE LEVEL OF NESTING IS ALLOWED FOR NESTED PROCEDURES IN SNOWFLAKE. ***/!!! wird hinzugefügt.
2. Nested procedures overloading¶
Außerdem wird das Überladen von verschachtelten Prozeduren in Snowflake nicht unterstützt. In solchen Fällen wird der EWI !!!RESOLVE EWI!!! /*** SSC-EWI-0112 - NESTED PROCEDURE OVERLOADING IS NOT SUPPORTED. ***/!!! hinzugefügt.
3. Nested procedures within anonymous blocks¶
Die Transformation für verschachtelte Prozeduren innerhalb anonymer Blöcke ist derzeit ausstehend. Der EWI !!!RESOLVE EWI!!! /*** SSC-EWI-OR0057 - TRANSFORMATION FOR NESTED PROCEDURE OR FUNCTION IS NOT SUPPORTED IN THIS SCENARIO ***/!!! wird hinzugefügt.
Zugehörige EWIs¶
SSC-FDM-OR0050: Ausnahmen mit
NOCOPY-Parametern können zu Dateninkonsistenzen führen.SSC-EWI-OR0057: Die Transformation von verschachtelten Prozeduren oder Funktionen wird nicht unterstützt.
SSC-EWI-0111: Für verschachtelte Prozeduren in Snowflake ist nur eine Ebene der Verschachtelung erlaubt.
SSC-EWI-0112: Das Überladen von verschachtelten Prozeduren wird nicht unterstützt.
PROCEDURE CALL¶
Übersetzungsreferenz für PROCEDURE CALL, auch bekannt als SUBPROGRAM INVOCATION
Bemerkung
Einige Teile des Ausgabecodes wurden aus Gründen der Übersichtlichkeit weggelassen.
Beschreibung¶
Dieser Abschnitt beschreibt die Syntax für Unterprogrammaufrufe innerhalb von PL-Blöcken, wie Prozeduren oder anonymen Blöcken.
Weitere Informationen zu diesem Thema finden Sie in der Dokumentation zu Unterprogrammen von Oracle: (Oracle PL/SQL Language Reference Subprogram Invocation Statement)
Prozeduraufrufe können nach Snowflake migriert werden, solange es keine optionalen Parameter gibt und ihre Reihenfolge mit den formalen Parametern übereinstimmt. Bitte beachten Sie, dass Prozeduraufrufe in eine CALL-Anweisung umgewandelt werden.
Syntax von Subprogram Invocation von Oracle¶
Snowflake Scripting unterstützt diese Anweisung, wenn auch mit einigen funktionalen Unterschieden.
Syntax von Subprogram Invocation von Snow Scripting¶
Beispielhafte Quellcode-Muster¶
Bemerkung
Betrachten Sie die nächste Tabelle und die Vorgehensweise für die folgenden Beispiele.
Oracle¶
Snowflake¶
Einfacher Call¶
Oracle¶
Ergebnis¶
COL1 |
|---|
1 |
Snowflake Scripting¶
Ergebnis¶
COL1 |
|---|
1 |
Aufrufen einer Prozedur mit einem optionalen Parameter¶
Warnung
Dieses Beispiel beinhaltet manuelle Interventionen zur Behebung einiger funktioneller Unterschiede und dient deren Erläuterung. Weitere Informationen zu diesen Unterschieden finden Sie im Abschnitt Bekannte Probleme unten.
Oracle¶
Ergebnis¶
COL1 |
|---|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
Snowflake Scripting¶
Ergebnis¶
COL1 |
|---|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
Bekannte Probleme¶
1. Default parameter reordering¶
Snowflake requires default parameters to appear at the end of the parameter list. SnowConvert AI automatically reorders them and emits an SSC-FDM-0041 notice. When positional callers are detected, they are converted to named arguments.
2. Named parameters are accepted, but not functionally equivalent¶
Named parameters are supported in Snowflake. When default parameters are reordered, SnowConvert AI automatically converts positional call sites to use named arguments to preserve the original semantics.
3. Calling Subprograms with Out Parameters is not supported¶
Snowflake bietet keine Unterstützung für Parametermodi, aber es wird eine Lösung implementiert, um deren Funktionalität zu emulieren. Weitere Informationen über die Transformation von Ausgabeparametern finden Sie im folgenden Artikel Ausgabeparameter.
Zugehörige EWIs¶
SSC-FDM-0041: Default parameters were reordered to the end of the parameter list.
SSC-FDM-0007: Element mit fehlenden Abhängigkeiten.
RAISE¶
Beschreibung¶
Die Anweisung
RAISElöst ausdrücklich eine Ausnahme aus.Außerhalb eines Ausnahme-Handlers müssen Sie den Namen der Ausnahme angeben. Wenn Sie innerhalb eines Ausnahme-Handlers den Ausnahme-Namen weglassen, löst die Anweisung
RAISEdie aktuelle Ausnahme erneut aus. (Oracle PL/SQL Language Reference Raise Statement)
Die Anweisung wird von Snowflake Scripting vollständig unterstützt, aber bitte beachten Sie, dass es bei einigen COMMIT- und ROLLBACK-Anweisungen zu Unterschieden kommen kann.
Snowflake Scripting bietet Unterstützung für diese Anweisung.
Beispielhafte Quellcode-Muster¶
Einfache Ausnahme auslösen¶
Oracle¶
Ergebnis¶
Snowflake Scripting¶
Ergebnis¶
Bekannte Probleme¶
Es wurden keine Probleme gefunden.
Zugehörige EWIs¶
Keine zugehörigen EWIs.
RAISE_APPICATION_ERROR¶
Übersetzungsreferenz für die raise_application_error-Anweisung.
Allgemeine Beschreibung¶
Mit der Prozedur RAISE_APPLICATION_ERROR können Sie benutzerdefinierte ORA- Fehlermeldungen aus gespeicherten Unterprogrammen ausgeben. Auf diese Weise können Sie Fehler an Ihre Anwendung melden und vermeiden, dass unbehandelte Ausnahmen zurückgegeben werden (Oracle-Dokumentation).
Oracle-Syntax¶
Bemerkung
Die error_number ist eine negative Ganzzahl im Bereich -20000 … -20999 und message ist eine Zeichenfolge mit einer Länge von bis zu 2048 Bytes.
Wenn der optionale dritte Parameter TRUE lautet, wird der Fehler auf dem Stapel der vorherigen Fehler abgelegt. Wenn der Parameter FALSE lautet (die Vorgabe), ersetzt der Fehler alle vorherigen Fehler.
Die entsprechende Anweisung in Snowflake ist die RAISE-Klausel. Dennoch ist es erforderlich, die benutzerdefinierte Ausnahme als Variable zu deklarieren, bevor Sie die RAISE-Anweisung dafür aufrufen.
Snowflake-Syntax¶
Bemerkung
Weitere Informationen finden Sie in der folgenden Snowflake-Dokumentation.
Beispielhafte Quellcode-Muster¶
1. Exception in functions without declaring section¶
In diesem Szenario wird die Funktion ohne einen deklarierenden Abschnitt in eine Prozedur mit der Ausnahmedeklaration übersetzt. Bitte beachten Sie das:
Der Name der Ausnahmevariablen wird in Großbuchstaben angegeben.
Der Name der Ausnahmevariable basiert auf der Beschreibung und eine Endung besteht aus einem Ausnahmecodenamen gefolgt von einer fortlaufenden Nummer.
Der Deklarationsabschnitt wird erstellt, auch wenn die ursprüngliche Funktion oder Prozedur ihn nicht enthält.
Oracle¶
Ausgabe¶
Snowflake¶
Ausgabe¶
2. Exception code number outside limits¶
Im folgenden Beispiel ist die Übersetzung im Body der Prozedur auskommentiert. Das liegt daran, dass der Code außerhalb der in Snowflake geltenden Grenzwerte liegt. Die Lösung besteht darin, den Ausnahmecode für einen verfügbaren Code im Abschnitt Abfrage zu ändern.
Oracle¶
Ausgabe¶
Snowflake¶
Ausgabe¶
3. Exception stack functionality¶
Die Funktionalität des Ausnahmestapels wird in Snowflake nicht unterstützt und wurde aus der Ausnahmedeklaration entfernt.
Oracle¶
Ausgabe¶
Snowflake¶
Ausgabe¶
4. Multiple exceptions with the same exception code¶
Mehrere Ausnahmen mit der gleichen können im deklarierenden Abschnitt und in den RAISE-Anweisungen nebeneinander bestehen.
Oracle¶
Ausgabe¶
Snowflake¶
Ausgabe¶
Bekannte Probleme¶
SQLREM-Funktion überprüft werden kann.
Die Ausnahmecode-Nummer außerhalb der geltenden Grenzen in Snowflake muss in eine verfügbare Code-Ausnahme geändert werden.
„Zu einem Fehlerstapel hinzufügen“ wird nicht unterstützt.
Zugehörige EWIs¶
SSC-EWI-OR0099: Der Ausnahmecode überschreitet die Snowflake Scripting-Beschränkung
SSC-FDM-0029: Die benutzerdefinierte Funktion wurde in eine Snowflake-Prozedur umgewandelt.
SSC-FDM-OR0011: Das boolesche Argument wurde entfernt, da die Option „Add to stack“ nicht unterstützt wird.
UDF CALL¶
Übersetzungsreferenz für den Aufruf von benutzerdefinierten Funktionen (UDFs)
Bemerkung
Einige Teile des Ausgabecodes wurden aus Gründen der Übersichtlichkeit weggelassen.
Beschreibung¶
Wie allgemein bekannt, werden nicht-skalare benutzerdefinierte Funktionen (UDFs) in Oracle in gespeicherte Prozeduren von Snowflake umgewandelt, um kompliziertere Funktionalitäten zu ermöglichen.
Diese Transformation ändert auch die Art und Weise, wie die Funktion aufgerufen wird, indem sie von einem traditionellen Funktionsaufruf zu einem Aufruf einer gespeicherten Prozedur übergeht.
Weitere Einzelheiten zum Aufruf von gespeicherten Prozeduren finden Sie in der hier verfügbaren Dokumentation: PROCEDURE CALL.
Beispielhafte Quellcode-Muster¶
Bemerkung
Betrachten Sie die nächste Funktion und die Tabellen für die folgenden Beispiele.
Oracle¶
Snowflake¶
UDF-Aufruf¶
Oracle¶
Ergebnis¶
Snowflake Scripting¶
Ergebnis¶
UDF-Aufruf innerhalb einer Abfrage¶
Wenn ein Funktionsaufruf in eine Abfrage eingebettet ist, wird der Aufrufprozess komplizierter, da Snowflake nicht in der Lage ist, Prozeduren direkt in Abfragen aufzurufen. Um diese Beschränkung zu überwinden, wird der Aufruf der Prozedur außerhalb der Abfrage verschoben und das Ergebnis einer Variablen zugewiesen. Diese Variable wird dann in der Abfrage referenziert, wodurch eine Funktionsäquivalenz erreicht wird. Dieser Ansatz ermöglicht die Ausführung komplexerer Verhaltensweisen innerhalb von Snowflake-Abfragen unter Einhaltung der prozeduralen Einschränkungen.
Oracle¶
Ergebnis¶
Snowflake Scripting¶
Ergebnis¶
Bekannte Probleme¶
1. Unsupported Usage of UDFs in Queries with Query Dependencies¶
Beim Aufruf von benutzerdefinierten Funktionen (UDFs) innerhalb von Abfragen mit Abfrageabhängigkeiten werden Szenarien mit eingebetteten Funktionen mit Spalten als Argumente nicht unterstützt. Diese Beschränkung ergibt sich, weil auf die Spaltenwerte nicht von außerhalb der Abfrage zugegriffen werden kann. Beispiele für nicht unterstützte Szenarien sind:
\ Die unterstützten Szenarien umfassen Funktionsaufrufe mit anderen Arten von Argumenten, wie z. B. Literalwerte, externe Variablen oder Parameter. Zum Beispiel:
In den unterstützten Szenarien kann die Funktion effektiv migriert werden.
Zugehörige EWIs¶
[SSC-EWI-0073](../../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/generalEWI. md#ssc-ewi-0073): Überprüfung der Funktionsäquivalenz ausstehend.
SSC-FDM-0006: Spalte vom Typ ‚number‘ verhält sich in Snowflake möglicherweise nicht ähnlich.
SSC-FDM-0029: Die benutzerdefinierte Funktion wurde in eine Snowflake-Prozedur umgewandelt.
WHILE¶
Übersetzungsreferenz zur Konvertierung der WHILE-Anweisung von Oracle in Snowflake Scripting
Beschreibung¶
Die
WHILELOOP-Anweisung führt eine oder mehrere Anweisungen aus, während eine BedingungTRUElautet.\ (Oracle PL/SQL-Sprachreferenz – WHILE-Anweisung)
Syntax der WHILE-Anweisung von Oracle¶
Syntax der WHILE-Anweisung von Snowflake Scripting¶
Die Verhaltensweise von Oracle WHILE kann auch durch die Verwendung der Anweisungen geändert werden:
Beispielhafte Quellcode-Muster¶
Simple While-Case¶
Hinweis
Dieser Fall ist funktionell gleichwertig.
Oracle¶
Ergebnis¶
ITERATOR |
|---|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
Snowflake Scripting¶
Ergebnis¶
ITERATOR |
|---|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
Bekannte Probleme¶
Es wurden keine Probleme gefunden.
Zugehörige EWIs¶
Keine zugehörigen EWIs.