SnowConvert AI - Oracle - Types de données intégrés Oracle¶
Types de données étendus¶
Description¶
À partir de la base de données Oracle 12_c_, vous pouvez spécifier une taille maximale de 32767 octets pour les types de données
VARCHAR2,NVARCHAR2etRAW. Vous pouvez contrôler si votre base de données prend en charge cette nouvelle taille maximale en réglant le paramètre d’initialisationMAX_STRING_SIZE.Un type de données
VARCHAR2ouNVARCHAR2dont la taille déclarée est supérieure à 4 000 octets, ou un type de donnéesRAWdont la taille déclarée est supérieure à 2 000 octets, est un type de données étendu********. (Référence linguistique Oracle SQL Type de données étendu).
Oracle permet d’augmenter la taille maximale de la chaîne de la base de données de STANDARD à EXTENDED, mais Snowflake ne contient pas d’équivalent pour cette fonctionnalité.
Par conséquent les types de données étendus VARCHAR2, NVARCHAR2 et RAW ne sont pas pris en charge dans Snowflake et ils sont transformés comme de simples types de données VARCHAR2, NVARCHAR2 et RAW. Consultez Données de type caractères et Types de données RAW pour plus d’informations.
Problèmes connus¶
1. MAX STRING SIZE not recognized¶
ALTER SYSTEM SET MAX_STRING_SIZE='EXTENDED';
N’est pas analysé par SnowConvert.
Type de données JSON¶
Description¶
Oracle Database prend en charge JSON de manière native avec les fonctions des bases de données relationnelles, notamment les transactions, l’indexation, la requête déclarative et les vues. Contrairement aux données relationnelles, les données JSON peuvent être stockées dans la base de données, indexées et interrogées sans qu’un schéma définissant les données ne soit nécessaire. (Référence linguistique Oracle SQL Type de données JSON).
The JSON data types are transformed to VARIANT to emulate the Oracle behavior.
Modèles d’échantillons de sources¶
Type de données JSON en tant que colonne dans Create Table¶
Oracle¶
Résultat¶
COL1 |
|---|
{« id »:1, »content »: »json content »} |
{« stringdata »: »this is a text », »number »:1, »numberNeg »:-1, »booleanT »:true, »booleanGF »:false, »nullvalue »:null, »object »:{« 1 »:1, »2 »:2}, »array »:[1,2,3]} |
{« id »:4} |
Snowflake¶
Avertissement
Les insertions de données JSON ne sont pas traitées correctement. Consultez la section Recommandations pour connaître les solutions de contournement.
Problèmes connus¶
1. Insertions de données JSON
Les insertions de données JSON ne sont pas correctement gérées par SnowConvert.
2. Manipulation d’objets JSON
Les utilisations des objets JSON (colonnes, variables ou paramètres) ne sont pas correctement convertis par SnowConvert AI. Consultez la section Recommandations pour connaître les solutions de contournement
Recommandations¶
1. JSON Data Type translation workaround¶
Le type de données JSON est traduit en VARIANT, de sorte que l’information peut être formatée à l’aide de la fonction Snowflake PARSE_JSON. Cette approche vous permettra de stocker, d’interroger et d’opérer les données JSON dans Snowflake en utilisant une syntaxe similaire à celle d’Oracle.
Oracle¶
Résultat 1¶
JSON_SERIALIZE(JSON_COLUMN) |
|---|
{« id »:1, »content »: »json content »} |
{« id »:2, »content »:{« header »: »header text one », »content »: »content text one »}} |
{« id »:3, »content »:{« header »: »header tex two », »content »: »content text two »}} |
Résultat 2¶
“ID:” JT.JSON_COLUMN.ID |
“HEADER:” UPPER(JT.JSON_COLUMN.CONTENT.HEADER) |
|---|---|
ID : 1 |
HEADER : |
ID : 2 |
HEADER: « HEADER TEXT ONE » |
ID : 3 |
HEADER: « HEADER TEX TWO » |
Snowflake¶
Résultat 1¶
JSON_COLUMN |
|---|
{ « content »: « json content », « id »: 1} |
{ « content »: { « content »: « content text one », « header »: « header text one » }, « id »: 2} |
{ « content »: { « content »: « content text two », « header »: « header tex two » }, « id »: 3} |
Résultat 2¶
“ID: “ JT.JSON_COLUMN:ID |
“HEADER: “ UPPER(JT.JSON_COLUMN:CONTENT:HEADER) |
|---|---|
ID : 1 |
|
ID : 2 |
HEADER: HEADER TEXT ONE |
ID : 3 |
HEADER: HEADER TEX TWO |
Note
Vous devez utiliser SELECT comme argument INSERT INTO au lieu de la clause VALUES pour utiliser la fonction PARSE_JSON.
Note
Utilisez l’opérateur « : » au lieu de « . » pour accéder aux propriétés de l’objet JSON. Permet plusieurs niveaux d’imbrication dans les deux moteurs.
EWIs connexes¶
SSC-EWI-0073: Examen de l’équivalence fonctionnelle en attente.
Type de données LONG¶
Les colonnes
LONGstockent des chaînes de caractères de longueur variable contenant jusqu’à 2 gigaoctets -1, soit 231-1 octets. Les colonnesLONGprésentent un grand nombre de caractéristiques des colonnesVARCHAR2. Vous pouvez utiliser les colonnesLONGpour stocker de longues chaînes de texte. La longueur des valeursLONGpeut être limitée par la mémoire disponible sur votre ordinateur. (Référence linguistique Oracle SQL Type de données Long)
Modèles d’échantillons de sources¶
Long dans Create table¶
Oracle¶
Snowflake¶
Récupération des données d’une colonne Long¶
Oracle¶
Résultat¶
LONG_COLUMN |
|---|
il s’agit d’un texte |
Snowflake¶
Résultat¶
LONG_COLUMN |
|---|
il s’agit d’un texte |
Problèmes connus¶
1. The max length of long (Oracle) and varchar (Snowflake) are different¶
Selon la documentation d’Oracle, la colonne Long peut stocker jusqu’à 2 gigaoctets de données, alors que la colonne Varchar de Snowflake est limitée à 16 Mo.
2. Cast of Long column¶
The Long data type can only be cast to a CLOB data type by using the TO_LOB function. This function only works when used in the select list of a subquery in an INSERT statement. Consider the following sample
Oracle¶
Avertissement
Si le type de données de la colonne de la table cible est différent de CLOB, Oracle peut insérer des valeurs nulles ou afficher une erreur lors de la tentative d’insertion des données.
EWIs connexes¶
SSC-FDM-0006: La colonne Number Type peut ne pas se comporter de la même manière dans Snowflake.
Types de données RAW et LONG RAW¶
Description¶
Les types de données
RAWetLONGRAWstockent des données qui ne doivent pas être explicitement converties par Oracle Database lors du déplacement de données entre différents systèmes. Ces types de données sont destinés aux données binaires ou aux chaînes d’octets. (Référence linguistique Oracle SQL Types de données Row et Long Raw)
Modèles d’échantillons de sources¶
Raw et Long Raw dans Create Table¶
Oracle¶
Snowflake CREATE OR REPLACE TABLE raw_table¶
Récupération de données des colonnes Raw et Long Raw¶
Oracle¶
Résultat¶
ID |
RAW_COLUMN |
LONG_RAW_COLUMN |
|---|---|---|
1 |
ªº««««© 2 B7 :ºººº«ºª»¬ßý |
|
2 |
ªªªªª |
«««««««««««««««««««ªººªºººººººººº |
3 |
ªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªª |
ªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªª |
Snowflake¶
Résultat¶
ID |
RAW_COLUMN |
LONG_RAW_COLUMN |
|---|---|---|
1 |
ªº««««© 2 B7 :ºººº«ºª»¬ßý |
|
2 |
ªªªªª |
«««««««««««««««««««ªººªºººººººººº |
3 |
ªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªª |
ªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªª |
Problèmes connus¶
Aucun problème n’a été constaté.
EWIs connexes¶
Pas d’EWIs connexes.
Types de données numériques¶
Description¶
Les types de données numériques de la base de données Oracle stockent des nombres à virgule fixe et flottante, positifs et négatifs, ainsi que zéro et infini, et des valeurs qui sont le résultat indéfini d’une opération « not a number » (n’est pas un nombre).
NAN. (Référence linguistique Oracle Types de données numériques).
Notes sur les opérations arithmétiques¶
Notez que chaque opération effectuée sur des types de données numériques est stockée en interne sous la forme d’un nombre. En outre, en fonction de l’opération effectuée, il est possible d’encourir une erreur liée à la manière dont les valeurs intermédiaires sont stockées dans Snowflake. Pour plus d’informations consultez ce [post Snowflake sur les nombres internes dans Snowflake](https://community.snowflake.com/s/ question/0D50Z00008HhSHCSA3/sql-compilation-error-invalid-intermediate-datatype-number7148).
Type de données FLOAT¶
Description¶
Le type de données
FLOATest un sous-type deNUMBER. Il peut être spécifié avec ou sans précision, qui a la même définition que pourNUMBERet peut aller de 1 à 126. L’échelle ne peut pas être spécifiée mais est interprétée à partir des données. (Référence linguistique Oracle Type de données Float)
Avertissement
Notes on arithmetic operations
Notez que toute opération effectuée sur des types de données numériques est stockée en interne sous la forme d’un nombre. De plus, en fonction de l’opération effectuée, il est possible d’encourir une erreur liée à la manière dont les valeurs intermédiaires sont stockées dans Snowflake, pour plus d’informations veuillez consulter ce post Snowflake sur les nombres intermédiaires dans Snowflake.
Modèles d’échantillons de sources¶
Veuillez considérer la table suivante et ses encarts pour les exemples ci-dessous :
Type de données Float dans Create table¶
Oracle¶
Snowflake¶
FLOAT¶
Il n’y a pas de différences entre Oracle et Snowflake en ce qui concerne le type de données FLOAT sans précision.
Oracle¶
Résultat¶
col1 |
|---|
100,55555 |
1,9 |
Snowflake¶
Résultat¶
col1 |
|---|
100,55555 |
1,9 |
FLOAT (p)¶
Les résultats des requêtes peuvent ne pas être équivalents lorsque la précision (p) est spécifiée dans le type de donnéesFLOAT. Il y a de petites différences d’arrondi.
Oracle¶
Résultat¶
col2 |
|---|
1,2 |
7,9 |
13 |
120 |
col3 |
—————————————————————————————————- |
1111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000 |
Snowflake¶
Résultat¶
col2 |
|---|
1,23 |
7,89 |
12,79 |
123,45 |
col3 |
—————————————————————————————————- |
1111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000 |
Problèmes connus¶
1. FLOAT data type with precision¶
Lorsque le type de données FLOAT est précis, les résultats des requêtes peuvent présenter de légères différences d’arrondi.
EWIs connexes¶
Pas d’EWIs connexes.
Type de données NUMBER¶
Description¶
Le type de données
NUMBERstocke le zéro ainsi que des nombres fixes positifs et négatifs ayant une valeur absolue comprise entre 1,0 x 10-130 et 1,0 x 10126. Si vous spécifiez une expression arithmétique dont la valeur a une valeur absolue supérieure ou égale à 1,0 x 10126, Oracle renvoie une erreur. Chaque valeurNUMBERnécessite de 1 à 22 octets. (Référence linguistique Oracle Type de données Number).
Le type de données NUMBER peut être spécifié en utilisant la forme suivante NUMBER(p, s) (les deux paramètres sont facultatifs) où :
pest la précision ou le nombre maximal de chiffres décimaux significatifs, le chiffre le plus significatif étant le chiffre non nul le plus à gauche et le chiffre le moins significatif étant le chiffre connu le plus à droite. La précision peut varier de 0 à 38.sest l”échelle ou le nombre de chiffres allant de la virgule décimale au chiffre le moins significatif. L’échelle peut aller de -84 à 127.
Sous Oracle, le fait de ne pas spécifier la précision (en utilisant NUMBER ou NUMBER(*)) entraîne la création de la colonne en tant que « précision non définie ». Cela signifie qu’Oracle stocke les valeurs de manière dynamique, ce qui permet de stocker n’importe quel nombre dans cette colonne. Snowflake ne prend pas en charge cette fonctionnalité ; c’est pourquoi ils seront remplacés par NUMBER(38, 18), ce qui permettra de stocker la plus grande variété de nombres.
Avertissement
Notes on arithmetic operations
Notez que chaque opération effectuée sur des types de données numériques est stockée en interne sous la forme d’un nombre. En outre, en fonction de l’opération effectuée, il est possible d’encourir une erreur liée à la manière dont les valeurs intermédiaires sont stockées dans Snowflake. Pour plus d’informations, veuillez consulter ce [post Snowflake sur les nombres internes dans Snowflake](https://community.snowflake. com/s/question/0D50Z00008HhSHCSA3/sql-compilation-error-invalid-intermediate-datatype-number7148) ou consultez le message d’équivalence fonctionnelle SSC-FDM-0006.
Modèles d’échantillons de sources¶
Veuillez considérer la table suivante et ses encarts pour les exemples ci-dessous :
Nombre de types de données Create table¶
Oracle¶
Snowflake¶
NUMBER (cas par défaut)¶
Lorsque la précision et l’échelle ne sont pas spécifiées, les valeurs par défaut sont les valeurs maximales disponiblesNUMBER(38, 127). La transformation actuelle pour le cas par défaut est NUMBER(38,19).
Avertissement
Dans Oracle, le fait de ne pas définir de précision ni d’échelle entraîne par défaut une « précision et une échelle non définies ». Stocke l’entrée « telle qu’elle a été reçue », ce qui signifie qu’il peut traiter à la fois des nombres entiers et des nombres à virgule flottante. Nous utilisons 38, 18 pour essayer de couvrir les deux, en utilisant 20 pour les entiers, et en laissant 18 pour les chiffres à virgule flottante.
Oracle¶
Résultat¶
col1 |
|---|
100 |
Snowflake¶
Résultat¶
col1 |
|---|
100.0000000000000000000 |
NUMBER (p)¶
Dans ce cas, la précision spécifiera le nombre de chiffres que le nombre pourrait avoir à gauche de la virgule décimale.
Oracle¶
Résultat¶
col2 |
|---|
2 |
Snowflake¶
Résultat¶
col2 |
|---|
2 |
NUMBER (p, s) p > s¶
Dans le cas où s est inférieur à p, la précision spécifiera le nombre de chiffres que le nombre pourrait avoir. L’échelle spécifie le nombre de chiffres significatifs à droite du point décimal, de sorte que le nombre de chiffres à gauche du point décimal dépend de l’échelle spécifiée.
Oracle¶
Résultat¶
col3 |
|---|
12345.12345 |
Snowflake¶
Résultat¶
col3 |
|---|
12345.12345 |
NUMBER (p, -s)¶
Une échelle négative est le nombre de chiffres significatifs à gauche du point décimal, jusqu’au chiffre le moins significatif inclus. Pour l’échelle négative, le chiffre le moins significatif se trouve à gauche du point décimal, car les données réelles sont arrondies au nombre de places spécifié à gauche du point décimal. La transformation actuelle consiste à supprimer l’échelle négative.
Oracle¶
Résultat¶
col4 |
|---|
16400 |
17600 |
Snowflake¶
Résultat¶
col4 |
|---|
16431 |
17551 |
NUMBER (p, s) s > p¶
Lorsque l’échelle est plus grande que la précision, tenez compte des aspects suivants :
Le nombre à insérer ne pouvait pas avoir de chiffres significatifs à gauche de la virgule décimale. Seul le zéro est disponible.
Le premier chiffre à droite de la virgule décimale doit être zéro.
La précision indique le nombre maximal de chiffres significatifs à droite du point décimal.
Oracle¶
Résultat¶
col5 |
|---|
0.00009 |
0.00002 |
0.01268 |
Snowflake¶
Résultat¶
col5 |
|---|
0.00009 |
0.00002 |
0.01268 |
Problèmes connus¶
1. Scale value exceeds the maximum allowed by Snowflake¶
Lorsqu’une échelle supérieure au maximum autorisé dans Snowflake (37) est spécifiée, la valeur est remplacée par 18. Pour obtenir plus d’informations à ce sujet, consultez le site SSC-FDM-0006 documentation.
2. Negative scale¶
Snowflake n’autorise pas l’échelle négative, elle est donc en cours de suppression. Cela pourrait entraîner une équivalence fonctionnelle. Pour obtenir plus d’informations sur ce problème, consultez le site SSC-EWI-0R0092 documentation.
Recommandations¶
1. UDF for NUMBER datatype Operations¶
Il est possible de migrer ces opérations manuellement en utilisant l’UDF suivante lors de l’exécution d’opérations arithmétiques afin d’éviter les problèmes mentionnés :
UDF¶
EWIs connexes¶
SSC-EWI-OR0092 L’échelle négative du type de données a été supprimée de la sortie.
SSC-FDM-0006: La colonne Number Type peut ne pas se comporter de la même manière dans Snowflake.
SSC-FDM-OR0010 La précision inférieure du type de données a été augmentée pour correspondre à l’échelle
Nombres à virgule flottante¶
Description¶
Les nombres à virgule flottante peuvent avoir une virgule décimale n’importe où du premier au dernier chiffre ou peuvent ne pas avoir de virgule décimale du tout. Un exposant peut éventuellement être utilisé après le nombre pour augmenter la plage, par exemple, 1,777 e-20. Une valeur d’échelle n’est pas applicable aux nombres à virgule flottante, car le nombre de chiffres pouvant apparaître après la virgule décimale n’est pas limité.Les nombres binaires à virgule flottante sont stockés à l’aide d’une précision binaire (les chiffres 0 et 1) (Référence linguistique Oracle Nombres à virgule flottante).
BINARY_DOUBLE¶
Description¶
BINARY_DOUBLEest un type de données de type nombre à virgule flottante de 64 bits, en double précision. Chaque valeur deBINARY_DOUBLEnécessite 8 octets. Dans une colonneBINARY_DOUBLE, les nombres à virgule flottante ont une précision binaire. Les nombres binaires à virgule flottante prennent en charge les valeurs spéciales infinies etNaN(pas un nombre). (Référence linguistique Oracle Type de données Binary_Double)
Il est possible de spécifier des nombres à virgule flottante dans les limites suivantes :
Valeur finie positive maximale = 1.79769313486231E+308
Valeur finie positive minimale = 2.22507485850720E-308
Modèles d’échantillons de sources¶
Veuillez considérer la table suivante et ses encarts pour l’exemple ci-dessous :
Double binaire dans Create table¶
Oracle¶
Snowflake¶
Note
« NaN » signifie _ Not a Number _, cette valeur est autorisée par le type de donnéesBINARY_DOUBLE dans Oracle et par le type de donnéesFLOATdans Snowflake.
BINARY_DOUBLE -> FLOAT¶
Le type de donnéesBINARY_DOUBLEn’étant pas pris en charge par Snowflake, il est converti en FLOAT.
Oracle¶
Résultat¶
col1 |
|---|
0 |
179769313486231000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 |
NaN |
Snowflake¶
Résultat¶
col1 |
|---|
0 |
179769313486231000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 |
NaN |
Problèmes connus¶
1. The BINARY_DOUBLE data type is not supported by Snowflake¶
Le type de données BINARY_DOUBLE est converti en FLOAT car il n’est pas pris en charge par Snowflake.
EWIs connexes¶
Pas d’EWIs connexes.
BINARY_FLOAT¶
Description¶
BINARY_FLOATest un type de données de type nombre à virgule flottante de 32 bits, à simple précision. Chaque valeurBINARY_FLOATnécessite 4 octets. Dans une colonneBINARY_FLOAT, les nombres à virgule flottante ont une précision binaire. Les nombres binaires à virgule flottante prennent en charge les valeurs spéciales infinies etNaN(pas un nombre).(Référence linguistique Oracle Type de données Binary_Float)
Il est possible de spécifier des nombres à virgule flottante dans les limites suivantes :
Valeur finie positive maximale = 3.40282E+38F
Valeur finie positive minimale = 1.17549E-38F
Modèles d’échantillons de sources¶
Veuillez considérer la table suivante et ses encarts pour l’exemple ci-dessous :
Float binaire dans Create table¶
Oracle¶
Snowflake¶
Note
« NaN » signifie _ Not a Number _, cette valeur est autorisée par le type de donnéesBINARY_FLOAT dans Oracle et par le type de donnéesFLOATdans Snowflake.
BINARY_FLOAT -> FLOAT¶
Le type de donnéesBINARY_FLOATn’étant pas pris en charge par Snowflake, il est converti en FLOAT.
Oracle¶
Résultat¶
col1 |
|---|
0 |
340282001837565600000000000000000000000 |
NaN |
Snowflake¶
Résultat¶
col1 |
|---|
0 |
340282000000000000000000000000000000000 |
NaN |
Problèmes connus¶
1. The BINARY_FLOAT data type is not supported by Snowflake¶
Le type de données BINARY_FLOAT est converti en FLOAT car il n’est pas pris en charge par Snowflake.
EWIs connexes¶
Pas d’EWIs connexes.
Types de données Datetime et Interval (horodatage et intervalle)¶
Les types de données datetime sont
DATE,TIMESTAMP,TIMESTAMPWITHTIMEZONE, etTIMESTAMPWITHLOCALTIMEZONE. Les valeurs des types de données datetime sont parfois appelées datetimes. Les types de données interval sont les suivants :INTERVALYEARTOMONTHetINTERVALDAYTOSECOND. Les valeurs des types de données interval sont parfois appelées intervals. (Référence linguistique Oracle SQL Types de données Interval et Datetime (intervalle et date)).
Type de données DATE¶
Description¶
Le type de données date d’Oracle stocke à la fois les informations de date et d’heure, alors que le type de données date de Snowflake ne stocke que les informations de date. (Référence linguistique Oracle SQL Type de données Date)
The default transformation for Oracle DATE is to Snowflake TIMESTAMP. You can add the disableDateAsTimestamp flag (SnowConvert AI Command Line Interface) or disable the Transform Date as Timestamp setting (SnowConvert AI desktop application) to transform the DATE type to TIMESTAMP. Keep in mind that Snowflake DATE only stores date information and Oracle stores date and time information, if you want to avoid losing information you should transform DATE to TIMESTAMP.
Note
Différence importante de comportement d’arrondi : Lors de l’exécution d’opérations entre des types de données Date/timestamp (date/horodatage) et des intervalles impliquant des secondes, Oracle n’arrondit pas les secondes, mais préserve la précision spécifiée, tandis que Snowflake arrondit les secondes à la seconde entière la plus proche. Cette différence de comportement d’arrondi peut conduire à des résultats différents.
Modèles d’échantillons de sources¶
Date dans Create table¶
Oracle¶
Snowflake sans indicateur –disableDateAsTimestamp ou avec le paramètre « Transformer la date en horodatage » activé¶
Snowflake avec l’indicateur –disableDateAsTimestamp ou avec le paramètre « Transformer la date en horodatage » désactivé¶
Récupération des données d’une colonne Date¶
Oracle¶
Résultat¶
DATE_COL |
|---|
2010-10-10 00:00:00.000 |
Snowflake¶
Résultat¶
DATE_COL |
|---|
2010-10-10 00:00:00.000 |
Résultat avec indicateur disableDateAsTimestamp¶
DATE_COL |
|---|
2010-10-10 |
Problèmes connus¶
1. Input and output format may differ between languages¶
Dans Snowflake, les formats d’entrée et de sortie _ DATE_ dépendent des variables de session _ DATE_INPUT_FORMAT_ et _ DATE_OUTPUT_FORMAT_. Les insertions peuvent échouer parce que DATE_INPUT_FORMAT oblige l’utilisateur à utiliser un format spécifique lorsqu’une date est ajoutée par du texte. Vous pouvez modifier ces variables en utilisant la syntaxe suivante.
EWIs connexes¶
SSC-FDM-OR0042: Le type de date transformé en horodatage a un comportement différent
Type de données INTERVALDAYTOSECOND¶
Description¶
INTERVAL DAY TO SECOND stocke une période en termes de jours, d’heures, de minutes et de secondes. (Référence linguistique Oracle SQL Type de données INTERVAL DAY TO SECOND)
By default, there is no equivalent for this data type in Snowflake and it is transformed to VARCHAR.
Note
Preview Feature: When the --UseIntervalDatatype preview flag is enabled, Oracle INTERVAL DAY TO SECOND columns are preserved as native Snowflake INTERVAL DAY TO SECOND types. See the Interval Data Types translation reference for complete transformation details.
Modèles d’échantillons de sources¶
Intervalle entre le jour et la seconde dans Create table¶
Oracle¶
Snowflake¶
The Interval value is transformed to a supported Snowflake format and then inserted as text inside the column. Since Snowflake does not support Interval as a data type, it is only supported in arithmetic operations. To use the value, it needs to be extracted and used as an Interval constant (if possible).
Valeur originale Oracle : INTERVAL « 1 2:3:4.567 » DAY TO SECOND
Valeur stockée dans la colonne Snowflake : « 1d, 2h, 3m, 4s, 567ms »
Valeur en tant que constante d’intervalle Snowflake : INTERVAL « 1d, 2h, 3m, 4s, 567ms »
Récupération des données d’une colonne Intervalle Jour à Seconde¶
Oracle¶
Résultat¶
INTERVAL_DAY_COL1 |
INTERVAL_DAY_COL2 |
|---|---|
1 2:3:4.567 |
|
1 2:3:4.567 |
Snowflake¶
Résultat¶
INTERVAL_DAY_COL1 |
INTERVAL_DAY_COL2 |
|---|---|
1j, 2h, 3m, 4s, 56ms |
|
1j, 2h, 3m, 4s, 56ms |
Problèmes connus¶
1. Only arithmetic operations are supported¶
Les intervalles Snowflake ont plusieurs limites. Seules les opérations arithmétiques entre DATE ou TIMESTAMP et les constantes d’intervalle sont prises en charge, tout autre scénario n’est pas pris en charge.
EWIs connexes¶
SSC-EWI-0036: Type de données converti en autre type de données.
Type de données INTERVALYEARTOMONTH¶
Description¶
INTERVAL YEAR TO MONTH enregistre une période à l’aide des champs de date YEAR et MONTH. Il n’y a pas d’équivalent dans Snowflake, il est donc transformé en Varchar (Référence linguistique Oracle SQL Type de données INTERVAL YEAR TO MONTH)
By default, there is no equivalent for this data type in Snowflake and it is transformed to VARCHAR.
Note
Preview Feature: When the --UseIntervalDatatype preview flag is enabled, Oracle INTERVAL YEAR TO MONTH columns are preserved as native Snowflake INTERVAL YEAR TO MONTH types. See the Interval Data Types translation reference for complete transformation details.
Modèles d’échantillons de sources¶
Intervalle entre l’année et le mois dans Create table¶
Oracle¶
Snowflake¶
The Interval value is transformed to a supported Snowflake format and then inserted as text inside the column. Since Snowflake does not support Interval as a data type, it is only supported in arithmetic operations. To use the value, it needs to be extracted and used as an Interval constant (if possible).
Valeur originale Oracle : INTERVAL « 1-2 » YEAR TO MONTH
Valeur stockée dans la colonne Snowflake : « 1y, 2m »
Valeur en tant que constante d’intervalle Snowflake : INTERVAL « 1y, 2m »
Récupération des données d’une colonne Intervalle année-mois¶
Oracle¶
Résultat¶
INTERVAL_YEAR_COL1 |
INTERVAL_YEAR_COL2 |
|---|---|
1-2 |
|
1000-11 |
Snowflake¶
Résultat¶
INTERVAL_YEAR_COL1 |
INTERVAL_YEAR_COL2 |
|---|---|
1y, 2m |
Problèmes connus¶
1. Only arithmetic operations are supported¶
Les intervalles Snowflake ont plusieurs limites. Seules les opérations arithmétiques entre DATE ou TIMESTAMP et les constantes d’intervalle sont prises en charge, tout autre scénario n’est pas pris en charge.
EWIs connexes¶
SSC-EWI-0036: Type de données converti en autre type de données.
Type de données TIMESTAMP¶
Description¶
Le type de données TIMESTAMP est une extension du type de données DATE. Il stocke l’année, le mois et le jour du type de données DATE, ainsi que les valeurs de l’heure, de la minute et de la seconde. (Référence linguistique Oracle SQL Type de données Horodatage)
Les types de données Oracle et Snowflake TIMESTAMP ont la même plage de précision (0-9) mais des valeurs par défaut différentes. Dans Oracle, la valeur par défaut de la précision est de 6 et dans Snowflake de 9.
Il existe toutefois une différence de comportement lorsqu’une valeur insérée dépasse la précision de l’ensemble. Oracle arrondit les décimales supérieures, tandis que Snowflake se contente de rogner les valeurs.
Modèles d’échantillons de sources¶
Horodatage dans Create table¶
Oracle¶
Snowflake¶
Récupération des données d’une colonne Horodatage¶
Oracle¶
Résultat¶
TIMESTAMP_COL1 |
TIMESTAMP_COL2 |
|---|---|
2010-10-10 12:00:00.000 |
2010-10-10 12:00:00.000 |
Snowflake¶
Résultat¶
TIMESTAMP_COL1 |
TIMESTAMP_COL2 |
|---|---|
2010-10-10 12:00:00.000 |
2010-10-10 12:00:00.000 |
Problèmes connus¶
Aucun problème n’a été constaté.
EWIs connexes¶
Pas d’EWIs connexes.
Type de données TIMESTAMPWITHLOCALTIMEZONE¶
Description¶
Diffère de TIMESTAMP WITH TIME ZONE dans la mesure où les données stockées dans la base de données sont normalisées en fonction du fuseau horaire de la base de données et où les informations relatives au fuseau horaire ne sont pas stockées dans les données de la colonne.(Oracle SQL Language Reference Timestamp with Local Time Zone Data Type)
L’équivalent Snowflake est TIMESTAMP_LTZ.
Pour plus d’informations, consultez également la section TIMESTAMP.
Modèles d’échantillons de sources¶
Horodatage avec fuseau horaire dans Create table¶
Oracle¶
Snowflake¶
Récupération des données d’une colonne Horodatage avec la colonne Fuseau horaire local¶
Oracle¶
Résultat¶
TIMESTAMP_COL1 |
|---|
2010-10-10 18:00:00.000 |
2010-10-10 20:00:00.000 |
Snowflake¶
Résultat¶
TIMESTAMP_COL1 |
|---|
2010-10-10 12:00:00.000 -0700 |
2010-10-10 12:00:00.000 -0700 |
Note
Notez que les jeux résultats sont différents dans les deux moteurs car chaque base de données est définie avec un fuseau horaire différent. Le fuseau horaire d’Oracle est « +00:00 » et celui de Snowflake est « America/Los\Angeles ».
Utilisez la syntaxe suivante pour modifier le fuseau horaire par défaut de la base de données :
Problèmes connus¶
1. Default database timezone¶
Les opérations effectuées avec ce type de données sont affectées par le fuseau horaire de la base de données et les résultats peuvent être différents. Vous pouvez vérifier le fuseau horaire par défaut à l’aide des requêtes suivantes :
Oracle¶
Snowflake¶
2. Oracle Timestamp with local timezone behavior¶
When operating timestamps with local timezone data types, Oracle converts the timestamps to the default timezone of the database. To emulate this behavior in Snowflake, the TIMESTAMP_TYPE_MAPPING session parameter should be set to “TIMESTAMP_LTZ”.
3. Timestamp formats may be different¶
Snow Convert n’effectue aucune conversion pour les chaînes de format date/horodatage, il peut donc y avoir des erreurs lors du déploiement du code. Exemple :
Oracle¶
Snowflake¶
Avertissement
The query will fail in Snowflake because the default timestamp input format does not recognize “-8:00” as a valid UTC offset. It should be replaced with “0800” or “-08:00” to get the same result.
EWIs connexes¶
Pas d’EWIs connexes.
Type de données TIMESTAMPWITHTIMEZONE¶
Description¶
TIMESTAMP WITH TIME ZONE est une variante de TIMESTAMP qui inclut dans sa valeur un nom de région de fuseau horaire ou un décalage de fuseau horaire. L’équivalent dans Snowflake est TIMESTAMP_TZ.(Oracle SQL Language Reference Timestamp with Time Zone Data Type)
L’équivalent Snowflake est TIMESTAMP_TZ.
Pour plus d’informations, consultez également la section TIMESTAMP.
Modèles d’échantillons de sources¶
Horodatage avec fuseau horaire dans Create table¶
Oracle¶
Snowflake¶
Récupération des données d’une colonne Horodatage avec colonne Fuseau horaire¶
Oracle¶
Résultat¶
TIMESTAMP_COL1 |
|---|
2010-10-10 12:00:00.000 -0600 |
Snowflake¶
Résultat¶
TIMESTAMP_COL1 |
|---|
2010-10-10 12:00:00.000 -0700 |
Note
Notez que le fuseau horaire est différent dans les deux moteurs car lorsque le fuseau horaire n’est pas spécifié, le fuseau horaire par défaut de la base de données est ajouté.
Utilisez la syntaxe suivante pour modifier le fuseau horaire par défaut de la base de données :
Problèmes connus¶
1. Timestamp formats may be different¶
Snow Convert n’effectue aucune conversion pour les chaînes de format date/horodatage, il peut donc y avoir des erreurs lors du déploiement du code. Exemple :
Oracle¶
Snowflake¶
Avertissement
The query will fail in Snowflake because the default timestamp input format does not recognize “-8:00” as a valid UTC offset. It should be replaced with “-0800” or “-08:00” to get the same result.
EWIs connexes¶
Pas d’EWIs connexes.
Arithmétique de DateTime (horodatage)¶
Ce contenu explique la transformation actuelle pour certaines opérations arithmétiques entre les types DateTime (horodatage).
Description¶
Dans Oracle, certaines opérations arithmétiques pouvaient être effectuées entre les types DateTime, comme l’addition, la soustraction, la multiplication et la division. Actuellement, SnowConvert AI peut résoudre certains cas d’addition et de soustraction. Ces cas sont expliqués ci-dessous.
Modèles d’échantillons de sources¶
Ceci est un résumé de la transformation actuelle pour les différentes combinaisons des opérations d’addition et de soustraction avec des types date, horodatage, nombre et inconnus.
Note
Considérez le tableau suivant pour les exemples ci-dessous.
Oracle¶
Snowflake¶
Ajout¶
Matrice de combinaison¶
Ceci est un résumé de la façon dont l’outil de migration résout les opérations d’ajout pour les différentes combinaisons avec les typesdate, horodatage, nombre et inconnus.
Ajout |
Date |
Horodatage |
Nombre |
Intervalle |
Inconnu |
Float |
|---|---|---|---|---|---|---|
Date |
INVALID |
INVALID |
Date + jour de l’intervalle |
Date + intervalle IntervalUnit |
DATEADD_UDF |
DATEADD_UDF |
Horodatage |
INVALID |
INVALID |
Horodatage + jour d’intervalle |
Horodatage + Intervalle IntervalUnit |
DATEADD_UDF |
DATEADD_UDF |
Nombre |
Date + jour de l’intervalle |
Horodatage + jour d’intervalle |
Nombre + Nombre |
INVALID |
Nombre + Flottant |
|
Intervalle |
Date + intervalle IntervalUnit |
Horodatage + Intervalle IntervalUnit |
INVALID |
Inconnu + Intervalle IntervalUnit |
INVALID |
|
Inconnu |
DATEADD_UDF |
DATEADD_UDF |
Inconnu + Nombre |
Inconnu + Intervalle IntervalUnit |
||
Flottant |
DATEADD_UDF |
DATEADD_UDF |
Flottant + Nombre |
INVALID |
Flottant + Flottant |
Note
An Unknown Type column is the result of the migrator being unable to establish the data type that the column contains. This can happen for many reasons, for example, missing DDLs for the tables being operated on, or columns resulting from operations on views, CTEs, or subqueries.
Avertissement
By default, Snow Convert migrates operations of type Date/Timestamp + Interval to the native Snowflake operations, but in some cases may be useful to use UDF instead. For further details, see Interval UDFs vs. Snowflake native interval operation.
Les différents chemins que l’outil de migration peut utiliser pour résoudre les opérations d’ajout seront expliqués ci-dessous :
Non valide¶
Certaines combinaisons ne sont pas valides pour effectuer des opérations d’ajout dans Oracle :
Oracle¶
Résultat¶
Date + jour de l’intervalle¶
Il s’agit de la transformation actuelle de l’opération d’addition entre un type de date et un nombre (et vice versa). Par exemple :
Oracle¶
Résultat¶
ASDATE+1 |
|---|
2021-11-07 00:00:00.000 |
1+ASDATE |
|---|
2021-11-07 00:00:00.000 |
Snowflake¶
Résultat¶
ASDATE + INTERVAL “1 DAY” |
|---|
2021-11-07 |
Horodatage + jour d’intervalle¶
Il s’agit de la transformation actuelle de l’opération d’addition entre un type d’horodatage et un nombre (et vice versa). Par exemple :
Oracle¶
Résultat¶
ASTIMESTAMP+1 |
|---|
2021-11-06 11:00:00.000 |
1+ASTIMESTAMP |
|---|
2021-11-06 11:00:00.000 |
Note
Remarque : Dans Oracle, les colonnes DATE et TIMESTAMP contiennent une composante temporelle, mais Oracle a utilisé le masque de format spécifié par Le paramètre NLS_DATE_FORMAT pour décider comment convertir implicitement la date en chaîne, c’est pourquoi lors de l’exécution de certaines opérations entre TIMESTAMP et des intervalles, le résultat pourrait être affiché comme DATE, masquant la composante temporelle, à moins que le paramètre NLS_DATE_FORMAT soit modifié.
Snowflake¶
Résultat¶
ASTIMESTAMP + INTERVAL “1 DAY” |
|---|
2021-11-06 11:00:00.000 |
DATEADD_UDF¶
For those cases where there is an addition operation between a date or timestamp type and an unknown type, a user-defined function (UDF) is added. See the DATEADD_UDF implementation for details. The UDF is located in the UDFs folder. For example:
Note
Pour les exemples suivants, une sous-requête sera utilisée, en essayant de simuler la colonne de type inconnu.
Oracle¶
Résultat¶
ASDATE+(SELECTEXTRACT(DAYFROMASTIMESTAMPTWO)FROMTIMES) |
|---|
2021-11-11 00:00:00.000 |
ASTIMESTAMP+(SELECTEXTRACT(DAYFROMASTIMESTAMPTWO)FROMTIMES) |
|---|
2021-11-10 11:00:00.000 |
Snowflake¶
Résultat¶
PUBLIC.DATEADD_UDF( ASDATE, (SELECT EXTRACT(DAY FROM ASTIMESTAMPTWO) FROM PUBLIC.TIMES)) |
|---|
2021-11-11 |
PUBLIC.DATEADD_UDF( ASTIMESTAMP, (SELECT EXTRACT(DAY FROM ASTIMESTAMPTWO) FROM PUBLIC.TIMES)) |
|---|
2021-11-10 11:00:00.000 |
Soustraction¶
Matrice de combinaison¶
Soustraction |
Date |
Horodatage |
Nombre |
Intervalle |
Inconnu |
Float |
|---|---|---|---|---|---|---|
Date |
DATEDIFF |
TIMESTAMP_DIFF___UDF |
Date - Jour de l’intervalle |
Date - Intervalle IntervalUnit |
DATEDIFF_UDF |
DATEDIFF_UDF |
Horodatage |
TIMESTAMP_DIFF___UDF |
TIMESTAMP_DIFF___UDF |
Horodatage - Jour de l’intervalle |
Horodatage - Intervalle IntervalUnit |
DATEDIFF_UDF |
DATEDIFF_UDF |
Nombre |
INVALID |
INVALID |
Nombre - Nombre |
INVALID |
Nombre - Flottant |
|
Intervalle |
INVALID |
INVALID |
INVALID |
Inconnu - Intervalle IntervalUnit |
NOT SUPPORTED IN ORACLE |
|
Inconnu |
DATEDIFF_UDF |
DATEDIFF_UDF |
Inconnu - Intervalle IntervalUnit |
|||
Flottant |
DATEDIFF_UDF |
DATEDIFF_UDF |
Flottant - Nombre |
NOT SUPPORTED IN ORACLE |
Flottant - Flottant |
Note
An Unknown Type column is the result of the migrator being unable to establish the data type that the column contains. This can happen for many reasons, for example, missing DDLs for the tables being operated on, or columns resulting from operations on views, CTEs, or subqueries.
Avertissement
By default, Snow Convert migrates operations of type Date/Timestamp + Interval to the native Snowflake operations, but in some cases may be useful to use UDF instead. For further details, see Interval UDFs vs. Snowflake native interval operation.
Les différents chemins que l’outil de migration peut utiliser pour résoudre les opérations de soustraction seront expliqués ci-dessous :
Non valide¶
Certaines combinaisons ne sont pas valides pour effectuer des opérations de soustraction dans Oracle :
Oracle¶
Résultat¶
DATEDIFF¶
La soustraction entre deux opérandes de type date est convertie en fonction Snowflake DATEDIFF, utilisant ’jour’ comme unité de temps (premier paramètre). Par exemple :
Oracle¶
Résultat¶
ASDATE-ASDATETWO |
|---|
1 |
Snowflake¶
Résultat¶
DATEDIFF(DAY, ASDATETWO, ASDATE) |
|---|
1 |
Date - Jour de l’intervalle¶
Il s’agit de la transformation actuelle de l’opération de soustraction entre un type date et un type nombre. Par exemple :
Oracle¶
Résultat¶
ASDATE-1 |
|---|
2021-11-05 00:00:00.000 |
ASDATE+-1 |
|---|
2021-11-05 00:00:00.000 |
Snowflake¶
Résultat¶
ASDATE - INTERVAL “1 DAY” |
|---|
2021-11-05 |
ASDATE + INTERVAL “-1 DAY” |
|---|
2021-11-05 |
Horodatage - Jour de l’intervalle¶
Il s’agit de la transformation actuelle pour l’opération d’addition entre un type horodatage et un type nombre. Par exemple :
Oracle¶
Résultat¶
ASTIMESTAMP-1 |
|---|
2021-11-04 11:00:00.000 |
ASTIMESTAMP+-1 |
|---|
2021-11-04 11:00:00.000 |
Snowflake¶
Résultat¶
ASTIMESTAMP - INTERVAL “1 DAY” |
|---|
2021-11-04 11:00:00.000 |
ASTIMESTAMP + INTERVAL “-1 DAY” |
|---|
2021-11-04 11:00:00.000 |
Note
Remarque : Dans Oracle, les colonnes DATE et TIMESTAMP contiennent une composante temporelle, mais Oracle utilise le masque de format spécifié par le paramètre NLS_DATE_FORMAT pour décider comment convertir implicitement la date en chaîne, c’est pourquoi lors de l’exécution de certaines opérations entre TIMESTAMP et les Intervalles, le résultat pourrait être affiché comme DATE, masquant la composante temporelle, à moins que le paramètre NLS_DATE_FORMAT soit modifié.
For more information, see the Oracle NLS_DATE_FORMAT documentation.
TIMESTAMP_DIFF_UDF¶
The subtractions between timestamp types and dates with a timestamp and vice versa; are resolved by inserting the TIMESTAMP_DIFF_UDF user-defined function, (see the TIMESTAMP_DIFF_UDF implementation). For example
Oracle¶
Résultat¶
ASTIMESTAMP-ASTIMESTAMPTWO |
|---|
+000000000 01:00:00.000000 |
ASTIMESTAMP-ASDATETWO |
|---|
+000000000 11:00:00.000000 |
ASDATETWO-ASTIMESTAMP |
|---|
-000000000 11:00:00.000000 |
Snowflake¶
Résultat¶
PUBLIC.TIMESTAMP_DIFF_UDF( ASTIMESTAMP, ASTIMESTAMPTWO) |
|---|
+000000000 01:00:00.00000000 |
PUBLIC.TIMESTAMP_DIFF_UDF( ASTIMESTAMP, ASDATETWO) |
|---|
+000000000 11:00:00.00000000 |
PUBLIC.TIMESTAMP_DIFF_UDF( ASDATETWO, ASTIMESTAMP) |
|---|
-000000000 -11:00:00.00000000 |
DATEDIFF_UDF¶
For those cases where there is an addition operation between a date or timestamp type and an unknown type, a user-defined function (UDF) is added. See the DATEDIFF_UDF implementation, which could be edited to perform what is required. The UDF is located in the UDFs folder. For example:
Oracle¶
Résultat¶
ASDATE-(EXTRACT(DAYFROMASDATE)) |
|---|
2021-10-31 00:00:00.000 |
ASTIMESTAMP-(EXTRACT(DAYFROMASDATE)) |
|---|
2021-10-30 11:00:00.000 |
Snowflake¶
Résultat¶
PUBLIC.DATEDIFF_UDF( ASDATE, (EXTRACT(DAY FROM ASDATE))) |
|---|
2021-10-31 |
PUBLIC.DATEDIFF_UDF( ASTIMESTAMP, (EXTRACT(DAY FROM ASDATE))) |
|---|
2021-10-30 11:00:00.000 |
Cas courants¶
Avertissement : SSC-EWI-OR0036¶
Cet avertissement est utilisé pour indiquer si une opération d’addition ou de soustraction peut ne pas se comporter correctement en raison des types de données des opérandes. Cela signifie que le résultat de l’opération dans Snowflake n’est pas fonctionnellement équivalent à Oracle. L’addition et la soustraction entre une date ou un type numérique et un type inconnu sont l’un des cas les plus courants. Par exemple :
Oracle¶
Snowflake¶
Cet EWI est ajouté dans les opérations où le type de colonne ne pouvait pas être résolu, si le type de colonne est INTERVAL et n’est utilisé qu’avec d’autres intervalles, l’EWI sera ajouté mais le code ne sera pas commenté. L’exemple suivant décrit ce comportement :
Oracle¶
Snowflake¶
Problèmes connus¶
1. TIMESTAMP DIFF UDF improvement¶
The TIMESTAMP_DIFF_UDF must be improved to be able to specify the return type. It means adding a third parameter where it is possible to specify the time part, such as day, hour, or month.
2. Built-in functions as operators¶
Il n’existe actuellement aucune gestion des opérations de date entre les fonctions intégrées qui renvoient des types de date.
3. Multiple operands¶
Actuellement, il n’y a pas de gestion pour l’opération de date avec plus de deux opérandes, cela peut fonctionner mais vous pouvez aussi trouver des problèmes.
4. Comparison operators¶
Currently, there is no management for date operations with comparison operators, such as greater than or less than.
5. Output format¶
Le format de résultat des opérations arithmétiques peut être modifié via la commande suivante ALTER SESSION SET DATE_OUTPUT_FORMAT = 'DESIRED-FORMAT' ; dans Snowflake
6 Problèmes dans les opérations d’intervalle avec une précision de l’ordre de la seconde¶
Some operations may differ in precision, specifically those that include intervals with seconds precision, this is because Oracle rounds depending on the precision, Snowflake’s interval does not support seconds with decimal places, to have the same result, it is necessary to change the second decimal places by milliseconds in intervals considering the rounding that Oracle performs. The following example shows this issue
Oracle¶
Résultat¶
ASTIMESTAMP+INTERVAL’15.6789’SECOND(2,3) |
|---|
2021-11-05 11:00:15.679 |
ASTIMESTAMP+INTERVAL’15.6783’SECOND(2,3) |
|---|
2021-11-05 11:00:15.678 |
Snowflake¶
Résultat¶
ASTIMESTAMP + INTERVAL “15.6789 SECOND” |
|---|
2021-11-05 11:00:16.000 |
ASTIMESTAMP + INTERVAL “15.6783 SECOND” |
|---|
2021-11-05 11:00:16.000 |
ASTIMESTAMP + INTERVAL “15 SECOND, 679 MILLISECOND” |
|---|
2021-11-05 11:00:15.679 |
ASTIMESTAMP + INTERVAL “15 SECOND, 678 MILLISECOND” |
|---|
2021-11-05 11:00:15.678 |
EWIs connexes¶
SSC-EWI-0108: La sous-requête suivante correspond à au moins l’un des modèles considérés comme non valides et peut générer des erreurs de compilation.
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.
UDFs d’intervalle vs opération d’intervalle native de Snowflake¶
Description¶
Le tableau suivant montre une comparaison entre DATEADD_UDF INTERVAL et DATEDIFF_UDF INTERVAL vs l”[opération native Snowflake](https://docs.snowflake.com/fr/sql-reference/data-types-datetime. html#interval-constants) pour le calcul d’intervalle.
Code nécessaire¶
Pour exécuter les requêtes de la table comparative, il est nécessaire d’exécuter le code suivant :
Table de comparaison¶
Oracle¶
Snowflake¶
UDF Snowflake¶
Résultats¶
Oracle |
Opération Snowflake |
UDF |
|---|---|---|
2022-12-05 11:00:00.000 |
2022-12-05 11:00:00.000 |
2022-12-05 11:00:00.000 |
2020-10-05 11:00:00.000 |
2020-10-05 11:00:00.000 |
2020-10-05 11:00:00.000 |
2023-12-05 11:00:00.000 |
2023-12-05 11:00:00.000 |
2023-12-05 11:00:00.000 |
2019-10-05 11:00:00.000 |
2019-10-05 11:00:00.000 |
2019-10-05 11:00:00.000 |
2021-12-05 11:00:00.000 |
2021-12-05 11:00:00.000 |
2021-12-05 11:00:00.000 |
2021-10-05 11:00:00.000 |
2021-10-05 11:00:00.000 |
2021-10-05 11:00:00.000 |
2022-01-05 11:00:00.000 |
2022-01-05 11:00:00.000 |
2022-01-05 11:00:00.000 |
2021-09-05 11:00:00.000 |
2021-09-05 11:00:00.000 |
2021-09-05 11:00:00.000 |
2021-11-06 12:00:00.222 |
2021-11-06 12:00:00.222 |
2021-11-06 12:00:00.222 |
2021-11-04 09:59:59.778 |
2021-11-04 09:59:59.778 |
2021-11-04 09:59:59.778 |
2021-11-06 12:10:00.000 |
2021-11-06 12:10:00.000 |
2021-11-06 12:10:00.000 |
2021-11-04 09:50:00.000 |
2021-11-04 09:50:00.000 |
2021-11-04 09:50:00.000 |
2021-11-06 12:00:00.000 |
2021-11-06 12:00:00.000 |
2021-11-06 12:00:00.000 |
2021-11-04 10:00:00.000 |
2021-11-04 10:00:00.000 |
2021-11-04 10:00:00.000 |
2021-11-15 11:00:00.000 |
2021-11-15 11:00:00.000 |
2021-11-15 11:00:00.000 |
2021-10-26 11:00:00.000 |
2021-10-26 11:00:00.000 |
2021-10-26 11:00:00.000 |
2021-11-05 14:05:00.000 |
2021-11-05 14:05:00.000 |
2021-11-05 14:05:00.000 |
2021-11-05 07:55:00.000 |
2021-11-05 07:55:00.000 |
2021-11-05 07:55:00.000 |
2021-11-05 16:00:00.000 |
2021-11-05 16:00:00.000 |
2021-11-05 16:00:00.000 |
2021-11-05 06:00:00.000 |
2021-11-05 06:00:00.000 |
2021-11-05 06:00:00.000 |
2021-11-05 11:05:10.000 |
2021-11-05 11:05:10.000 |
2021-11-05 11:05:10.000 |
2021-11-05 10:54:50.000 |
2021-11-05 10:54:50.000 |
2021-11-05 10:54:50.000 |
2021-11-05 11:30:00.000 |
2021-11-05 11:30:00.000 |
2021-11-05 11:30:00.000 |
2021-11-05 10:30:00.000 |
2021-11-05 10:30:00.000 |
2021-11-05 10:30:00.000 |
2021-11-19 08:00:00.000 |
2021-11-19 08:00:00.000 |
2021-11-19 08:00:00.000 |
2021-10-22 14:00:00.000 |
2021-10-22 14:00:00.000 |
2021-10-22 14:00:00.000 |
2021-11-05 11:00:15.679 |
2021-11-05 11:00:16.000 |
2021-11-05 11:00:15.678 |
2021-11-05 10:59:44.321 |
2021-11-05 10:59:44.000 |
2021-11-05 11:00:15.678 |
2022-12-06 00:00:00.000 |
2022-12-06 |
2022-12-06 |
2020-10-06 00:00:00.000 |
2020-10-06 |
2020-10-06 |
2023-12-06 00:00:00.000 |
2023-12-06 |
2023-12-06 |
2019-10-06 00:00:00.000 |
2019-10-06 |
2019-10-06 |
2021-12-06 00:00:00.000 |
2021-12-06 |
2021-12-06 |
2021-12-06 00:00:00.000 |
2021-10-06 |
2021-10-06 |
2022-01-06 00:00:00.000 |
2022-01-06 |
2022-01-06 |
2021-09-06 00:00:00.000 |
2021-09-06 |
2021-09-06 |
2021-11-07 01:00:00.000 |
2021-11-07 01:00:00.222 |
2021-11-07 |
2021-11-04 22:59:59.000 |
2021-11-04 22:59:59.778 |
2021-11-04 |
2021-11-07 01:10:00.000 |
2021-11-07 01:10:00.000 |
2021-11-07 |
2021-11-04 22:50:00.000 |
2021-11-04 22:50:00.000 |
2021-11-04 |
2021-11-07 01:00:00.000 |
2021-11-07 01:00:00.000 |
2021-11-07 |
2021-11-04 23:00:00.000 |
2021-11-04 23:00:00.000 |
2021-11-04 |
2021-11-16 00:00:00.000 |
2021-11-16 |
2021-11-16 |
2021-10-27 00:00:00.000 |
2021-10-27 |
2021-10-27 |
2021-11-06 03:05:00.000 |
2021-11-06 03:05:00.000 |
2021-11-06 |
2021-11-05 20:55:00.000 |
2021-11-05 20:55:00.000 |
2021-11-05 |
2021-11-06 05:00:00.000 |
2021-11-06 05:00:00.000 |
2021-11-06 |
2021-11-05 19:00:00.000 |
2021-11-05 19:00:00.000 |
2021-11-05 |
2021-11-06 00:05:10.000 |
2021-11-06 00:05:10.000 |
2021-11-06 |
2021-11-05 23:54:50.000 |
2021-11-05 23:54:50.000 |
2021-11-05 |
2021-11-06 00:30:00.000 |
2021-11-06 00:30:00.000 |
2021-11-06 |
2021-11-05 23:30:00.000 |
2021-11-05 23:30:00.000 |
2021-11-05 |
2021-11-19 21:00:00.000 |
2021-11-19 21:00:00.000 |
2021-11-19 |
2021-10-23 03:00:00.000 |
2021-10-23 03:00:00.000 |
2021-10-23 |
2021-11-06 00:00:15.000 |
2021-11-06 00:00:16.000 |
2021-11-06 |
2021-11-05 23:59:44.000 |
2021-11-05 23:59:44.000 |
2021-11-05 |
2010-11-01 12:00:00.000 |
2010-11-01 12:00:00.000 |
2010-11-01 12:00:00.000 |
2008-09-01 12:00:00.000 |
2008-09-01 12:00:00.000 |
2008-09-01 12:00:00.000 |
2011-11-01 12:00:00.000 |
2011-11-01 12:00:00.000 |
2011-11-01 12:00:00.000 |
2007-09-01 12:00:00.000 |
2007-09-01 12:00:00.000 |
2007-09-01 12:00:00.000 |
2009-11-01 12:00:00.000 |
2009-11-01 12:00:00.000 |
2009-11-01 12:00:00.000 |
2009-09-01 12:00:00.000 |
2009-09-01 12:00:00.000 |
2009-09-01 12:00:00.000 |
2009-12-01 12:00:00.000 |
2009-12-01 12:00:00.000 |
2009-12-01 12:00:00.000 |
2009-08-01 12:00:00.000 |
2009-08-01 12:00:00.000 |
2009-08-01 12:00:00.000 |
2009-10-02 13:00:00.222 |
2009-10-02 13:00:00.222 |
2009-10-02 13:00:00.222 |
2009-09-30 10:59:59.778 |
2009-09-30 10:59:59.778 |
2009-09-30 10:59:59.778 |
2009-10-02 13:10:00.000 |
2009-10-02 13:10:00.000 |
2009-10-02 13:10:00.000 |
2009-09-30 10:50:00.000 |
2009-09-30 10:50:00.000 |
2009-09-30 10:50:00.000 |
2009-10-02 13:00:00.000 |
2009-10-02 13:00:00.000 |
2009-10-02 13:00:00.000 |
2009-09-30 11:00:00.000 |
2009-09-30 11:00:00.000 |
2009-09-30 11:00:00.000 |
2009-10-11 12:00:00.000 |
2009-10-11 12:00:00.000 |
2009-10-11 12:00:00.000 |
2009-09-21 12:00:00.000 |
2009-09-21 12:00:00.000 |
2009-09-21 12:00:00.000 |
2009-10-01 15:05:00.000 |
2009-10-01 15:05:00.000 |
2009-10-01 15:05:00.000 |
2009-10-01 08:55:00.000 |
2009-10-01 08:55:00.000 |
2009-10-01 08:55:00.000 |
2009-10-01 17:00:00.000 |
2009-10-01 17:00:00.000 |
2009-10-01 17:00:00.000 |
2009-10-01 07:00:00.000 |
2009-10-01 07:00:00.000 |
2009-10-01 07:00:00.000 |
2009-10-01 12:05:10.000 |
2009-10-01 12:05:10.000 |
2009-10-01 12:05:10.000 |
2009-10-01 11:54:50.000 |
2009-10-01 11:54:50.000 |
2009-10-01 11:54:50.000 |
2009-10-01 12:30:00.000 |
2009-10-01 12:30:00.000 |
2009-10-01 12:30:00.000 |
2009-10-01 11:30:00.000 |
2009-10-01 11:30:00.000 |
2009-10-01 11:30:00.000 |
2009-10-15 09:00:00.000 |
2009-10-15 09:00:00.000 |
2009-10-15 09:00:00.000 |
2009-09-17 15:00:00.000 |
2009-09-17 15:00:00.000 |
2009-09-17 15:00:00.000 |
2009-10-01 12:00:15.679 |
2009-10-01 12:00:16.000 |
2009-10-01 12:00:15.678 |
2009-10-01 11:59:44.321 |
2009-10-01 11:59:44.000 |
2009-10-01 11:59:44.321 |
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
Types de données PL SQL¶
Type de données BINARY_INTEGER¶
Ce type de données est identique au type de données PLS_INTEGER.
Type de données PLS_INTEGER¶
Description¶
Le type de données
PLS_INTEGERstocke des entiers signés compris entre -2 147 483 648 et 2 147 483 647, représentés sur 32 bits. (Référence linguistique Oracle Type de données PLS_INTEGER)
Le type de données PLS_INTEGER est transformé en NUMBER. Cette transformation s’applique également à chaque sous-type de PLS_INTEGER :
NATURALNATURALNPOSITIVEPOSITIVENSIGNTYPESIMPLE_INTEGER
Avertissement
Certains de ces sous-types ne sont actuellement pas reconnus par SnowConvert AI de sorte qu’ils sont convertis en VARIANT et considérés comme types définis par l’utilisateur. Il existe déjà un élément de travail pour résoudre le problème.
Modèles d’échantillons de sources¶
Veuillez considérer la table suivante et ses encarts pour les exemples ci-dessous :
Code¶
Utilisation de PLS_INTEGER dans les blocs de procédure¶
Oracle¶
Résultat¶
COL |
|---|
2147483647 |
2147483648 |
2147483649 |
Snowflake¶
Résultat¶
COL |
|---|
2147483647 |
2147483648 |
2147483649 |
Problèmes connus¶
1. Storage and performance features were not preserved¶
Oracle PLS_INTEGER présente certains avantages en termes de taille de stockage et de performance dans les opérations arithmétiques. Ces fonctions n’ont pas été émulées parce que Snowflake NUMBER ne les possède pas. Pour plus d’informations, consultez la documentation PLS_INTEGER.
EWIs connexes¶
Pas d’EWIs connexes.
Données de type caractères¶
Les données de type caractères stockent des données de caractères (alphanumériques), qui sont des mots et du texte libre, dans le jeu de caractères de base de données ou le jeu de caractères nationaux. (Référence linguistique Oracle SQL - Types de données caractères).
Type de données CHAR¶
Description¶
Le type de données
CHARspécifie une chaîne de caractères de longueur fixe ****dans l’ensemble de caractères de la base de données. (Référence linguistique Oracle SQL Type de données CHAR)
Comme indiqué dans la documentation Oracle, la taille dans le type de données CHAR est une contrainte de longueur et ne doit pas être confondue avec la capacité. Le nombre total de caractères pouvant être stockés dans CHAR peut varier en fonction de l’ensemble de caractères et de la configuration de la base de données, mais la taille maximale autorisée est généralement de 2 000.
Dans Snowflake, les types CHAR sont synonymes de VARCHAR, et comme vous pouvez le vérifier ici :
Référence linguistique Snowflake SQL types de données de texte de référence
La taille maximale standard est beaucoup plus importante. Mais cela ne signifie pas qu’un VARCHAR Snowflake consommera plus de stockage, comme le mentionne leur documentation :
Une chaîne de 1 caractère dans une colonne VARCHAR(16777216) ne consomme qu’un seul caractère.
Modèles d’échantillons de sources¶
Types de données Char dans Create table¶
Oracle¶
Snowflake¶
Récupération des données dans des colonnes Char¶
Oracle¶
Résultat¶
CHAR_COLUMN1 |
CHAR_COLUMN2 |
CHAR_COLUMN3 |
CHAR_COLUMN4 |
|---|---|---|---|
H |
Hello world |
Hello world |
Hello world |
Snowflake¶
Résultat¶
CHAR_COLUMN1 |
CHAR_COLUMN2 |
CHAR_COLUMN3 |
CHAR_COLUMN4 |
|---|---|---|---|
H |
Hello world |
Hello world |
Hello world |
Note
Dans Oracle, la valeur est remplie d’espaces vides pour s’adapter à la taille fixe déterminée dans la définition de la colonne. En revanche, Snowflake utilise une taille dynamique (en conservant la restriction de longueur) pour stocker la valeur.
Vérification des types de données internes pour CHAR¶
Comme mentionné au début, Snowflake utilise en interne un VARCHAR pour les colonnes de type CHAR, nous pouvons le confirmer en décrivant les tables :
Oracle¶
<../../../../../../images/migrations/sc-assets/image(106)(1).png>
Snowflake¶
<../../../../../../images/migrations/sc-assets/image(198)(1).png>
Note
La restriction de longueur est préservée, mais la mémoire utilisée par les colonnes est différente sur chaque DBMS.
Récupération de la taille en octets de chaque colonne :¶
Oracle¶
Résultat¶
LENGTHB(CHAR_COLUMN1) |
LENGTHB(CHAR_COLUMN2) |
LENGTHB(CHAR_COLUMN3) |
LENGTHB(CHAR_COLUMN4) |
|---|---|---|---|
1 |
15 |
15 |
15 |
Snowflake¶
Résultat¶
OCTET_LENGTH(CHAR_COLUMN1) |
OCTET_LENGTH(CHAR_COLUMN2) |
OCTET_LENGTH(CHAR_COLUMN3) |
OCTET_LENGTH(CHAR_COLUMN4) |
|---|---|---|---|
1 |
11 |
11 |
11 |
Remarque
Outre ces légères différences, l’intégration des données est préservée.
Problèmes connus¶
1. Les résultats obtenus à partir de certaines fonctions intégrées peuvent varier
Comme expliqué dans la section précédente, il peut arriver que l’utilisation de fonctions intégrées sur les colonnes permette de récupérer des résultats différents. Par exemple, obtenir la longueur d’une colonne.
EWIs connexes¶
SSC-FDM-OR0015: LENGTHB transformed to OCTET_LENGTH.
Type de données NCHAR¶
Description¶
Le type de données NCHAR spécifie une chaîne de caractères de longueur fixe dans l’ensemble des caractères nationaux. (Référence linguistique Oracle SQL NCHAR)
NCHAR permet de stocker des caractères spéciaux avec leur Unicode afin qu’ils soient préservés à travers toute utilisation, ces caractères spéciaux peuvent nécessiter plus de bits pour être stockés et c’est pourquoi, par défaut, l’ensemble de caractères NCHAR est AL16UTF16, contrairement à l’ensemble de données de caractères communs pour CHAR qui est généralement AL32UTF8.
NCHAR est conservé sous la forme NCHAR dans Snowflake, mais, en arrière-plan, Snowflake utilise VARCHAR. Les informations de transformation relatives à CHAR sont également valables pour NCHAR.
Modèles d’échantillons de sources¶
Types de données Nchar dans Create table¶
Oracle¶
Snowflake¶
Note
Dans Oracle, si vous essayez d’insérer ces valeurs dans une colonne CHAR de même taille, vous obtiendrez une erreur : valeur trop grande pour la colonne.
Récupération des informations dans des colonnes Nchar¶
Oracle¶
Résultat¶
NCHAR_COLUMN1 |
NCHAR_COLUMN2 |
|---|---|
ភ |
ភាសាខ |
Snowflake¶
Résultat¶
NCHAR_COLUMN1 |
NCHAR_COLUMN2 |
|---|---|
ភ |
ភាសាខ |
Récupération de la taille en octets de chaque colonne¶
Oracle¶
Résultat¶
LENGTHB(NCHAR_COLUMN1) |
LENGTHB(NCHAR_COLUMN2) |
|---|
Snowflake¶
Résultat¶
OCTET_LENGTH(NCHAR_COLUMN1) |
OCTET_LENGTH(NCHAR_COLUMN2) |
|---|
Notez que le nombre spécifié dans la déclaration de la colonne est la taille en caractères et non en octets, c’est pourquoi nous voyons plus d’espace utilisé pour stocker ces caractères spéciaux.
Note
Dans Snowflake, VARCHAR utilise UTF-8, la taille peut varier en fonction du caractère Unicode qui peut être représenté en 1, 2, 3 ou 4 octets. Dans ce cas, le caractère cambodgien utilise 3 octets pour être stocké.
Remarque
Outre ces légères différences, l’intégration des données est préservée.
Problèmes connus¶
1. Les résultats obtenus à partir de certaines fonctions intégrées peuvent varier
Comme expliqué dans la section précédente, il peut arriver que l’utilisation de fonctions intégrées sur les colonnes permette de récupérer des résultats différents. Par exemple, obtenir la longueur d’une colonne.
EWIs connexes¶
SSC-FDM-OR0015: LENGTHB transformed to OCTET_LENGTH.
Type de données NVARCHAR2¶
Description¶
Le type de données
NVARCHAR2spécifie une chaîne de caractères de longueur variable dans l’ensemble des caractères nationaux. (Référence linguistique Oracle SQL NVARCHAR2)
NVARCHAR2 permet de stocker des caractères spéciaux avec leur Unicode afin qu’ils soient préservés à travers toute utilisation, ces caractères spéciaux peuvent nécessiter plus de bits pour être stockés et c’est pourquoi, par défaut, l’ensemble de caractères NVARCHAR2 est AL16UTF16, contrairement à l’ensemble de données de caractères communs pour VARCHAR2 qui est généralement AL32UTF8.
NVARCHAR transformé en Snowflake VARCHAR, Informations sur la transformation relatives à VARCHAR2, est également valide pour NVARCHAR2.
Modèles d’échantillons de sources¶
Type de données Nvarchar2 dans Create table¶
Oracle¶
Snowflake¶
Note
Dans Oracle, si vous essayez d’insérer ces valeurs dans une colonne VARCHAR2 de même taille, vous obtiendrez une erreur : valeur trop grande pour la colonne.
Récupération des informations dans des colonnes Nchar¶
Oracle¶
Résultat¶
NVARCHAR2_COLUMN |
|---|
ភាសាខ |
Snowflake¶
Résultat¶
NVARCHAR2_COLUMN |
|---|
ភាសាខ |
Récupération de la taille en octets de chaque colonne¶
Oracle¶
Résultat¶
LENGTHB(NVARCHAR2_COLUMN) |
|---|
10 |
Snowflake¶
Résultat¶
OCTET_LENGTH(NVARCHAR2_COLUMN) |
|---|
15 |
Notez que le nombre spécifié dans la déclaration de la colonne est la taille en caractères et non en octets, c’est pourquoi nous voyons plus d’espace utilisé pour stocker ces caractères spéciaux.
Note
Dans Snowflake, VARCHAR utilise UTF-8, la taille peut varier en fonction du caractère Unicode qui peut être représenté en 1, 2, 3 ou 4 octets. Dans ce cas, les caractères cambodgiens utilisent 3 octets pour être stockés.
Remarque
Outre ces légères différences, l’intégration des données est préservée.
Problèmes connus¶
1. Les résultats obtenus à partir de certaines fonctions intégrées peuvent varier
Comme expliqué dans la section précédente, il peut arriver que l’utilisation de fonctions intégrées sur les colonnes permette de récupérer des résultats différents. Par exemple, obtenir la longueur d’une colonne.
EWIs connexes¶
SSC-FDM-OR0015: LENGTHB transformed to OCTET_LENGTH.
Type de données VARCHAR¶
Description¶
Oracle recommande d’utiliser VARCHAR2 au lieu de VARCHAR, comme expliqué dans sa documentation :
Référence linguistique Oracle SQL Varchar
Même si, la syntaxe est analysée et transformée à l’aide des types de donnéesANSI, DB2 et SQL/DS.
Type de données VARCHAR2¶
Description¶
Le type de données
VARCHAR2spécifie une chaîne de caractères de longueur variable dans l’ensemble des caractères de la base de données. (Référence linguistique Oracle SQL VARCHAR2)
Comme indiqué dans la documentation Oracle, la taille dans le type de données VARCHAR2 est une contrainte de longueur et ne doit pas être confondue avec la capacité. Le nombre total de caractères pouvant être stockés dans VARCHAR2 peut varier en fonction de l’ensemble de caractères et de la configuration de la base de données, mais la taille maximale autorisée est généralement de 4 000.
VARCHAR2 est traduit en Snowflake VARCHAR qui peut stocker un plus grand nombre d’octets/de caractères par défaut. Dans les deux cas, la mémoire utilisée est variable en fonction de la taille de la valeur stockée dans la colonne, comme dans Oracle.
Modèles d’échantillons de sources¶
Types de données Varchar2 dans Create table¶
Oracle¶
Snowflake¶
Récupération des données dans des colonnes varchar¶
Oracle¶
Résultat¶
VARCHAR2_COLUMN1 |
VARCHAR2_COLUMN2 |
VARCHAR2_COLUMN3 |
|---|---|---|
H |
Bonjour |
Hell |
Snowflake¶
Résultat¶
VARCHAR2_COLUMN1 |
VARCHAR2_COLUMN2 |
VARCHAR2_COLUMN3 |
|---|---|---|
H |
Bonjour |
Hell |
Révision de la taille des variables dans les colonnes¶
Oracle¶
Résultat¶
LENGTHB(VARCHAR2_COLUMN1) |
LENGTHB(VARCHAR2_COLUMN2) |
LENGTHB(VARCHAR2_COLUMN3) |
|---|---|---|
1 |
5 |
4 |
Snowflake¶
Résultat¶
OCTET_LENGTH(VARCHAR2_COLUMN1) |
OCTET_LENGTH(VARCHAR2_COLUMN2) |
OCTET_LENGTH(VARCHAR2_COLUMN3) |
|---|---|---|
1 |
5 |
4 |
Problèmes connus¶
Aucun problème n’a été constaté.
EWIs connexes¶
SSC-FDM-OR0015: LENGTHB transformed to OCTET_LENGTH.
Types de données LOB¶
Description¶
Les types de données LOB
BLOB,CLOBintégrés etNCLOB(stocké en interne) etBFILE(stocké en externe) peut stocker des données volumineuses et non structurées telles que du texte, des images, des vidéos et des données spatiales. (Référence linguistique Oracle SQL Type de données LOB).
Avertissement
Les types de données LOB ne sont pas pris en charge dans Snowflake. Conformément à la documentation de Snowflake, il est recommandé de transformer CLOB vers VARCHAR, et BLOB vers BINARY, cependant, il existe plusieurs limitations. {% endhint %}
Avertissement
Les propriétés LOB des tables ne sont également pas prises en charge dans Snowflake. {% endhint %}
Type de données BFILE
Description
Contient un emplacement vers un grand fichier binaire stocké en dehors de la base de données. Permet l’accès E/S par flux d’octets aux bases de données externes LOBs résidant sur le serveur de base de données. Une colonne ou un attribut
BFILEstocke un emplacementBFILE, qui sert de pointeur vers un fichier binaire sur le système de fichiers du serveur. L’emplacement conserve le nom du répertoire et le nom du fichier. (Référence linguistique Oracle SQL Type de données BFILE).
Avertissement
Le type de données BFILE n’est pas pris en charge dans Snowflake. VARCHAR est utilisé à la place.
Modèles d’échantillons de sources¶
Type de données Bfile dans Create table¶
Avertissement
Oracle BFILE columns are used to store a locator with the directory and filename. They are changed to Snowflake VARCHAR to store the directory and filename into the column. However, loading the content of the file must be done manually.
Oracle¶
Résultat¶
COL1 |
|---|
[BFILE:monfichier.png] |
Snowflake¶
Résultat¶
COL1 |
|---|
monrépertoire\monfichier.png |
Avertissement
UDF ajoutée pour remplacer BFILENAME().
UDF ajoutée
Problèmes connus¶
1. No access to the DBMS_LOB built-in package¶
Les types de données LOB n’étant pas pris en charge par Snowflake, il n’y a pas d’équivalent pour les fonctions DBMS_LOB et il n’existe pas encore de solution de contournement.
EWIs connexes¶
SSC-EWI-OR0105: Un travail supplémentaire est nécessaire pour l’utilisation de la colonne BFILE. La fonction BUILD_STAGE_URL est une solution de contournement recommandée.
Type de données BLOB¶
Description¶
Le type de données
BLOBstocke de grands objets binaires non structurés. Les objetsBLOBpeuvent être considérés comme des flux de bits sans sémantique d’ensemble de caractères. (Référence linguistique Oracle SQL Type de données BLOB).
Avertissement
Le type de données BLOB n’est pas pris en charge dans Snowflake. BINARY est utilisé à la place.
Modèles d’échantillons de sources¶
BLOB dans Create table¶
Oracle¶
Snowflake¶
Récupération des données¶
Oracle¶
Résultat¶
BLOB_COLUMN |
EMPTY_COLUMN |
|---|---|
[NULL] |
[BLOB] |
Snowflake¶
Résultat¶
BLOB_COLUMN |
EMPTY_COLUMN |
|---|---|
NULL |
Exemple fonctionnel¶
Avertissement
Cet exemple n’est pas une traduction de SnowConvert AI, il n’est utilisé que pour montrer l’équivalence fonctionnelle entre Oracle BLOB et Snowflake BINARY
Avertissement
Nous utilisons les fonctions « utl_raw.cast_to_raw » et « DBMS_LOB.SUBSTR ». La conversion de ces fonctions n’est pas prise en charge actuellement par SnowConvert.
Oracle¶
Résultat¶
RESULT |
|---|
[NULL] |
Hello world |
Snowflake¶
Résultat¶
RESULT |
|---|
[NULL] |
Hello world |
Problèmes connus¶
1. The difference in max length BLOB (Oracle) and BINARY (Snowflake)¶
La taille maximale d’une colonne Oracle BLOB est (4 gigaoctets - 1) * (taille du bloc de la base de données) , mais la taille de la colonne Snowflake BINARY est limitée à 8MB.
2. Empty value with EMPTY_BLOB¶
L’initialisation d’une colonne à l’aide de EMPTY_BLOB() renverra un emplacement LOB vide. Alors qu’après la traduction, la colonne renverra une chaîne avec « ».
3. No access to the DBMS_LOB built-in package¶
Les types de données LOB n’étant pas pris en charge par Snowflake, il n’y a pas d’équivalent pour les fonctions DBMS_LOB et il n’existe pas encore de solution de contournement.
EWIs connexes¶
SSC-EWI-OR0076: Paquet intégré non pris en charge.
Type de données CLOB¶
Description¶
Un objet de type caractères de grande taille contenant des caractères à un octet ou à plusieurs octets. Les ensembles de caractères à largeur fixe et à largeur variable sont pris en charge, tous deux utilisant le jeu de caractères de la base de données. (Référence linguistique Oracle SQL Type de données CLOB).
Avertissement
Le type de données CLOB n’est pas pris en charge dans Snowflake. VARCHAR est utilisé à la place.
Modèles d’échantillons de sources¶
CLOB dans Create table¶
Oracle¶
Snowflake¶
Récupération des données¶
Oracle¶
Résultat¶
CLOB_COLUMN |
EMPTY_COLUMN |
|---|---|
THIS IS A TEST |
Snowflake¶
Résultat¶
CLOB_COLUMN |
EMPTY_COLUMN |
|---|---|
THIS IS A TEST |
- |
Problèmes connus¶
1. The difference in max length CLOB (Oracle) and VARCHAR (Snowflake)¶
La taille maximale d’une colonne Oracle CLOB est (4 gigaoctets - 1) * (taille du bloc de base de données) , mais la taille maximale de la colonne Snowflake VARCHAR est limitée à 16MB.
2. Empty value with EMPTY_CLOB¶
L’initialisation d’une colonne à l’aide de EMPTY_CLOB() renverra un emplacement LOB vide. Dans Snowflake, après la traduction, la colonne renvoie une chaîne contenant « - ».
3. No access to the DBMS_LOB built-in package¶
Les types de données LOB n’étant pas pris en charge dans Snowflake, il n’existe pas d’équivalent pour les fonctions DBMS_LOB et aucune solution de contournement n’a encore été mise en œuvre.
EWIs connexes¶
Pas d’EWIs connexes.
Type de données NCLOB¶
Description¶
Un objet de type caractères de grande taille contenant des caractères Unicode. Les ensembles de caractères à largeur fixe et à largeur variable sont pris en charge, tous deux utilisant le jeu de caractères national de la base de données. (Référence linguistique Oracle SQL Type de données NCLOB).
Avertissement
Le type de données NCLOB n’est pas pris en charge dans Snowflake. VARCHAR est utilisé à la place.
Modèles d’échantillons de sources¶
NCLOB dans Create table¶
Oracle¶
Snowflake¶
Récupération des données¶
Oracle¶
Résultat¶
NCLOB_COLUMN |
EMPTY_COLUMN |
|---|---|
THIS IS A TEST |
Snowflake¶
Résultat¶
NCLOB_COLUMN |
EMPTY_COLUMN |
|---|---|
THIS IS A TEST |
- |
Problèmes connus¶
1. The difference in max length CLOB (Oracle) and VARCHAR (Snowflake)¶
La taille maximale d’une colonne Oracle NCLOB est (4 gigaoctets - 1) * (taille du bloc de base de données) , mais la taille maximale de la colonne Snowflake VARCHAR est limitée à 16MB.
2. Empty value with EMPTY_CLOB¶
L’initialisation d’une colonne à l’aide de EMPTY_CLOB() renverra un emplacement LOB vide. Après la traduction, la colonne renvoie une chaîne contenant « - ».
3. No access to the DBMS_LOB built-in package¶
Les types de données LOB n’étant pas pris en charge dans Snowflake, il n’existe pas d’équivalent pour les fonctions DBMS_LOB et aucune solution de contournement n’a encore été mise en œuvre.
EWIs connexes¶
Pas d’EWIs connexes.