SnowConvert AI - Oracle - COLLECTIONS AND RECORDS¶
Référence de traduction pour convertir COLLECTIONS et RECORDS Oracle vers Snowflake Scripting
Avertissement
Les informations de cette section, en cours de modification, sont sujettes à modification.
Description générale¶
PL/SQL vous permet de définir deux types de données composites : collection et enregistrement, où composite est un type de données qui stocke des valeurs ayant des composants internes.
Dans une collection, les composants internes ont toujours le même type de données et sont appelés éléments.
Dans un enregistrement, les composants internes peuvent avoir différents types de données et sont appelés champs. (Référence linguistique Oracle PL/SQL COLLECTIONS AND RECORDS)
Note
Veuillez tenir compte de la référence de traduction d’instruction CREATE TYPE, car certaines solutions de contournement peuvent se chevaucher et peuvent être fonctionnelles dans les deux scénarios.
Limitations¶
Snowflake ne prend pas en charge les types de données définis par l’utilisateur, ce qui inclut les Collections et Enregistrements PL, selon la documentation en ligne Types de données non pris en charge, mais il supporte les types de données semi-structurées, qui peuvent être utilisés pour imiter à la fois la structure de type hiérarchie de l’enregistrement et la structure d’élément des types de collection définis par l’utilisateur. C’est pourquoi il existe plusieurs types de fonctions pour lesquelles il n’existe pas de solution de contournement.
Voici les fonctions pour lesquelles la solution de contournement NO est proposée :
La taille de la variable ne peut pas dépasser 16MB¶
Snowflake définit la taille maximale de VARIANT, OBJECT et ARRAY sur 16MBs. Cela signifie que si un enregistrement, une collection ou tout élément de l’un ou l’autre dépasse cette taille, une erreur d’exécution se produit.
La capacité de Varray ne peut pas être limitée¶
Les varrays d’Oracle offrent la capacité de limiter le nombre d’éléments qu’ils contiennent. Ceci n’est pas pris en charge par Snowflake.
Solution de contournement proposée¶
À propos de la définition des types d’enregistrement¶
La solution de contournement proposée consiste à utiliser un type de données semi-structurées « OBJECT » pour imiter le type de données d’Oracle.
À propos de la définition des types de collection¶
Il existe deux solutions différentes qui dépendent du type de collection à migrer :
Il est proposé de transformer les tableaux associatifs en un type de données semi-structurées « OBJECT ».
Il est proposé de transformer les Varrays et les Tableaux de tables imbriquées en un type de données semi-structurées « ARRAY ».
Prise en charge SnowConvert AI actuelle¶
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.
Sous-fonctionnalité |
Statut actuel de reconnaissance |
Statut actuel de la traduction |
Solutions de contournement connues |
|---|---|---|---|
Reconnu. |
Non traduit. |
Oui. |
|
Non reconnu. |
Non traduit. |
Oui. |
|
Reconnu. |
Non traduit. |
Oui. |
|
Reconnu. |
Non traduit. |
Oui. |
Problèmes connus¶
1. Associate Arrays are considered a Nested Table¶
Actuellement, SnowConvert AI ne fait pas la différence entre un tableau associatif et une table imbriquée, ce qui signifie qu’ils sont mélangés dans les mêmes comptages d’évaluation.
Définition du type de tableau associatif¶
Il s’agit d’une référence de traduction pour convertir la déclaration Array (tableau) associatif Oracle vers Snowflake.
Avertissement
Les informations de cette section, en cours de modification, sont sujettes à modification.
Note
Certaines parties du code de sortie sont omises pour des raisons de clarté.
Description¶
Un tableau associatif (anciennement appelé table PL/SQL ou table index-by) est un ensemble de paires clé-valeur. Chaque clé est un index unique, utilisé pour l’emplacement de la valeur associée avec la syntaxe
variable_name(index).Le type de données de l”
indexpeut être un type de chaîne (VARCHAR2,VARCHAR,STRINGouLONG) ouPLS_INTEGER. Les index sont stockés par ordre de tri, et non par ordre de création. Pour les types de chaînes, l’ordre de tri est déterminé par les paramètres d’initialisationNLS_SORTetNLS_COMP.
Avertissement
À ne pas confondre avec la définition du type Type de définition PL/SQL NESTED TABLE.
Pour la traduction, la définition du type est remplacée par un OBJECT Type de données semi-structurées et son utilisation est modifiée en conséquence pour toutes les opérations.
To define an Associative Array type, the syntax is as follows:
Pour déclarer une variable de ce type :
Modèles d’échantillons de sources¶
Tableau associatif indexé Varchar¶
Oracle¶
Résultat¶
DBMS OUTPUT |
|---|
1 |
3 |
4 |
2 |
3 |
Snowflake¶
Veuillez noter le paramètre « true » dans le OBJECT_INSERT. Ainsi, l’élément est mis à jour s’il est déjà présent dans le tableau.
Résultat¶
DBMS OUTPUT |
|---|
1 |
3 |
4 |
2 |
3 |
Tableau associatif indexé numériquement¶
Oracle¶
Résultat¶
DBMS OUTPUT |
|---|
-1 |
3 |
-4 |
-2 |
-3 |
Snowflake¶
Veuillez noter que la valeur numérique est convertie en varchar lorsque l’opération le nécessite. En outre, notez le paramètre « true » dans OBJECT_INSERT. Ainsi, l’élément est mis à jour s’il est déjà présent dans le tableau.
Résultat¶
DBMS OUTPUT |
|---|
-1 |
3 |
-4 |
-2 |
-3 |
Tableau associatif à éléments numériques indexés par enregistrement¶
Dans ce cas, le tableau associatif est composé d’une structure d’enregistrement, et cette structure doit être préservée. À cette fin, d’autres opérations sur les insertions ont été ajoutées.
Oracle¶
Résultat¶
DBMS OUTPUT |
|---|
-1 |
3 |
-4 |
-2 |
-3 |
Snowflake¶
Dans ce scénario, l’insertion/mise à jour suppose une création automatique de l’enregistrement dans le tableau associatif, ce qui doit être pris en compte lors de la création de nouveaux enregistrements.
Résultat¶
DBMS OUTPUT |
|---|
-1 |
3 |
-4 |
-2 |
-3 |
Problèmes connus¶
1. They are currently not being recognized¶
SnowConvert AI traite ces collections comme des tableaux de tables imbriquées. Il existe une solution pour y remédier.
EWIs connexes¶
Pas d’EWIs connexes.
Méthodes de collection¶
Il s’agit d’une référence de traduction pour convertir les méthodes de collection Oracle vers Snowflake.
Avertissement
Les informations de cette section, en cours de modification, sont sujettes à modification.
Note
Certaines parties du code de sortie sont omises pour des raisons de clarté.
Description¶
Une méthode de collection est un sous-programme PL/SQL - soit une fonction qui renvoie des informations sur une collection, soit une procédure qui opère sur une collection. Les méthodes de collection facilitent l’utilisation des collections et la maintenance de vos applications.
Certaines de ces méthodes peuvent être mappées à des opérations semi-structurées natives de Snowflake. Celles qui ne le peuvent pas ou qui présentent des différences seront mappées à une implémentation d’UDF.
Prise en charge SnowConvert AI actuelle¶
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.
Méthode |
Statut actuel de reconnaissance |
Statut actuel de la traduction |
Mappé vers |
|---|---|---|---|
Non reconnu. |
Non traduit. |
UDF |
|
Non reconnu. |
Non traduit. |
UDF (à définir) |
|
Non reconnu. |
Non traduit. |
UDF |
|
Non reconnu. |
Non traduit. |
||
Non reconnu. |
Non traduit. |
UDF |
|
Non reconnu. |
Non traduit. |
UDF |
|
Non reconnu. |
Non traduit. |
||
Non reconnu. |
Non traduit. |
Non pris en charge. |
|
Non reconnu. |
Non traduit. |
UDF (à définir) |
|
Non reconnu. |
Non traduit. |
UDF (à définir) |
Modèles d’échantillons de sources¶
COUNT¶
Cette méthode renvoie le nombre d’éléments « non définis » (à ne pas confondre avec les éléments null) dans une collection (les tables imbriquées peuvent devenir clairsemées en laissant ces éléments entre elles). Dans les tableaux associatifs, elle renvoie le nombre de clés du tableau.
Oracle¶
Résultat¶
DBMS OUTPUT |
|---|
2 |
3 |
4 |
Snowflake¶
L’équivalent du Snowflake est la méthode ARRAY_SIZE.
Résultat¶
DBMS OUTPUT |
|---|
2 |
3 |
4 |
EXISTS¶
Cette méthode renvoie un résultat positif si l’élément donné est contenu dans la collection. Dans les tableaux associatifs, il teste si la clé est contenue.
Oracle¶
Résultat¶
DBMS OUTPUT |
|---|
2 |
3 |
4 |
Snowflake¶
L’équivalent du Snowflake est la méthode ARRAY_CONTAINS. Notez que, lors de l’utilisation d’éléments Varchar, il est nécessaire d’effectuer une conversion vers Variant.
Résultat¶
DBMS OUTPUT |
|---|
2 |
3 |
4 |
FIRST/LAST¶
Ces deux méthodes renvoient respectivement le premier et le dernier élément de la collection. Si la collection est vide, elle renvoie null. Cette opération est mappée à une UDF, qui sera ajoutée dans les révisions ultérieures.
Oracle¶
Résultat¶
DBMS OUTPUT |
|---|
abc |
bca |
–Ces espaces vides sont dus au fait qu’ils correspondent à null |
1 |
4 |
Snowflake¶
UDFs¶
Résultat¶
DBMS OUTPUT |
|---|
abc |
bca |
–Ces espaces vides sont dus au fait qu’ils correspondent à null |
1 |
4 |
DELETE¶
Cette méthode permet de supprimer des éléments d’une collection. Il existe trois variantes possibles :
.DELETE supprime tous les éléments.
.DELETE(n) supprime l’élément dont l’index correspond à « n ».
.DELETE(n, m) supprime les index de « n » à « m ».
Note
Dans Oracle, l’utilisation de cette opération sur des tables imbriquées entraîne l’apparition d’éléments « non définis » à l’intérieur de ces tables en raison de leur faible densité.
Avertissement
Veuillez noter que les deuxième et troisième versions ne s’appliquent pas aux Varrays.
Oracle¶
Par souci de simplicité, cet échantillon ne vérifie que le nombre d’éléments, mais il peut être modifié pour afficher le contenu de chaque collection.
Résultat¶
DBMS OUTPUT |
|---|
0 |
0 |
3 |
2 |
0 |
3 |
1 |
Snowflake¶
Snowflake ne prend pas en charge les suppressions à partir d’un ARRAY existant et pour cette raison, la seule solution proposée est de reconstruire un nouveau ARRAY en fonction des paramètres d’origine de DELETE.
Note
Notez qu’une UDF a été ajoutée pour mettre en œuvre la fonctionnalité de mise à jour de l’élément.
Cette UDF sera ajoutée dans les révisions ultérieures.
Résultat¶
DBMS OUTPUT |
|---|
0 |
0 |
3 |
2 |
0 |
3 |
1 |
EXTEND¶
Cette méthode est utilisée pour ajouter de nouveaux éléments à une table imbriquée ou à un Varray. Il existe trois variantes possibles :
.EXTEND insère un élément null.
.EXTEND(n) insère « n » éléments nulls.
.EXTEND(n, i) insère « n » copies de l’élément situé à « i ».
Oracle¶
Résultat¶
DBMS OUTPUT |
|---|
5 |
5 |
5 |
Snowflake¶
Note
Notez qu’une UDF a été ajoutée pour mettre en œuvre la fonctionnalité de mise à jour de l’élément.
Cette UDF sera ajoutée dans les révisions ultérieures.
Résultat¶
DBMS OUTPUT |
|---|
5 |
5 |
5 |
TRIM¶
Cette méthode est utilisée pour supprimer les derniers éléments d’une table imbriquée ou d’un Varray. Il existe deux variantes possibles :
.TRIM supprime le dernier élément.
.TRIM(n) supprime les « n » derniers éléments.
Note
Cette fonctionnalité peut être mise en œuvre à l’aide de ARRAY_SLICE
Oracle¶
Résultat¶
LIMIT¶
Cette méthode renvoie la limite maximale d’un Varray.
Danger
Cette méthode n’est pas prise en charge par Snowflake.
Oracle¶
Résultat¶
DBMS OUTPUT |
|---|
5 |
6 |
PRIOR/NEXT¶
Cette méthode renvoie l’index précédent/suivant, compte tenu d’un index. S’il n’y a pas d’antécédent/suivant, il renvoie null. Il est le plus souvent utilisé pour parcourir une collection.
Oracle¶
Résultat¶
DBMS OUTPUT |
|---|
– Les espaces vides sont dus aux résultats nuls |
1 |
3 |
abc |
jkl |
jkl |
Problèmes connus¶
1. Limit method is not supported in Snowflake¶
Snowflake ne prend pas en charge les varrays à espace limité. C’est pourquoi cette méthode n’est pas prise en charge.
EWIs connexes¶
Pas d’EWIs connexes.
Définition du type de tableau de tables imbriquées¶
Il s’agit d’une référence de traduction pour convertir la déclaration de tableau de tables imbriquées d’Oracle vers Snowflake
Avertissement
Les informations de cette section, en cours de modification, sont sujettes à modification.
Note
Cette section concerne la version PL/SQL des tableaux de tables imbriquées, pour la version autonome, voir Définition du type de table imbriquée.
Note
Certaines parties du code de sortie sont omises pour des raisons de clarté.
Description¶
Dans la base de données, une table imbriquée est un type de colonne qui stocke un nombre indéterminé de lignes sans ordre particulier.
Lorsque vous récupérez une valeur de table imbriquée de la base de données dans une variable de table imbriquée PL/SQL, PL/SQL donne aux lignes des index consécutifs, en commençant par 1. Grâce à ces index, vous pouvez accéder aux différentes lignes de la variable de la table imbriquée. La syntaxe est la suivante :
variable_name(index). Les index et l’ordre des lignes d’une table imbriquée peuvent ne pas rester stables lorsque vous stockez et récupérez la table imbriquée dans la base de données.
Pour la traduction, la définition du type est remplacée par un ARRAY type de données semi-structurées et son utilisation est modifiée en conséquence pour toutes les opérations. Veuillez noter que la traduction pour les tables imbriquées et les varrays est la même.
To define a Nested Table Array type, the syntax is as follows:
Pour déclarer une variable de ce type :
Modèles d’échantillons de sources¶
Définitions des tableaux de tables imbriquées¶
Ceci illustre comment créer différents tableaux de tables imbriquées et comment migrer les définitions des variables.
Oracle¶
Snowflake¶
Itération des tables imbriquées¶
Oracle¶
Résultat¶
DBMS OUTPUT |
|---|
10 |
20 |
30 |
40 |
20 |
30 |
Snowflake¶
Note
Notez qu’une UDF a été ajoutée pour mettre en œuvre la fonctionnalité de mise à jour de l’élément.
Cette UDF sera ajoutée dans les révisions ultérieures.
UDF¶
Résultat¶
DBMS OUTPUT |
|---|
10 |
20 |
30 |
40 |
20 |
30 |
Problèmes connus¶
1. They are currently not being converted¶
SnowConvert AI ne prend pas en charge la traduction de ces éléments.
2. Indexing needs to be modified¶
Les index d’Oracle commencent à 1, sur Snowflake ils commenceront à 0.
EWIs connexes¶
Pas d’EWIs connexes.
Définition du type d’enregistrement¶
Il s’agit d’une référence de traduction pour convertir la déclaration de l’enregistrement Oracle vers Snowflake
Avertissement
Les informations de cette section, en cours de modification, sont sujettes à modification.
Note
Certaines parties du code de sortie sont omises pour des raisons de clarté.
Description¶
Une variable d’enregistrement est une variable composite dont les composants internes, appelés champs, peuvent avoir différents types de données. La valeur d’une variable d’enregistrement et les valeurs de ses champs peuvent changer.
Vous faites référence à une variable d’enregistrement entière par son nom. Vous faites référence à un champ de l’enregistrement avec la syntaxe suivante :
record.field.Vous pouvez créer une variable d’enregistrement de l’une ou l’autre de ces manières :
Définissez un type d’enregistrement, puis déclarez une variable de ce type.
Utilisez
%ROWTYPEpour déclarer une variable d’enregistrement qui représente une ligne complète ou partielle d’une table de base de données ou d’une vue.Utilisez
%TYPEpour déclarer une variable d’enregistrement du même type qu’une variable d’enregistrement déclarée précédemment.
Pour la traduction, la définition du type est remplacée par un OBJECT Type de données semi-structurées et son utilisation est modifiée en conséquence pour toutes les opérations.
To define a Record type, the syntax is as follows:
Pour déclarer une variable de ce type :
Modèles d’échantillons de sources¶
Note
Certaines parties du code de sortie sont omises pour des raisons de clarté.
Initialisation et affectation des enregistrements¶
Cet échantillon tente d’insérer deux nouvelles lignes à l’aide d’une variable d’enregistrement qui est réaffectée à mi-procédure.
Oracle¶
Résultat¶
COL1 |
COL2 |
|---|---|
1,5 |
1 |
2.5 |
2 |
Snowflake¶
Remarquez que les réaffectations sont remplacées par une clause OBJECT_INSERT qui se met à jour si la colonne existe déjà, et que la clause VALUES est remplacée par une clause SELECT.
Résultat¶
COL1 |
COL2 |
|---|---|
1,5 |
1 |
2.5 |
2 |
Enregistrement %ROWTYPE et enregistrement des valeurs¶
Comme ce sont les opérations qui définissent la structure, ces définitions peuvent être remplacées par un type de données OBJECT, mais les valeurs de l’enregistrement doivent être décomposées, car l’insertion de l’enregistrement « tel quel » n’est pas prise en charge.
Oracle¶
Résultat¶
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.
Résultat¶
COL1 |
COL2 |
COL3 |
|---|---|---|
1 |
« Hello » |
25-DEC-20 |
Récupération des données dans un enregistrement¶
Oracle¶
Résultat¶
DBMS OUTPUT |
|---|
1 |
Bonjour |
25-DEC-20 |
Snowflake¶
Veuillez noter l’ajout de OBJECT_CONSTRUCT dans la définition du curseur, qui permet d’extraire une instruction OBJECT, qui peut ensuite être utilisée pour migrer de manière transparente l’instruction FETCH.
Résultat¶
DBMS OUTPUT |
|---|
1 |
Bonjour |
25-DEC-20 |
Attribution d’une variable d’enregistrement dans un SELECT INTO¶
Cette transformation consiste à profiter de la fonction OBJECT_CONTRUCT pour initialiser l’enregistrement en utilisant les colonnes SELECT comme arguments.
Échantillon de code auxiliaire¶
Oracle¶
Snowflake¶
Oracle¶
Résultat¶
COL1 |
COL2 |
|---|---|
SELECT 1 |
NAME 1 |
SELECT 2 |
NAME 2 |
SELECT 3 |
NAME 3 |
SELECT 4 |
NAME 4 |
Snowflake¶
Résultat¶
COL1 |
COL2 |
|---|---|
SELECT 1 |
NAME 1 |
SELECT 2 |
NAME 2 |
SELECT 3 |
NAME 3 |
SELECT 4 |
NAME 4 |
Problèmes connus¶
1. The following functionalities are currently not being converted:¶
Récupération de données dans un enregistrement.
Enregistrements imbriqués (enregistrements à l’intérieur d’enregistrements).
Collections à l’intérieur des enregistrements.
EWIs connexes¶
SSC-EWI-0036 : Type de données converti en un autre type de données.
SSC-EWI-0056: Le type de création ’Create Type’ n’est pas pris en charge
SSC-FDM-0006: La colonne de type nombre peut ne pas se comporter de la même manière dans Snowflake.
SSC-FDM-OR0042: Le type de date transformé en horodatage a un comportement différent.
SSC-FDM-OR0035: DBMS_OUTPUT.PUTLINE consultez l’implémentation UDF.
SSC-PRF-0003: Fetch à l’intérieur d’une boucle est considéré comme un modèle complexe, cela pourrait dégrader les performances de Snowflake.
Définition du type varray¶
Il s’agit d’une référence de traduction pour convertir la déclaration Oracle Varray vers Snowflake
Avertissement
Les informations de cette section, en cours de modification, sont sujettes à modification.
Note
Cette section concerne la version PL/SQL des Varrays, pour la version autonome, voir Définition de type Array (tableau).
Note
Certaines parties du code de sortie sont omises pour des raisons de clarté.
Description¶
Un varray (tableau à taille variable) est un tableau dont le nombre d’éléments peut varier de zéro (vide) à la taille maximale déclarée.
Pour accéder à un élément d’une variable varray, utilisez la syntaxe suivante :
variable_name(index). La borne inférieure de l”indexest 1 ; la borne supérieure est le nombre actuel d’éléments. La borne supérieure change à mesure que vous ajoutez ou supprimez des éléments, mais elle ne peut pas dépasser la taille maximale. Lorsque vous stockez et récupérez un varray dans la base de données, ses index et l’ordre des éléments restent stables.
Pour la traduction, la définition du type est remplacée par un ARRAY type de données semi-structurées et son utilisation est modifiée en conséquence pour toutes les opérations. Veuillez noter que la traduction pour les tables imbriquées et les varrays est la même.
To define a varray type, the syntax is as follows:
Pour déclarer une variable de ce type :
Modèles d’échantillons de sources¶
Définitions de varray¶
Ceci illustre les trois différentes façons de créer un varray, et la manière de migrer ces définitions pour les variables.
Oracle¶
Snowflake¶
Itération de varray¶
Oracle¶
Résultat¶
DBMS OUTPUT |
|---|
10 |
20 |
30 |
40 |
20 |
30 |
Snowflake¶
Note
Notez qu’une UDF a été ajoutée pour mettre en œuvre la fonctionnalité de mise à jour de l’élément.
Cette UDF sera ajoutée dans les révisions ultérieures.
UDF¶
Résultat¶
DBMS OUTPUT |
|---|
10 |
20 |
30 |
40 |
20 |
30 |
Problèmes connus¶
1. They are currently not being converted¶
SnowConvert AI ne prend pas en charge la traduction de ces éléments.
2. Indexing needs to be modified¶
Les index d’Oracle commencent à 1, sur Snowflake ils commenceront à 0.
3. Array Density may not match the original¶
Le type de données ARRAY pouvant devenir clairsemé, il convient d’être prudent lors de l’ajout ou de la suppression du tableau. L’utilisation de ARRAY_COMPACT() après de telles opérations peut être utile si la densité est un sujet de préoccupation.
EWIs connexes¶
SSC-EWI-0058: La fonctionnalité n’est pas prise en charge actuellement par Snowflake Scripting.
SSC-EWI-0062: L’utilisation du type personnalisé a changé en variante.
SSC-EWI-0073 : En attente de l’examen de l’équivalence fonctionnelle.
SSC-EWI-OR0108: L’instruction d’affectation suivante n’est pas prise en charge par Snowflake Scripting.
SSC-FDM-OR0035: DBMS_OUTPUT.PUTLINE consultez l’implémentation UDF.
Opérations de collection en masse¶
Il s’agit d’une référence de traduction pour convertir les opérations de collection en masse Oracle vers Snowflake
Avertissement
Les informations de cette section, en cours de modification, sont sujettes à modification.
Note
Certaines parties du code de sortie sont omises pour des raisons de clarté.
Description¶
La clause
BULKCOLLECT, une fonction de SQL en masse, renvoie les résultats de SQL à PL/SQL par lots plutôt qu’un par un.La clause
BULKCOLLECTpeut figurer dans :
Instruction
SELECTINTOInstruction
FETCHClause de
RETURNINGINTO:
Instruction
DELETEInstruction
INSERTInstruction
UPDATEInstruction
EXECUTEIMMEDIATEAvec la clause
BULKCOLLECT, chacune des instructions précédentes récupère un jeu de résultats complet et le stocke dans une ou plusieurs variables de collection en une seule opération (ce qui est plus efficace que d’utiliser une instruction de boucle pour récupérer une ligne de résultats à la fois).
(Référence linguistique Oracle PL/SQL BULK COLLECT CLAUSE)
Cette section propose des solutions de contournement pour les SELECTs et le curseur FETCH avec clauses Bulk.
Modèles d’échantillons de sources¶
Table source¶
Oracle¶
Snowflake¶
Bulk Collect à partir d’une table¶
Oracle¶
Résultat¶
DBMS OUTPUT |
|---|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
Snowflake¶
Danger
EXECUTE IMMEDIATE avec la clause Bulk Collect n’a pas de solution de contournement proposée.
Note
Veuillez noter que, bien que le curseur FETCH puisse être conservé dans une large mesure, il est conseillé de le remplacer par des instructions SELECT dans la mesure du possible pour des raisons de performance.
Résultat¶
DBMS OUTPUT |
|---|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
– EXECUTE IMMEDIATE NOT EXECUTED n’est pas pris en charge |
Cas d’instruction SELECT INTO¶
Dans ce cas, la spécification de traduction utilise des RESULTSETs. Consultez la documentation relative aux instructions WITH, SELECT et BULK COLLECT INTO ici :
Problèmes connus¶
1. Heavy performance issues on FETCH Cursor workaround¶
La solution de contournement pour le curseur Fetch a des exigences élevées en matière de performance en raison de la table temporaire. Il est conseillé de les migrer manuellement vers les instructions SELECT
2. Execute immediate statements are not transformed¶
Elles ne sont pas prises en charge par SnowConvert AI mais peut être manuellement remplacé par des instructions SELECT.
EWIs connexes¶
SSC-EWI-0058: La fonctionnalité n’est pas prise en charge actuellement par Snowflake Scripting.
SSC-EWI-0062: L’utilisation du type personnalisé a changé en variante.
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.
SSC-EWI-OR0108: L’instruction d’affectation suivante n’est pas prise en charge par Snowflake Scripting.
SSC-FDM-OR0035: DBMS_OUTPUT.PUTLINE consultez l’implémentation UDF.
SSC-PRF-0001: Cette instruction a des utilisations des opérations en masse de curseur Fetch.
SSC-EWI-0030: L’instruction ci-dessous a des utilisations de Dynamic SQL
Instructions WITH, SELECT et BULKCOLLECTINTO¶
Danger
Cette section est une spécification de traduction. Les informations sont susceptibles d’être modifiées à l’avenir.
Note
Certaines parties du code de sortie sont omises pour des raisons de clarté.
Description¶
Cette section est une spécification de traduction de l’instruction WITH faisant suite à une instruction SELECT qui utilise une instruction BULK COLLECT INTO. Pour plus d’informations, consultez la documentation suivante :
Modèles d’échantillons de sources¶
Note
Certaines parties du code de sortie sont omises pour des raisons de clarté.
La requête suivante est utilisée pour les exemples suivants.
Oracle¶
Snowflake¶
1. Inside procedure simple case¶
Danger
Il s’agit d’une approche qui utilise un type de données resultset. Les types définis par l’utilisateur doivent être revus. Consultez la documentation suivante de Snowflake pour obtenir plus d’informations sur RESULTSETs.
L’exemple suivant utilise un type défini par l’utilisateur et le déclare indirectement comme une table. La traduction pour ce cas met en œuvre un RESULTSET comme type de données dans Snowflake. Le jeu de résultats est stocké dans une variable qui doit être renvoyée enveloppée dans une fonction TABLE().
Oracle¶
Résultat¶
Note
La requête ne renvoie pas de résultats, mais l’information recueillie attendue serait l’information salariale IT utilisée pour l’exemple :
IT_Salary |
|---|
75000 |
80000 |
Danger
L’une des limites des RESULTSETs est qu’ils ne peuvent pas être utilisés comme des tables. Par exemple : select * from my_result_set; (Il s’agit d’une erreur, consultez la documentation suivante pour plus d’informations).
Snowflake¶
Résultat¶
SALARY |
|---|
77500 |
80000 |
2. Simple case for iterations: FOR LOOP statement¶
Le cas suivant consiste à définir une traduction pour l’itération avec FOR...LOOP. Dans ce cas, le type défini par l’utilisateur est implicitement une table, il est donc possible d’utiliser un curseur pour itérer. Consultez la documentation suivante pour en savoir plus :
Documentation de Snowflake sur le renvoi d’une table pour un curseur
Dans ce cas, il est nécessaire de créer un curseur pour l’itération. Consultez la documentation suivante sur la syntaxe d’affectation du curseur.
Oracle¶
Résultat¶
Snowflake¶
Résultat¶
SIMPLE_PROCEDURE |
|---|
Salaire moyen pour le département IT : 77500 |
Problèmes connus¶
1. Resulset limitations.¶
L’utilisation du type de données RESULTSET comporte des limites. Consultez la documentation Snowflake pour en savoir plus. Les limites à ne pas dépasser sont les suivantes :
Déclarer une colonne de type RESULTSET.
Déclarer un paramètre de type RESULTSET.
Déclaration du type de retour d’une procédure stockée en tant que RESULTSET.
2. Execute statements with Bulk Collect clause are not supported.¶
Consultez la documentation suivante.
EWIs connexes¶
SSC-EWI-0058: La fonctionnalité n’est pas prise en charge actuellement par Snowflake Scripting.
SSC-EWI-0062: L’utilisation du type personnalisé a changé en variante.
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.
SSC-EWI-OR0072: Membre procédural non pris en charge
SSC-EWI-OR0104: Variable de collection inutilisable.
SSC-FDM-0006: La colonne de type nombre peut ne pas se comporter de la même manière dans Snowflake.
SSC-FDM-OR0035: DBMS_OUTPUT.PUTLINE consultez l’implémentation UDF.