SnowConvert AI – Oracle – CREATE FUNCTION¶
CREATE-Funktion von Oracle in Snowflake Snow Scripting
Beschreibung¶
Bemerkung
Einige Teile des Ausgabecodes wurden aus Gründen der Übersichtlichkeit weggelassen.
Eine gespeicherte Funktion (auch Benutzerfunktion oder benutzerdefinierte Funktion genannt) ist eine Reihe von PL/SQL-Anweisungen, die Sie über einen Namen aufrufen können. Gespeicherte Funktionen sind Prozeduren sehr ähnlich, mit dem Unterschied, dass eine Funktion einen Wert an die Umgebung zurückgibt, in der sie aufgerufen wurde. Benutzerfunktionen können als Teil eines SQL-Ausdrucks verwendet werden.
Eine Aufrufspezifikation deklariert eine Java-Methode oder eine Routine der dritten Generation (3GL), so dass sie von PL/SQL aufgerufen werden kann. Sie können auch die Anweisung
CALLSQL verwenden, um eine solche Methode oder Routine aufzurufen. Die Aufrufspezifikation teilt der Oracle-Datenbank mit, welche Java-Methode oder welche benannte Funktion in welcher gemeinsamen Bibliothek bei einem Aufruf aufgerufen werden soll. Sie teilt der Datenbank auch mit, welche Typkonvertierungen für die Argumente und den Rückgabewert vorgenommen werden sollen. Oracle SQL Language Reference Create Function.
Oracle-Syntax¶
For more information, see the Oracle CREATE FUNCTION documentation.
Syntax der CREATE-Funktion von Oracle¶
Snowflake-Syntax¶
Snowflake erlaubt 3 verschiedene Sprachen in den benutzerdefinierten Funktionen:
SQL
JavaScript
Java
Vorerst unterstützt SnowConvert AI nur SQL und JavaScript als Zielsprachen.
For more information, see the Snowflake UDF overview.
SQL¶
Bemerkung
Benutzerdefinierte SQL-Funktionen unterstützen nur eine Abfrage als ihren Body. Sie können aus der Datenbank lesen, dürfen aber nicht in ihr schreiben oder sie verändern (Skalare SQL UDFs).
JavaScript¶
Bemerkung
Benutzerdefinierte JavaScript-Funktionen erlauben mehrere Anweisungen in ihren Bodys, können aber keine Abfrage der Datenbank durchführen. (Skalare JavaScript UDFs).
Beispielhafte Quellcode-Muster¶
Beispielhafte Hilfsdaten¶
Bemerkung
Dieser Code wurde zum besseren Verständnis der Beispiele ausgeführt:
Oracle¶
Snowflake¶
Bekannte Probleme¶
Es wurden keine Probleme gefunden.
Cursor für eine Rückgabevariable¶
Bemerkung
Einige Teile des Ausgabecodes wurden aus Gründen der Übersichtlichkeit weggelassen.
Dieses Muster definiert eine Funktion in Oracle PL/SQL, die einen Cursor verwendet, um einen einzelnen Wert zu holen und ihn zurückzugeben.
Komponenten:
Funktionsdeklaration:
CREATE FUNCTION functionName(parameters) RETURN returnTypeDeklariert die Funktion mit Eingabeparametern und dem Rückgabetyp.
Variable Deklarationen:
Deklariert Variablen, einschließlich der Rückgabevariablen.
Cursordeklaration:
CURSOR cursorName IS SELECT singleColumn FROM... WHERE... [AND col1 = localVar1];Definiert einen Cursor zur Auswahl einer einzelnen Spalte aus einer Tabelle mit optionalen Filterbedingungen.
BEGIN-END-Block:
Zuordnung von Variablen.
Öffnet den Cursor.
Rufen Sie das Ergebnis in die Rückgabevariable ab.
Schließt den Cursor.
Gibt den abgefragten Wert zurück.
In diesem Fall werden die Variablen in einen allgemeinen Tabellenausdruck (CTE) umgewandelt. Sowie die Abfrage innerhalb des Cursors, zu der zusätzlich die FETCH FIRST 1 ROW ONLY-Klausel hinzugefügt wird, um die Verhaltensweise von FETCH CURSOR zu simulieren.
RETURN-Anweisung wird in die endgültige SELECT-Anweisung umgewandelt.
Abfragen¶
Oracle¶
Snowflake¶
Ergebnis¶
FUNC1() |
|---|
2004-05-03. |
Oracle¶
Snowflake¶
Ergebnis¶
FUNC1() |
|---|
2004-05-03. |
Bekannte Probleme¶
Es wurden keine Probleme gefunden.
Zugehörige EWIs¶
SSC-FDM-OR0042: In Zeitstempel transformierter Datumstyp weist ein anderes Verhalten auf.
[SSC-EWI-0073](../../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/generalEWI. md#ssc-ewi-0073): Überprüfung der Funktionsäquivalenz ausstehend.
Cursor mit IF-Anweisung¶
Bemerkung
Einige Teile des Ausgabecodes wurden aus Gründen der Übersichtlichkeit weggelassen.
Dieses Muster definiert eine Funktion, die bedingt einen Cursor verwendet, um einen Wert zu holen und zurückzugeben, der auf einer IF-Anweisung basiert.
Komponenten:
Funktionsdeklaration:
CREATE FUNCTION functionName(parameters) RETURN returnTypeDeklariert die Funktion mit Eingabeparametern und dem Rückgabetyp.
Cursordeklaration:
CURSOR cursorName IS SELECT singleColumn FROM... WHERE... [AND col1 = localVar1];Definiert einen Cursor zur Auswahl einer einzelnen Spalte aus einer Tabelle mit optionalen Filterbedingungen.
Variablendeklaration:
Deklariert Variablen, einschließlich der Rückgabevariablen.
BEGIN-END Block mit IF-Anweisung:
Zuordnung von Variablen.
Prüfen Sie, ob eine Bedingung „true“ ist.
Wenn „true“, wird der Cursor geöffnet, das Ergebnis in die Rückgabevariable geholt, der Cursor geschlossen und der abgefragte Wert zurückgegeben. (Der Cursor kann auch im Block
ELSEgeöffnet werden und muss dieselben Bedingungen erfüllen)Der
ELSE-Block ist optional. Wenn er existiert, sollte er nur eine einzige Anweisung enthalten, die eine Zuweisung oder eineRETURN-Anweisung sein kann.
Die Variablen werden in einen allgemeinen Tabellenausdruck umgewandelt (CTE). Sowie die Abfrage innerhalb des Cursors, zu der zusätzlich die FETCH FIRST 1 ROW ONLY-Klausel hinzugefügt wird, um die Verhaltensweise von FETCH CURSOR zu simulieren.
IF/ELSE Anweisung kann mit Hilfe der CASE EXPRESSION innerhalb der SELECT-Anweisung behandelt werden, so dass Bedingungen innerhalb der Abfragen möglich sind. RETURN-Anweisung wird in die endgültige SELECT-Anweisung umgewandelt.
Abfragen¶
Oracle¶
Snowflake¶
Ergebnis¶
FUNC2(0) |
|---|
NULL |
FUNC2(1) |
|---|
33 |
Oracle¶
Snowflake¶
Ergebnis¶
FUNC2(0) |
|---|
33 |
FUNC2(1) |
|---|
2 |
Oracle¶
Snowflake¶
Ergebnis¶
FUNC2(0) |
|---|
0 |
FUNC2(1) |
|---|
33 |
Bekannte Probleme¶
Es wurden keine Probleme gefunden.
Zugehörige EWIs¶
Keine zugehörigen EWIs.
Multiple IF statement¶
Dieses Muster definiert eine Funktion, die bedingte Anweisungen über lokale Variablen verwendet.
Komponenten:
Funktionsdeklaration:
CREATE FUNCTION functionName(parameters) RETURN returnTypeDeklariert die Funktion mit Eingabeparametern und dem Rückgabetyp.
Variablendeklaration:
Deklariert Variablen, einschließlich der Rückgabevariablen.
BEGIN-END Block mit IF-Anweisung:
Prüfen Sie, ob eine Bedingung „true“ ist.
Jeder Fall wird verwendet, um einen Wert über dieselbe Variable zuzuweisen.
Konvertierung:¶
DECLARE SECTION : variables with default expression are moved to a common table expression.
IF/ELSE-Anweisung kann mit Hilfe der CASE EXPRESSION innerhalb der SELECT-Anweisung behandelt werden, was Bedingungen innerhalb der Abfragen ermöglicht.
RETURN-Anweisung wird in die endgültige SELECT-Anweisung umgewandelt.
Oracle¶
Snowflake¶
Oracle¶
Snowflake¶
Oracle¶
Snowflake¶
Oracle¶
Snowflake¶
Bekannte Probleme¶
Es wurden keine Probleme gefunden.
Zugehörige EWIs¶
SSC-FDM-OR0042: In Zeitstempel transformierter Datumstyp weist ein anderes Verhalten auf.
[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.
UDF für Snowflake-Skript (SCALAR)¶
Translation reference for Oracle User Defined Functions to Snowflake Scripting UDFs
Bemerkung
Einige Teile des Ausgabecodes wurden aus Gründen der Übersichtlichkeit weggelassen.
Beschreibung¶
SnowConvert unterstützt jetzt die direkte Übersetzung von benutzerdefinierten PL/SQL-Funktionen in Snowflake Scripting UDFs (SnowScript UDFs), wenn sie bestimmte Kriterien erfüllen.
Snowflake Scripting UDFs sind benutzerdefinierte Funktionen, die mit Snowflakes prozeduraler Sprachsyntax (SnowScript) innerhalb eines SQL UDF-Textkörpers geschrieben wurden. Sie unterstützen Variablen, Schleifen, bedingte Logik und die Behandlung von Ausnahmen, ohne dass ein Zugriff auf die Datenbank erforderlich ist.
Wenn Funktionen zu SnowScript UDFs werden¶
SnowConvert analysiert jede Oracle-Funktion und ermittelt automatisch das entsprechende Snowflake-Ziel. Eine Funktion wird zu einer SnowScript UDF, wenn sie nur prozedurale Logik ohne Datenzugriffsoperationen enthält.
Beispielhafte Quellcode-Muster¶
Einfache Berechnungsfunktion¶
Eine Basisfunktion, die Berechnungen durchführt, ohne Daten abzufragen.
Oracle¶
Ergebnis¶
CALCULATETAX(1000, 15) |
|---|
150 |
Snowflake (SnowScript UDF)¶
Ergebnis¶
CALCULATETAX(1000, 15) |
|---|
150 |
Funktion mit IF/ELSIF/ELSE-Logik¶
Funktionen, die bedingte Anweisungen für die Geschäftslogik verwenden.
Oracle¶
Ergebnis¶
GETSHIPPINGCOST(75, 25) |
|---|
30 |
Snowflake (SnowScript UDF)¶
Ergebnis¶
GETSHIPPINGCOST(75, 25) |
|---|
30 |
Funktion mit FOR-Schleife¶
Funktionen, die Schleifen für iterative Berechnungen verwenden.
Oracle¶
Ergebnis¶
CALCULATECOMPOUNDINTEREST(1000, 5, 3) |
|---|
1157.63 |
Snowflake (SnowScript UDF)¶
Ergebnis¶
CALCULATECOMPOUNDINTEREST(1000, 5, 3) |
|---|
1157.63 |
CASE- und DECODE-Logik¶
Funktionen mit CASE-Ausdrücke und DECODE für die Kategorisierung.
Oracle¶
Ergebnis¶
GETCUSTOMERTIER(3000, 6) |
|---|
GOLD |
Snowflake (SnowScript UDF)¶
Ergebnis¶
GETCUSTOMERTIER(3000, 6) |
|---|
GOLD |
Select Into variable assignment¶
Functions using simple select into for variable assignment.
Oracle¶
Ergebnis¶
CALCULATEPRICE(100, 3) |
|---|
285 |
Snowflake (SnowScript UDF)¶
Ergebnis¶
CALCULATEPRICE(100, 3) |
|---|
285 |
Bekannte Probleme¶
Warnung
SnowConvert AI will not translate UDFs containing the following elements into SnowScripting UDFs, as these features are unsupported in SnowScripting UDFs:
Auf Datenbanktabellen zugreifen
Cursor verwenden
Andere UDFs aufrufen
Aggregat- oder Fensterfunktionen enthalten
DML-Operationen (INSERT/UPDATE/DELETE) ausführen
Resultsets zurückgeben
Zugehörige EWIs¶
SSC-EWI-0067: UDF wurde in eine Snowflake-Prozedur transformiert; das Aufrufen von Prozeduren in einer Abfrage wird nicht unterstützt.
SSC-EWI-0068: Die benutzerdefinierte Funktion wurde in eine Snowflake-Prozedur umgewandelt.
[SSC-EWI-0073](../../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/generalEWI. md#ssc-ewi-0073): Überprüfung der Funktionsäquivalenz ausstehend.
SSC-FDM-OR0042: In Zeitstempel transformierter Datumstyp weist ein anderes Verhalten auf.