SnowConvert AI - Oracle - CREATE FUNCTION¶
Oracle Create Function vers Snowflake Snow Scripting
Description¶
Note
Certaines parties du code de sortie sont omises pour des raisons de clarté.
Une fonction stockée (également appelée fonction utilisateur ou fonction définie par l’utilisateur) est un ensemble d’instructions PL/SQL que vous pouvez appeler par leur nom. Les fonctions stockées sont très similaires aux procédures, à l’exception du fait qu’une fonction renvoie une valeur à l’environnement dans lequel elle est appelée. Les fonctions utilisateur peuvent être utilisées dans le cadre d’une expression SQL.
Une spécification d’appel déclare une méthode Java ou une routine en langue de troisième génération (3GL) afin qu’elle puisse être appelée à partir de PL/SQL. Vous pouvez également utiliser l’instruction
CALLSQL pour appeler une telle méthode ou routine. La spécification d’appel indique à la base de données Oracle quelle méthode Java, ou quelle fonction nommée dans quelle bibliothèque partagée, doit être invoquée lors d’un appel. Elle indique également à la base de données les conversions de type à effectuer pour les arguments et la valeur de retour. Référence linguistique Oracle SQL Create Function.
Syntaxe Oracle¶
For more information, see the Oracle CREATE FUNCTION documentation.
Syntaxe de Create Function d’Oracle¶
Syntaxe Snowflake¶
Snowflake permet l’utilisation de 3 langues différentes dans les fonctions définies par l’utilisateur :
SQL
JavaScript
Java
Pour l’instant, SnowConvert AI prendra en charge uniquement SQL et JavaScript comme langues cibles.
For more information, see the Snowflake UDF overview.
SQL¶
Note
Les fonctions SQL définies par l’utilisateur n’acceptent qu’une seule requête comme corps. Ils peuvent lire dans la base de données mais ne sont pas autorisés à y écrire ou à la modifier (UDFs SQL scalaires).
JavaScript¶
Note
Les fonctions définies par l’utilisateur JavaScript autorisent plusieurs instructions dans leur corps, mais ne peuvent pas effectuer de requêtes dans la base de données. (UDFs JavaScript scalaires).
Modèles d’échantillons de sources¶
Exemple de données auxiliaires¶
Note
Ce code a été exécuté pour une meilleure compréhension des exemples :
Oracle¶
Snowflake¶
Problèmes connus¶
Aucun problème n’a été constaté.
Curseur pour une variable de retour¶
Note
Certaines parties du code de sortie sont omises pour des raisons de clarté.
Ce modèle définit une fonction dans Oracle PL/SQL qui utilise un curseur pour récupérer une valeur unique et la renvoyer.
Composants :
Déclaration de fonction :
CREATE FUNCTION functionName(parameters) RETURN returnTypeDéclare la fonction avec les paramètres d’entrée et le type de retour.
Déclarations de variables :
Déclare les variables, y compris la variable de retour.
Déclaration de curseurs :
CURSOR cursorName IS SELECT singleColumn FROM ... WHERE ... [AND col1 = localVar1];Définit un curseur permettant de sélectionner une seule colonne dans une table avec des conditions de filtrage facultatives.
Bloc BEGIN-END :
Affectation des variables.
Ouvre le curseur.
Récupère le résultat dans la variable de retour.
Ferme le curseur.
Renvoie la valeur retournée.
Dans ce cas, les variables sont transformées en une expression de table commune (CTE). Ainsi que la requête dans le curseur à laquelle, en outre, la clause FETCH FIRST 1 ROW ONLY est ajoutée pour simuler le comportement de FETCH CURSOR.
L’instruction RETURN est transformée en sélection finale.
Requêtes¶
Oracle¶
Snowflake¶
Résultat¶
FUNC1() |
|---|
2004-05-03 |
Oracle¶
Snowflake¶
Résultat¶
FUNC1() |
|---|
2004-05-03 |
Problèmes connus¶
Aucun problème n’a été constaté.
EWIs connexes¶
SSC-FDM-OR0042: Le type de date transformé en horodatage a un comportement différent.
SSC-EWI-0073 : En attente de l’examen de l’équivalence fonctionnelle.
Curseur avec instruction IF¶
Note
Certaines parties du code de sortie sont omises pour des raisons de clarté.
Ce modèle définit une fonction qui utilise conditionnellement un curseur pour rechercher et renvoyer une valeur en fonction d’une instruction IF.
Composants :
Déclaration de fonction :
CREATE FUNCTION functionName(parameters) RETURN returnTypeDéclare la fonction avec les paramètres d’entrée et le type de retour.
Déclaration de curseurs :
CURSOR cursorName IS SELECT singleColumn FROM ... WHERE ... [AND col1 = localVar1];Définit un curseur permettant de sélectionner une seule colonne dans une table avec des conditions de filtrage facultatives.
Déclaration de variables :
Déclare les variables, y compris la variable de retour.
Bloc BEGIN-END avec instruction IF :
Affectation des variables.
Vérifier si une condition est vraie.
Si true, ouvre le curseur, récupère le résultat dans la variable de retour, ferme le curseur et renvoie la valeur récupérée. (Le curseur peut également être ouvert dans le bloc
ELSEet doit répondre aux mêmes conditions)Le bloc
ELSEest facultatif. S’il existe, il ne doit contenir qu’une seule instruction qui peut être une affectation ou une instructionRETURN.
Les variables sont transformées en une expression de table commune (CTE). Ainsi que la requête dans le curseur à laquelle, en outre, la clause FETCH FIRST 1 ROW ONLY est ajoutée pour simuler le comportement de FETCH CURSOR.
L'instruction IF/ELSE peut être traitée en utilisant CASE EXPRESSION à l’intérieur de la sélection, ce qui permet d’insérer des conditions dans les requêtes. L’instruction RETURN est transformée en sélection finale.
Requêtes¶
Oracle¶
Snowflake¶
Résultat¶
FUNC2(0) |
|---|
NULL |
FUNC2(1) |
|---|
33 |
Oracle¶
Snowflake¶
Résultat¶
FUNC2(0) |
|---|
33 |
FUNC2(1) |
|---|
2 |
Oracle¶
Snowflake¶
Résultat¶
FUNC2(0) |
|---|
0 |
FUNC2(1) |
|---|
33 |
Problèmes connus¶
Aucun problème n’a été constaté.
EWIs connexes¶
Pas d’EWIs connexes.
Multiple IF statement¶
Ce modèle définit une fonction qui utilise des instructions conditionnelles sur des variables locales.
Composants :
Déclaration de fonction :
CREATE FUNCTION functionName(parameters) RETURN returnTypeDéclare la fonction avec les paramètres d’entrée et le type de retour.
Déclaration de variables :
Déclare les variables, y compris la variable de retour.
Bloc BEGIN-END avec instruction IF :
Vérifier si une condition est vraie.
Chaque cas est utilisée pour attribuer une valeur à la même variable.
Conversion :¶
DECLARE SECTION : variables with default expression are moved to a common table expression.
L'instruction IF/ELSE peut être traitée à l’aide de CASE EXPRESSION à l’intérieur de la sélection, ce qui permet d’introduire des conditions dans les requêtes.
L’instruction RETURN est transformée en sélection finale.
Oracle¶
Snowflake¶
Oracle¶
Snowflake¶
Oracle¶
Snowflake¶
Oracle¶
Snowflake¶
Problèmes connus¶
Aucun problème n’a été constaté.
EWIs connexes¶
SSC-FDM-OR0042: Le type de date transformé en horodatage a un comportement différent.
SSC-EWI-0073 : En attente de l’examen de l’équivalence fonctionnelle.
SSC-EWI-OR0036: Problèmes de résolution des types, l’opération arithmétique peut ne pas se comporter correctement entre la chaîne et la date.
UDF (SCALAR) Snowflake Scripting¶
Translation reference for Oracle User Defined Functions to Snowflake Scripting UDFs
Note
Certaines parties du code de sortie sont omises pour des raisons de clarté.
Description¶
SnowConvert prend désormais en charge la traduction des fonctions définies par l’utilisateur PL/SQL Oracle directement en UDFs Snowflake Scripting (UDFs SnowScript) lorsqu’elles répondent à des critères spécifiques.
Les UDFs Snowflake Scripting sont des fonctions définies par l’utilisateur écrites à l’aide de la syntaxe du langage procédural de Snowflake (Snowscript) au sein d’un corps SQL UDF. Elles prennent en charge les variables, les boucles, la logique conditionnelle et la gestion des exceptions sans nécessiter d’accès à la base de données.
Lorsque les fonctions deviennent des SnowScript UDFs¶
SnowConvert analyse chaque fonction Oracle et détermine automatiquement la cible Snowflake appropriée. Une fonction devient une SnowScript UDF lorsqu’elle contient uniquement une logique procédurale sans opérations d’accès aux données.
Modèles d’échantillons de sources¶
Fonction de calcul simple¶
Une fonction de base qui effectue des calculs sans interroger de données.
Oracle¶
Résultat¶
CALCULATETAX(1000, 15) |
|---|
150 |
Snowflake (SnowScript UDF)¶
Résultat¶
CALCULATETAX(1000, 15) |
|---|
150 |
Fonction avec la logique IF/ELSIF/ELSE¶
Fonctions utilisant des instructions conditionnelles pour la logique métier.
Oracle¶
Résultat¶
GETSHIPPINGCOST(75, 25) |
|---|
30 |
Snowflake (SnowScript UDF)¶
Résultat¶
GETSHIPPINGCOST(75, 25) |
|---|
30 |
Fonction avec FOR Loop¶
Fonctions utilisant des boucles pour les calculs itératifs.
Oracle¶
Résultat¶
CALCULATECOMPOUNDINTEREST(1000, 5, 3) |
|---|
1157.63 |
Snowflake (SnowScript UDF)¶
Résultat¶
CALCULATECOMPOUNDINTEREST(1000, 5, 3) |
|---|
1157.63 |
Logique CASE et DECODE¶
Fonctions utilisant des expressions CASE et DECODE pour la catégorisation.
Oracle¶
Résultat¶
GETCUSTOMERTIER(3000, 6) |
|---|
GOLD |
Snowflake (SnowScript UDF)¶
Résultat¶
GETCUSTOMERTIER(3000, 6) |
|---|
GOLD |
Select Into variable assignment¶
Functions using simple select into for variable assignment.
Oracle¶
Résultat¶
CALCULATEPRICE(100, 3) |
|---|
285 |
Snowflake (SnowScript UDF)¶
Résultat¶
CALCULATEPRICE(100, 3) |
|---|
285 |
Problèmes connus¶
Avertissement
SnowConvert AI will not translate UDFs containing the following elements into SnowScripting UDFs, as these features are unsupported in SnowScripting UDFs:
Accès aux tables de la base de données
Utiliser des curseurs
Appeler d’autres UDFs
Fonctions d’agrégation ou de fenêtre,
Exécuter des opérations DML (INSERT/UPDATE/DELETE)
Renvoyer les jeux de résultats
EWIs connexes¶
SSC-EWI-0067: UDF was transformed to Snowflake procedure, calling procedures inside a query is not supported.
SSC-EWI-0068: La fonction définie par l’utilisateur a été transformée en procédure Snowflake.
SSC-EWI-0073 : En attente de l’examen de l’équivalence fonctionnelle.
SSC-FDM-OR0042: Le type de date transformé en horodatage a un comportement différent.