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).
Les types de données JSON sont transformés en VARIANT afin d’émuler le comportement d’Oracle.
JSON
Modèles d’échantillons de sources¶
Type de données JSON en tant que colonne dans Create Table¶
Oracle¶
CREATE TABLE jsontable (
json_column JSON
);
INSERT INTO jsontable VALUES('{"id": 1, "content":"json content"}');
INSERT INTO jsontable VALUES('{"stringdata": "this is a text","number": 1,"numberNeg": -1,"booleanT": true,"booleanGF": false,"nullvalue": null,"object": {"1": 1,"2": 2},"array": [1, 2, 3]}');
INSERT INTO jsontable VALUES(JSON('{"id": 4}'));
SELECT * FROM jsontable;
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¶
CREATE OR REPLACE TABLE jsontable (
json_column VARIANT
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
INSERT INTO jsontable
VALUES('{"id": 1, "content":"json content"}');
INSERT INTO jsontable
VALUES('{"stringdata": "this is a text","number": 1,"numberNeg": -1,"booleanT": true,"booleanGF": false,"nullvalue": null,"object": {"1": 1,"2": 2},"array": [1, 2, 3]}');
INSERT INTO jsontable
VALUES(JSON('{"id": 4}') !!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'JSON' NODE ***/!!!);
SELECT * FROM
jsontable;
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¶
CREATE TABLE jsontable (
json_column JSON
);
INSERT INTO jsontable VALUES('{"id": 1, "content":"json content"}');
INSERT INTO jsontable VALUES('{"id": 2, "content": {"header": "header text one", "content": "content text one"}}');
INSERT INTO jsontable VALUES('{"id": 3, "content": {"header": "header tex two", "content": "content text two"}}');
SELECT * FROM jsontable;
SELECT 'ID: ' || jt.json_column.id, 'HEADER: ' || UPPER(jt.json_column.content.header) FROM jsontable jt;
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¶
CREATE OR REPLACE TABLE jsontable (
json_column VARIANT
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
INSERT INTO jsontable
VALUES('{"id": 1, "content":"json content"}');
INSERT INTO jsontable
VALUES('{"id": 2, "content": {"header": "header text one", "content": "content text one"}}');
INSERT INTO jsontable
VALUES('{"id": 3, "content": {"header": "header tex two", "content": "content text two"}}');
SELECT * FROM
jsontable;
SELECT 'ID: ' || NVL(jt.json_column.id :: STRING, ''), 'HEADER: ' || NVL(UPPER(jt.json_column.content.header) :: STRING, '') FROM
jsontable jt;
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)
LONG
Modèles d’échantillons de sources¶
Long dans Create table¶
Oracle¶
CREATE TABLE long_table
(
id NUMBER,
long_column LONG
);
INSERT INTO long_table VALUES (1, 'this is a text');
Snowflake¶
CREATE OR REPLACE TABLE long_table
(
id NUMBER(38, 18) /*** SSC-FDM-0006 - NUMBER TYPE COLUMN MAY NOT BEHAVE SIMILARLY IN SNOWFLAKE. ***/,
long_column VARCHAR
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
INSERT INTO long_table
VALUES (1, 'this is a text');
Récupération des données d’une colonne Long¶
Oracle¶
SELECT long_column FROM long_table;
Résultat¶
LONG_COLUMN |
|---|
il s’agit d’un texte |
Snowflake¶
SELECT long_column FROM
long_table;
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¶
Le type de données Long ne peut être converti qu’en type de données CLOB, et la seule façon d’y parvenir est d’utiliser la fonction TO_LOB , cette fonction ne fonctionne que si elle est utilisée dans la liste de sélection d’une sous-requête d’une instruction INSERT. Considérez l’échantillon suivant
Oracle¶
CREATE TABLE target_table (col CLOB);
INSERT INTO target_table (SELECT TO_LOB(long_column) FROM long_table);
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)
{ LONG RAW | RAW (size) }
Modèles d’échantillons de sources¶
Raw et Long Raw dans Create Table¶
Oracle¶
CREATE TABLE raw_table
(
id INTEGER,
raw_column RAW(2000),
long_raw_column LONG RAW
);
INSERT INTO raw_table values(1, 'FF00FF00FF', 'FF00FF00FFAABAABABABABA917843210984237123ABABABABAABBAAABBACDFFD');
INSERT INTO raw_table values(2, 'AAAAAAAAAA', 'ABABABABABABABABABABABABABABABAbABAbABAABABAAABABABABABABABABABABA');
--Insert with largest string posible (2000 HEX characters)
INSERT INTO raw_table VALUES (3, 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA')
Snowflake CREATE OR REPLACE TABLE raw_table¶
CREATE OR REPLACE TABLE raw_table
(
id INTEGER,
raw_column BINARY,
long_raw_column BINARY
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
INSERT INTO raw_table
values(1, 'FF00FF00FF', 'FF00FF00FFAABAABABABABA917843210984237123ABABABABAABBAAABBACDFFD');
INSERT INTO raw_table
values(2, 'AAAAAAAAAA', 'ABABABABABABABABABABABABABABABAbABAbABAABABAAABABABABABABABABABABA');
--Insert with largest string posible (2000 HEX characters)
INSERT INTO raw_table
VALUES (3, 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA');
Récupération de données des colonnes Raw et Long Raw¶
Oracle¶
SELECT * FROM raw_table ORDER BY id;
Résultat¶
ID |
RAW_COLUMN |
LONG_RAW_COLUMN |
|---|---|---|
1 |
ªº««««© 2 B7 :ºººº«ºª»¬ßý |
|
2 |
ªªªªª |
«««««««««««««««««««ªººªºººººººººº |
3 |
ªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªª |
ªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªª |
Snowflake¶
SELECT * FROM
raw_table
ORDER BY id;
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¶
CREATE TABLE float_data_type_table(
col1 FLOAT,
col2 FLOAT(5),
col3 FLOAT(126)
);
INSERT INTO float_data_type_table (col1) VALUES (100.55555);
INSERT INTO float_data_type_table (col1) VALUES (1.9);
INSERT INTO float_data_type_table (col2) VALUES (1.23);
INSERT INTO float_data_type_table (col2) VALUES (7.89);
INSERT INTO float_data_type_table (col2) VALUES (12.79);
INSERT INTO float_data_type_table (col2) VALUES (123.45);
INSERT INTO float_data_type_table (col3) VALUES (1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111.99999999999999999999555555);
Snowflake¶
CREATE OR REPLACE TABLE float_data_type_table (
col1 FLOAT,
col2 FLOAT(5),
col3 FLOAT(126)
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
INSERT INTO float_data_type_table(col1) VALUES (100.55555);
INSERT INTO float_data_type_table(col1) VALUES (1.9);
INSERT INTO float_data_type_table(col2) VALUES (1.23);
INSERT INTO float_data_type_table(col2) VALUES (7.89);
INSERT INTO float_data_type_table(col2) VALUES (12.79);
INSERT INTO float_data_type_table(col2) VALUES (123.45);
INSERT INTO float_data_type_table(col3) VALUES (1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111.99999999999999999999555555);
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¶
SELECT col1 FROM float_data_type_table;
Résultat¶
col1 |
|---|
100,55555 |
1,9 |
Snowflake¶
SELECT col1 FROM
float_data_type_table;
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¶
SELECT col2 FROM float_data_type_table;
SELECT col3 FROM float_data_type_table;
Résultat¶
col2 |
|---|
1,2 |
7,9 |
13 |
120 |
col3 |
—————————————————————————————————- |
1111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000 |
Snowflake¶
SELECT col2 FROM
float_data_type_table;
SELECT col3 FROM
float_data_type_table;
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¶
CREATE TABLE number_data_type_table
(
col1 NUMBER,
col2 NUMBER(1),
col3 NUMBER(10, 5),
col4 NUMBER(5, -2),
col5 NUMBER(4, 5)
);
INSERT INTO number_data_type_table(COL1) VALUES(100);
INSERT INTO number_data_type_table(COL2) VALUES(1.99999);
INSERT INTO number_data_type_table(COL3) VALUES(12345.12345);
INSERT INTO number_data_type_table(COL4) VALUES(16430.55555);
INSERT INTO number_data_type_table (COL4) VALUES(17550.55555);
INSERT INTO number_data_type_table(COL5) VALUES(0.00009);
INSERT INTO number_data_type_table(COL5) VALUES(0.000021);
INSERT INTO number_data_type_table(COL5) VALUES(0.012678912);
Snowflake¶
CREATE OR REPLACE TABLE number_data_type_table
(
col1 NUMBER(38, 18) /*** SSC-FDM-0006 - NUMBER TYPE COLUMN MAY NOT BEHAVE SIMILARLY IN SNOWFLAKE. ***/,
col2 NUMBER(1) /*** SSC-FDM-0006 - NUMBER TYPE COLUMN MAY NOT BEHAVE SIMILARLY IN SNOWFLAKE. ***/,
col3 NUMBER(10, 5) /*** SSC-FDM-0006 - NUMBER TYPE COLUMN MAY NOT BEHAVE SIMILARLY IN SNOWFLAKE. ***/,
col4 NUMBER(5) !!!RESOLVE EWI!!! /*** SSC-EWI-OR0092 - NUMBER DATATYPE NEGATIVE SCALE WAS REMOVED FROM OUTPUT ***/!!! /*** SSC-FDM-0006 - NUMBER TYPE COLUMN MAY NOT BEHAVE SIMILARLY IN SNOWFLAKE. ***/,
col5 NUMBER(5, 5) /*** SSC-FDM-OR0010 - NUMBER DATATYPE SMALLER PRECISION WAS INCREASED TO MATCH SCALE ***/ /*** SSC-FDM-0006 - NUMBER TYPE COLUMN MAY NOT BEHAVE SIMILARLY IN SNOWFLAKE. ***/
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
INSERT INTO number_data_type_table(COL1) VALUES(100);
INSERT INTO number_data_type_table(COL2) VALUES(1.99999);
INSERT INTO number_data_type_table(COL3) VALUES(12345.12345);
INSERT INTO number_data_type_table(COL4) VALUES(16430.55555);
INSERT INTO number_data_type_table(COL4) VALUES(17550.55555);
INSERT INTO number_data_type_table(COL5) VALUES(0.00009);
INSERT INTO number_data_type_table(COL5) VALUES(0.000021);
INSERT INTO number_data_type_table(COL5) VALUES(0.012678912);
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¶
SELECT col1 FROM number_data_type_table;
Résultat¶
col1 |
|---|
100 |
Snowflake¶
SELECT col1 FROM
number_data_type_table;
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¶
SELECT col2 FROM number_data_type_table;
Résultat¶
col2 |
|---|
2 |
Snowflake¶
SELECT col2 FROM
number_data_type_table;
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¶
SELECT col3 FROM number_data_type_table;
Résultat¶
col3 |
|---|
12345.12345 |
Snowflake¶
SELECT col3 FROM
number_data_type_table;
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¶
SELECT col4 FROM number_data_type_table;
Résultat¶
col4 |
|---|
16400 |
17600 |
Snowflake¶
SELECT col4 FROM
number_data_type_table;
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¶
SELECT col5 FROM number_data_type_table;
Résultat¶
col5 |
|---|
0.00009 |
0.00002 |
0.01268 |
Snowflake¶
SELECT col5 FROM
number_data_type_table;
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¶
CREATE OR REPLACE FUNCTION fixed_divide(a NUMBER(38,19), b NUMBER(38,19))
RETURNS NUMBER(38,19)
LANGUAGE JAVA
CALLED ON NULL INPUT
HANDLER='TestFunc.divide'
AS
'
import java.math.BigDecimal;
import java.math.RoundingMode;
class TestFunc {
public static BigDecimal divide(BigDecimal a, BigDecimal b) {
return a.divide(b,RoundingMode.HALF_UP);
}
}';
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¶
CREATE TABLE binary_double_data_type_table
(
COL1 BINARY_DOUBLE
);
INSERT INTO binary_double_data_type_table VALUES(2.22507485850720E-308D);
INSERT INTO binary_double_data_type_table VALUES(1.79769313486231E+308D);
INSERT INTO binary_double_data_type_table VALUES('NaN');
Snowflake¶
CREATE OR REPLACE TABLE binary_double_data_type_table
(
COL1 FLOAT
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
INSERT INTO binary_double_data_type_table
VALUES(2.22507485850720E-308);
INSERT INTO binary_double_data_type_table
VALUES(1.79769313486231E+308);
INSERT INTO binary_double_data_type_table
VALUES('NaN');
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¶
SELECT * FROM binary_double_data_type_table;
Résultat¶
col1 |
|---|
0 |
179769313486231000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 |
NaN |
Snowflake¶
SELECT * FROM
binary_double_data_type_table;
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¶
CREATE TABLE binary_float_data_type_table
(
col1 BINARY_FLOAT
);
INSERT INTO binary_float_data_type_table VALUES(1.17549E-38F);
INSERT INTO binary_float_data_type_table VALUES(3.40282E+38F);
INSERT INTO binary_float_data_type_table VALUES('NaN');
Snowflake¶
CREATE OR REPLACE TABLE binary_float_data_type_table
(
col1 FLOAT
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
INSERT INTO binary_float_data_type_table
VALUES(1.17549E-38);
INSERT INTO binary_float_data_type_table
VALUES(3.40282E+38);
INSERT INTO binary_float_data_type_table
VALUES('NaN');
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¶
SELECT * FROM binary_float_data_type_table;
Résultat¶
col1 |
|---|
0 |
340282001837565600000000000000000000000 |
NaN |
Snowflake¶
SELECT * FROM binary_float_data_type_table;
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)
La transformation par défaut pour Oracle DATE est vers Snowflake TIMESTAMP. Vous pouvez ajouter l’indicateur disableDateAsTimestamp (Interface de ligne de commande SnowConvert AI) ou désactiver le paramètre TransformDate as Timestamp (Application de bureau SnowConvert AI) afin de transformer le type DATE vers TIMESTAMP. Gardez à l’esprit que Snowflake DATE stocke uniquement les informations de date et Oracle stocke les informations de date et d’heure, si vous voulez éviter de perdre des informations, vous devriez transformer DATE vers 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¶
CREATE TABLE date_table
(
date_col date
);
INSERT INTO date_table(date_col) VALUES (DATE '2010-10-10');
Snowflake sans indicateur –disableDateAsTimestamp ou avec le paramètre « Transformer la date en horodatage » activé¶
CREATE OR REPLACE TABLE date_table
(
date_col TIMESTAMP /*** SSC-FDM-OR0042 - DATE TYPE COLUMN HAS A DIFFERENT BEHAVIOR IN SNOWFLAKE. ***/
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
;
INSERT INTO date_table(date_col) VALUES (DATE '2010-10-10');
Snowflake avec l’indicateur –disableDateAsTimestamp ou avec le paramètre « Transformer la date en horodatage » désactivé¶
CREATE OR REPLACE TABLE date_table
(
date_col date
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
INSERT INTO date_table(date_col) VALUES (DATE '2010-10-10');
Récupération des données d’une colonne Date¶
Oracle¶
SELECT date_col FROM date_table;
Résultat¶
DATE_COL |
|---|
2010-10-10 00:00:00.000 |
Snowflake¶
SELECT date_col FROM
date_table;
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.
ALTER SESSION SET DATE_INPUT_FORMAT = 'YYYY-DD-MM' DATE_OUTPUT_FORMAT = 'DD-MM-YYYY';
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)
Il n’y a pas d’équivalent pour ce type de données dans Snowflake, il est actuellement transformé en VARCHAR.
INTERVAL DAY [(day_precision)] TO SECOND [(fractional_seconds_precision)]
Modèles d’échantillons de sources¶
Intervalle entre le jour et la seconde dans Create table¶
Oracle¶
CREATE TABLE interval_day_to_second_table
(
interval_day_col1 interval day to second,
interval_day_col2 interval day(1) to second(4)
);
INSERT INTO interval_day_to_second_table(interval_day_col1) VALUES ( INTERVAL '1 2:3:4.56' DAY TO SECOND );
INSERT INTO interval_day_to_second_table(interval_day_col2) VALUES ( INTERVAL '1 2:3:4.56' DAY(1) TO SECOND(4) );
Snowflake¶
CREATE OR REPLACE TABLE interval_day_to_second_table
(
interval_day_col1 VARCHAR(20) !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - INTERVAL day to second DATA TYPE CONVERTED TO VARCHAR ***/!!!,
interval_day_col2 VARCHAR(20) !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - INTERVAL day(1) to second(4) DATA TYPE CONVERTED TO VARCHAR ***/!!!
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
INSERT INTO interval_day_to_second_table(interval_day_col1) VALUES ('1d, 2h, 3m, 4s, 56ms');
INSERT INTO interval_day_to_second_table(interval_day_col2) VALUES ('1d, 2h, 3m, 4s, 56ms');
La valeur de l’intervalle est transformée en un format Snowflake pris en charge, puis insérée sous forme de texte à l’intérieur de la colonne. Comme Snowflake ne prend pas en charge le type de données Interval, il n’est pris en charge que dans les opérations arithmétiques. Pour utiliser la valeur, il faut l’extraire et l’utiliser comme constante d’intervalle (si 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¶
SELECT * FROM interval_day_to_second_table;
Résultat¶
INTERVAL_DAY_COL1 |
INTERVAL_DAY_COL2 |
|---|---|
1 2:3:4.567 |
|
1 2:3:4.567 |
Snowflake¶
SELECT * FROM
interval_day_to_second_table;
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)
Il n’y a pas d’équivalent pour ce type de données dans Snowflake, il est actuellement transformé en VARCHAR.
INTERVAL YEAR [(year_precision)] TO MONTH
Modèles d’échantillons de sources¶
Intervalle entre l’année et le mois dans Create table¶
Oracle¶
CREATE TABLE interval_year_to_month_table
(
interval_year_col1 interval year to month,
interval_year_col2 interval year(4) to month
);
INSERT INTO interval_year_to_month_table(interval_year_col1) VALUES ( INTERVAL '1-2' YEAR TO MONTH );
INSERT INTO interval_year_to_month_table(interval_year_col2) VALUES ( INTERVAL '1000-11' YEAR(4) TO MONTH );
Snowflake¶
CREATE OR REPLACE TABLE interval_year_to_month_table
(
interval_year_col1 VARCHAR(20) !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - INTERVAL year to month DATA TYPE CONVERTED TO VARCHAR ***/!!!,
interval_year_col2 VARCHAR(20) !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - INTERVAL year(4) to month DATA TYPE CONVERTED TO VARCHAR ***/!!!
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
INSERT INTO interval_year_to_month_table(interval_year_col1) VALUES ('1y, 2mm');
INSERT INTO interval_year_to_month_table(interval_year_col2) VALUES ('1000y, 11mm');
La valeur de l’intervalle est transformée en un format Snowflake pris en charge, puis insérée sous forme de texte à l’intérieur de la colonne. Comme Snowflake ne prend pas en charge le type de données Interval, il n’est pris en charge que dans les opérations arithmétiques. Pour utiliser la valeur, il faut l’extraire et l’utiliser comme constante d’intervalle (si 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¶
SELECT * FROM interval_year_to_month_table;
Résultat¶
INTERVAL_YEAR_COL1 |
INTERVAL_YEAR_COL2 |
|---|---|
1-2 |
|
1000-11 |
Snowflake¶
SELECT * FROM
interval_year_to_month_table;
Résultat¶
INTERVAL_YEAR_COL1 |
INTERVAL_YEAR_COL2 |
|---|---|
1y, 2m |
|1000y, 11m |
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.
TIMESTAMP [(fractional_seconds_precision)]
Modèles d’échantillons de sources¶
Horodatage dans Create table¶
Oracle¶
CREATE TABLE timestamp_table
(
timestamp_col1 TIMESTAMP,
timestamp_col2 TIMESTAMP(7)
);
INSERT INTO timestamp_table(timestamp_col1, timestamp_col2) VALUES (TIMESTAMP '2010-10-10 12:00:00', TIMESTAMP '2010-10-10 12:00:00');
Snowflake¶
CREATE OR REPLACE TABLE timestamp_table
(
timestamp_col1 TIMESTAMP(6),
timestamp_col2 TIMESTAMP(7)
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
INSERT INTO timestamp_table(timestamp_col1, timestamp_col2) VALUES (TIMESTAMP '2010-10-10 12:00:00', TIMESTAMP '2010-10-10 12:00:00');
Récupération des données d’une colonne Horodatage¶
Oracle¶
SELECT * FROM timestamp_table;
Résultat¶
TIMESTAMP_COL1 |
TIMESTAMP_COL2 |
|---|---|
2010-10-10 12:00:00.000 |
2010-10-10 12:00:00.000 |
Snowflake¶
SELECT * FROM
timestamp_table;
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.
TIMESTAMP [(fractional_seconds_precision)] WITH LOCAL TIME ZONE
Modèles d’échantillons de sources¶
Horodatage avec fuseau horaire dans Create table¶
Oracle¶
CREATE TABLE timestamp_with_local_time_zone_table
(
timestamp_col1 TIMESTAMP(5) WITH LOCAL TIME ZONE
);
INSERT INTO timestamp_with_local_time_zone_table(timestamp_col1) VALUES (TIMESTAMP '2010-10-10 12:00:00');
INSERT INTO timestamp_with_local_time_zone_table(timestamp_col1) VALUES (TIMESTAMP '2010-10-10 12:00:00 -08:00');
Snowflake¶
CREATE OR REPLACE TABLE timestamp_with_local_time_zone_table
(
timestamp_col1 TIMESTAMP_LTZ(5)
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
INSERT INTO timestamp_with_local_time_zone_table(timestamp_col1) VALUES (TIMESTAMP '2010-10-10 12:00:00');
INSERT INTO timestamp_with_local_time_zone_table(timestamp_col1) VALUES (TIMESTAMP '2010-10-10 12:00:00 -08:00');
Récupération des données d’une colonne Horodatage avec la colonne Fuseau horaire local¶
Oracle¶
SELECT * FROM timestamp_with_local_time_zone_table;
Résultat¶
TIMESTAMP_COL1 |
|---|
2010-10-10 18:00:00.000 |
2010-10-10 20:00:00.000 |
Snowflake¶
SELECT * FROM
timestamp_with_local_time_zone_table;
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 :
ALTER account SET timezone = timezone_string;
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¶
SELECT dbtimezone FROM dual;
Snowflake¶
SELECT dbtimezone FROM dual;
2. Oracle Timestamp with local timezone behavior¶
Lors de l’opération d’horodatages avec des types de données de fuseau horaire local, Oracle convertit les horodatages dans le fuseau horaire par défaut de la base de données. Pour reproduire ce comportement dans Snowflake, le paramètre de session TIMESTAMP_TYPE_MAPPING doit être défini sur « TIMESTAMP_LTZ ».
ALTER SESSION SET TIMESTAMP_TYPE_MAPPING = '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¶
INSERT INTO timestamp_with_local_time_zone_table (timestamp_col1) VALUES (TIMESTAMP '2010-10-10 12:00:00 -8:00');
Snowflake¶
INSERT INTO timestamp_with_local_time_zone_table(timestamp_col1) VALUES (TIMESTAMP '2010-10-10 12:00:00 -8:00');
Avertissement
La requête échouera dans Snowflake car le format d’entrée de l’horodatage par défaut ne reconnaît pas « -8:00 » comme un décalage valide UTC. Il doit être remplacé par « 0800 » ou « -08:00 » pour obtenir le même résultat.
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.
TIMESTAMP [(fractional_seconds_precision)] WITH TIME ZONE
Modèles d’échantillons de sources¶
Horodatage avec fuseau horaire dans Create table¶
Oracle¶
CREATE TABLE timestamp_with_time_zone_table
(
timestamp_col1 TIMESTAMP(5) WITH TIME ZONE
);
INSERT INTO timestamp_with_time_zone_table(timestamp_col1) VALUES (TIMESTAMP '2010-10-10 12:00:00');
Snowflake¶
CREATE OR REPLACE TABLE timestamp_with_time_zone_table
(
timestamp_col1 TIMESTAMP_TZ(5)
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
INSERT INTO timestamp_with_time_zone_table(timestamp_col1) VALUES (TIMESTAMP '2010-10-10 12:00:00');
Récupération des données d’une colonne Horodatage avec colonne Fuseau horaire¶
Oracle¶
SELECT * FROM timestamp_with_time_zone_table;
Résultat¶
TIMESTAMP_COL1 |
|---|
2010-10-10 12:00:00.000 -0600 |
Snowflake¶
SELECT * FROM
timestamp_with_time_zone_table;
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 :
ALTER account SET sqtimezone = timezone_string;
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¶
INSERT INTO timestamp_with_time_zone_table(timestamp_col1) VALUES (TIMESTAMP '2010-10-10 12:00:00 -8:00');
Snowflake¶
INSERT INTO timestamp_with_time_zone_table(timestamp_col1) VALUES (TIMESTAMP '2010-10-10 12:00:00 -8:00');
Avertissement
La requête échouera dans Snowflake car le format d’entrée de l’horodatage par défaut ne reconnaît pas « -8:00 » comme un décalage valide UTC. Il doit être remplacé par « -0800 » ou « -08:00 » pour obtenir le même résultat.
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¶
CREATE OR REPLACE TABLE TIMES (
AsTimeStamp TIMESTAMP(6),
AsTimestampTwo TIMESTAMP(6),
AsDate TIMESTAMP,
AsDateTwo TIMESTAMP
);
INSERT INTO TIMES
VALUES (
TO_TIMESTAMP('05/11/21, 11:00 A.M.', 'dd/mm/yy, hh:mi A.M.'),
TO_TIMESTAMP('05/11/21, 10:00 A.M.', 'dd/mm/yy, hh:mi A.M.'),
TO_DATE('06/11/21', 'dd/mm/yy'),
TO_DATE('05/11/21', 'dd/mm/yy'));
Snowflake¶
CREATE OR REPLACE TABLE TIMES (
AsTimeStamp TIMESTAMP(6),
AsTimestampTwo TIMESTAMP(6),
AsDate TIMESTAMP(6),
AsDateTwo TIMESTAMP(6)
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
INSERT INTO TIMES
VALUES (
TO_TIMESTAMP('05/11/21, 11:00 A.M.', 'dd/mm/yy, hh:mi A.M.'),
TO_TIMESTAMP('05/11/21, 10:00 A.M.', 'dd/mm/yy, hh:mi A.M.'),
TO_DATE('06/11/21', 'dd/mm/yy'),
TO_DATE('05/11/21', 'dd/mm/yy'));
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
Une colonne de type inconnu est le résultat de l’incapacité de l’outil de migration à établir le type de données que la colonne contient. Cela peut se produire pour de nombreuses raisons, par exemple l’absence de DDLs pour les tables exploitées, les colonnes résultant des opérations sur les vues, CTES sous-requêtes ou, etc.
Avertissement
Par défaut, Snow Convert migre les opérations de type Date/Timestamp + Interval vers les opérations natives de Snowflake, mais dans certains cas, il peut être utile d’utiliser UDF à la place. Vous trouverez plus d’informations sur cette UDF ici.
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¶
SELECT AsDate + AsDateTwo From TIMES;
SELECT AsDate + AsTimeStamp From TIMES;
Résultat¶
SQL Error [975] [42000]: ORA-00975: date + date not allowed
SQL Error [30087] [99999]: ORA-30087: Adding two datetime values is not allowed
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¶
SELECT AsDate + 1 FROM TIMES;
SELECT 1 + AsDate FROM TIMES;
Résultat¶
ASDATE+1 |
|---|
2021-11-07 00:00:00.000 |
1+ASDATE |
|---|
2021-11-07 00:00:00.000 |
Snowflake¶
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0036 - TYPES RESOLUTION ISSUES, ARITHMETIC OPERATION '+' MAY NOT BEHAVE CORRECTLY BETWEEN unknown AND Number ***/!!!
AsDate + 1 FROM
TIMES;
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0036 - TYPES RESOLUTION ISSUES, ARITHMETIC OPERATION '+' MAY NOT BEHAVE CORRECTLY BETWEEN Number AND unknown ***/!!! 1 + AsDate FROM
TIMES;
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¶
SELECT AsTimestamp + 1 FROM TIMES;
SELECT 1 + AsTimestamp FROM TIMES;
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¶
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0036 - TYPES RESOLUTION ISSUES, ARITHMETIC OPERATION '+' MAY NOT BEHAVE CORRECTLY BETWEEN unknown AND Number ***/!!!
AsTimestamp + 1 FROM
TIMES;
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0036 - TYPES RESOLUTION ISSUES, ARITHMETIC OPERATION '+' MAY NOT BEHAVE CORRECTLY BETWEEN Number AND unknown ***/!!! 1 + AsTimestamp FROM
TIMES;
Résultat¶
ASTIMESTAMP + INTERVAL “1 DAY” |
|---|
2021-11-06 11:00:00.000 |
DATEADD_UDF¶
Pour les cas où il y a une opération d’addition entre un type de date ou d’horodatage et un type inconnu, une fonction définie par l’utilisateur (UDF) est ajouté. Vous trouverez les informations d’implémentation de l’UDF ici. L’UDF se trouve dans le dossier UDFs. Par exemple :
Note
Pour les exemples suivants, une sous-requête sera utilisée, en essayant de simuler la colonne de type inconnu.
Oracle¶
SELECT AsDate + (SELECT EXTRACT(DAY FROM AsTimestampTwo) FROM TIMES) FROM TIMES;
SELECT AsTimestamp + (SELECT EXTRACT(DAY FROM AsTimestampTwo) FROM TIMES) FROM TIMES;
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¶
SELECT AsDate + (SELECT EXTRACT(DAY FROM AsTimestampTwo) FROM
TIMES
) FROM
TIMES;
SELECT AsTimestamp + (SELECT EXTRACT(DAY FROM AsTimestampTwo) FROM
TIMES
) FROM
TIMES;
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
Une colonne de type inconnu est le résultat de l’incapacité de l’outil de migration à établir le type de données que la colonne contient. Cela peut se produire pour de nombreuses raisons, par exemple l’absence de DDLs pour les tables exploitées, les colonnes résultant des opérations sur les vues, CTES sous-requêtes ou, etc.
Avertissement
Par défaut, Snow Convert migre les opérations de type Date/Timestamp + Interval vers les opérations natives de Snowflake, mais dans certains cas, il peut être utile d’utiliser UDF à la place. Vous trouverez plus d’informations sur cette UDF ici.
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¶
SELECT 1 - AsDate FROM TIMES;
SELECT 1 - AsTimestamp FROM TIMES;
Résultat¶
SQL Error [932] [42000]: ORA-00932: inconsistent datatypes: expected NUMBER got DATE
SQL Error [932] [42000]: ORA-00932: inconsistent datatypes: expected NUMBER got TIMESTAMP
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¶
SELECT AsDate - AsDateTwo FROM TIMES;
Résultat¶
ASDATE-ASDATETWO |
|---|
1 |
Snowflake¶
SELECT AsDate - AsDateTwo FROM
TIMES;
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¶
SELECT AsDate - 1 FROM TIMES;
SELECT AsDate + -1 FROM TIMES;
Résultat¶
ASDATE-1 |
|---|
2021-11-05 00:00:00.000 |
ASDATE+-1 |
|---|
2021-11-05 00:00:00.000 |
Snowflake¶
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0036 - TYPES RESOLUTION ISSUES, ARITHMETIC OPERATION '-' MAY NOT BEHAVE CORRECTLY BETWEEN unknown AND Number ***/!!!
AsDate - 1 FROM
TIMES;
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0036 - TYPES RESOLUTION ISSUES, ARITHMETIC OPERATION '+' MAY NOT BEHAVE CORRECTLY BETWEEN unknown AND Number ***/!!! AsDate + -1 FROM
TIMES;
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¶
SELECT AsTimestamp - 1 FROM TIMES;
SELECT AsTimestamp + -1 FROM TIMES;
Résultat¶
ASTIMESTAMP-1 |
|---|
2021-11-04 11:00:00.000 |
ASTIMESTAMP+-1 |
|---|
2021-11-04 11:00:00.000 |
Snowflake¶
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0036 - TYPES RESOLUTION ISSUES, ARITHMETIC OPERATION '-' MAY NOT BEHAVE CORRECTLY BETWEEN unknown AND Number ***/!!!
AsTimestamp - 1 FROM
TIMES;
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0036 - TYPES RESOLUTION ISSUES, ARITHMETIC OPERATION '+' MAY NOT BEHAVE CORRECTLY BETWEEN unknown AND Number ***/!!! AsTimestamp + -1 FROM
TIMES;
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é.
Vous trouverez plus d’informations sur le format NLS_DATE_FORMAT ici.
TIMESTAMP_DIFF_UDF¶
Les soustractions entre les types horodatage et dates avec un horodatage et vice versa sont résolues en insérant la fonction définie par l’utilisateur TIMESTAMP_DIFF_UDF, (l’implémentation se trouve ici). Par exemple :
Oracle¶
SELECT AsTimeStamp - AsTimeStampTwo FROM TIMES;
SELECT AsTimeStamp - AsDateTwo FROM TIMES;
SELECT AsDateTwo - AsTimeStamp FROM TIMES;
Résultat¶
ASTIMESTAMP-ASTIMESTAMPTWO |
|---|
+000000000 01:00:00.000000 |
ASTIMESTAMP-ASDATETWO |
|---|
+000000000 11:00:00.000000 |
ASDATETWO-ASTIMESTAMP |
|---|
-000000000 11:00:00.000000 |
Snowflake¶
SELECT AsTimeStamp - AsTimeStampTwo FROM
TIMES;
SELECT AsTimeStamp - AsDateTwo FROM
TIMES;
SELECT AsDateTwo - AsTimeStamp FROM
TIMES;
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¶
Pour les cas où il y a une opération d’addition entre un type de date ou d’horodatage et un type inconnu, une fonction définie par l’utilisateur (UDF) est ajouté. L’implémentation de l’UDF se trouve ici, mais elle peut être modifiée pour exécuter ce qui est requis. L’UDF se trouve dans le dossier UDFs. Par exemple :
Oracle¶
SELECT ASDATE - (EXTRACT(DAY FROM ASDATE)) FROM TIMES;
SELECT ASTIMESTAMP - (EXTRACT(DAY FROM ASDATE)) FROM TIMES;
Résultat¶
ASDATE-(EXTRACT(DAYFROMASDATE)) |
|---|
2021-10-31 00:00:00.000 |
ASTIMESTAMP-(EXTRACT(DAYFROMASDATE)) |
|---|
2021-10-30 11:00:00.000 |
Snowflake¶
SELECT ASDATE - (EXTRACT(DAY FROM ASDATE)) FROM
TIMES;
SELECT ASTIMESTAMP - (EXTRACT(DAY FROM ASDATE)) FROM
TIMES;
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¶
SELECT AsDate - (EXTRACT(DAY FROM ASDATE)) FROM TIMES;
Snowflake¶
SELECT AsDate - (EXTRACT(DAY FROM ASDATE)) FROM
TIMES;
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¶
SELECT INTERVAL '1' DAY + interval_column FROM UNKNOWN_TABLE;
Snowflake¶
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0036 - TYPES RESOLUTION ISSUES, ARITHMETIC OPERATION '+' MAY NOT BEHAVE CORRECTLY BETWEEN Unknown AND Interval ***/!!!
interval_column + INTERVAL '1 day' FROM
UNKNOWN_TABLE;
Problèmes connus¶
1. TIMESTAMP DIFF UDF improvement¶
TIMESTAMP_DIFF_UDF doit être amélioré pour pouvoir spécifier le type de retour. Cela signifie l’ajout d’un troisième paramètre dans lequel il est possible de spécifier la partie de temps, par exemple, le jour, l’heure, le mois, etc.
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¶
Actuellement, il n’existe pas de gestion des opérations de date avec des opérateurs de comparaison tels que supérieur à, inférieur à, etc.
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¶
Certaines opérations peuvent varier en termes de précision, en particulier celles qui incluent des intervalles avec une précision en secondes. En effet, les arrondis d’Oracle dépendent de la précision. L’intervalle de Snowflake ne prend pas en charge les secondes avec des décimales. Pour obtenir le même résultat, il est nécessaire de modifier la deuxième décimale par millisecondes dans les intervalles en tenant compte de l’arrondi effectué par Oracle. L’exemple suivant le problème :
Oracle¶
SELECT AsTimeStamp+INTERVAL '15.6789' SECOND(2,3) FROM times;
SELECT AsTimeStamp+INTERVAL '15.6783' SECOND(2,3) FROM times;
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¶
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0036 - TYPES RESOLUTION ISSUES, ARITHMETIC OPERATION '+' MAY NOT BEHAVE CORRECTLY BETWEEN Unknown AND Interval ***/!!!
AsTimeStamp + INTERVAL '15.6789 second'
FROM
times;
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0036 - TYPES RESOLUTION ISSUES, ARITHMETIC OPERATION '+' MAY NOT BEHAVE CORRECTLY BETWEEN Unknown AND Interval ***/!!! AsTimeStamp + INTERVAL '15.6783 second'
FROM
times;
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 :
CREATE OR REPLACE TABLE TIMES(
AsTimeStamp TIMESTAMP,
AsTimestampTwo TIMESTAMP,
AsDate DATE,
AsDateTwo DATE
);
INSERT INTO TIMES VALUES (
TO_TIMESTAMP('05/11/21, 11:00 A.M.', 'dd/mm/yy, hh:mi A.M.'),
TO_TIMESTAMP('05/11/21, 10:00 A.M.', 'dd/mm/yy, hh:mi A.M.'),
TO_DATE('06/11/21', 'dd/mm/yy'),
TO_DATE('05/11/21', 'dd/mm/yy'));
CREATE TABLE UNKNOWN_TABLE(
Unknown timestamp
);
INSERT INTO UNKNOWN_TABLE VALUES (
TO_TIMESTAMP('01/10/09, 12:00 P.M.', 'dd/mm/yy, hh:mi P.M.')
);
CREATE OR REPLACE TABLE TIMES (
AsTimeStamp TIMESTAMP(6),
AsTimestampTwo TIMESTAMP(6),
AsDate TIMESTAMP /*** SSC-FDM-OR0042 - DATE TYPE COLUMN HAS A DIFFERENT BEHAVIOR IN SNOWFLAKE. ***/,
AsDateTwo TIMESTAMP /*** SSC-FDM-OR0042 - DATE TYPE COLUMN HAS A DIFFERENT BEHAVIOR IN SNOWFLAKE. ***/
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
;
INSERT INTO TIMES
VALUES (
TO_TIMESTAMP('05/11/21, 11:00 A.M.', 'dd/mm/yy, hh:mi A.M.'),
TO_TIMESTAMP('05/11/21, 10:00 A.M.', 'dd/mm/yy, hh:mi A.M.'),
TO_DATE('06/11/21', 'dd/mm/yy'),
TO_DATE('05/11/21', 'dd/mm/yy'));
CREATE OR REPLACE TABLE UNKNOWN_TABLE (
Unknown TIMESTAMP(6)
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
;
INSERT INTO UNKNOWN_TABLE
VALUES (
TO_TIMESTAMP('01/10/09, 12:00 P.M.', 'dd/mm/yy, hh:mi P.M.')
);
Table de comparaison¶
Oracle¶
SELECT AsTimeStamp+INTERVAL '1-1' YEAR(2) TO MONTH FROM TIMES;
SELECT AsTimeStamp-INTERVAL '1-1' YEAR(2) TO MONTH FROM TIMES;
SELECT AsTimeStamp+INTERVAL '2-1' YEAR(4) TO MONTH FROM TIMES;
SELECT AsTimeStamp-INTERVAL '2-1' YEAR(4) TO MONTH FROM TIMES;
SELECT AsTimeStamp+INTERVAL '1' MONTH FROM TIMES;
SELECT AsTimeStamp-INTERVAL '1' MONTH FROM TIMES;
SELECT AsTimeStamp+INTERVAL '2' MONTH FROM TIMES;
SELECT AsTimeStamp-INTERVAL '2' MONTH FROM TIMES;
SELECT AsTimeStamp+INTERVAL '1 01:00:00.222' DAY TO SECOND(3) FROM TIMES;
SELECT AsTimeStamp-INTERVAL '1 01:00:00.222' DAY TO SECOND(3) FROM TIMES;
SELECT AsTimeStamp+INTERVAL '1 01:10' DAY TO MINUTE FROM TIMES;
SELECT AsTimeStamp-INTERVAL '1 01:10' DAY TO MINUTE FROM TIMES;
SELECT AsTimeStamp+INTERVAL '1 1' DAY TO HOUR FROM TIMES;
SELECT AsTimeStamp-INTERVAL '1 1' DAY TO HOUR FROM TIMES;
SELECT AsTimeStamp+INTERVAL '10' DAY FROM TIMES;
SELECT AsTimeStamp-INTERVAL '10' DAY FROM TIMES;
SELECT AsTimeStamp+INTERVAL '3:05' HOUR TO MINUTE FROM TIMES;
SELECT AsTimeStamp-INTERVAL '3:05' HOUR TO MINUTE FROM TIMES;
SELECT AsTimeStamp+INTERVAL '5' HOUR FROM TIMES;
SELECT AsTimeStamp-INTERVAL '5' HOUR FROM TIMES;
SELECT AsTimeStamp+INTERVAL '5:10' MINUTE TO SECOND FROM TIMES;
SELECT AsTimeStamp-INTERVAL '5:10' MINUTE TO SECOND FROM TIMES;
SELECT AsTimeStamp+INTERVAL '30' MINUTE FROM TIMES;
SELECT AsTimeStamp-INTERVAL '30' MINUTE FROM TIMES;
SELECT AsTimeStamp+INTERVAL '333' HOUR(3) FROM TIMES;
SELECT AsTimeStamp-INTERVAL '333' HOUR(3) FROM TIMES;
SELECT AsTimeStamp+INTERVAL '15.6789' SECOND(2,3) FROM TIMES;
SELECT AsTimeStamp-INTERVAL '15.6789' SECOND(2,3) FROM TIMES;
SELECT AsDate+INTERVAL '1-1' YEAR(2) TO MONTH FROM TIMES;
SELECT AsDate-INTERVAL '1-1' YEAR(2) TO MONTH FROM TIMES;
SELECT AsDate+INTERVAL '2-1' YEAR(4) TO MONTH FROM TIMES;
SELECT AsDate-INTERVAL '2-1' YEAR(4) TO MONTH FROM TIMES;
SELECT AsDate+INTERVAL '1' MONTH FROM TIMES;
SELECT AsDate-INTERVAL '1' MONTH FROM TIMES;
SELECT AsDate+INTERVAL '2' MONTH FROM TIMES;
SELECT AsDate-INTERVAL '2' MONTH FROM TIMES;
SELECT AsDate+INTERVAL '1 01:00:00.222' DAY TO SECOND(3) FROM TIMES;
SELECT AsDate-INTERVAL '1 01:00:00.222' DAY TO SECOND(3) FROM TIMES;
SELECT AsDate+INTERVAL '1 01:10' DAY TO MINUTE FROM TIMES;
SELECT AsDate-INTERVAL '1 01:10' DAY TO MINUTE FROM TIMES;
SELECT AsDate+INTERVAL '1 1' DAY TO HOUR FROM TIMES;
SELECT AsDate-INTERVAL '1 1' DAY TO HOUR FROM TIMES;
SELECT AsDate+INTERVAL '10' DAY FROM TIMES;
SELECT AsDate-INTERVAL '10' DAY FROM TIMES;
SELECT AsDate+INTERVAL '3:05' HOUR TO MINUTE FROM TIMES;
SELECT AsDate-INTERVAL '3:05' HOUR TO MINUTE FROM TIMES;
SELECT AsDate+INTERVAL '5' HOUR FROM TIMES;
SELECT AsDate-INTERVAL '5' HOUR FROM TIMES;
SELECT AsDate+INTERVAL '5:10' MINUTE TO SECOND FROM TIMES;
SELECT AsDate-INTERVAL '5:10' MINUTE TO SECOND FROM TIMES;
SELECT AsDate+INTERVAL '30' MINUTE FROM TIMES;
SELECT AsDate-INTERVAL '30' MINUTE FROM TIMES;
SELECT AsDate+INTERVAL '333' HOUR(3) FROM TIMES;
SELECT AsDate-INTERVAL '333' HOUR(3) FROM TIMES;
SELECT AsDate+INTERVAL '15.6789' SECOND(2,3) FROM TIMES;
SELECT AsDate-INTERVAL '15.6789' SECOND(2,3) FROM TIMES;
SELECT Unknown+INTERVAL '1-1' YEAR(2) TO MONTH FROM UNKNOWN_TABLE;
SELECT Unknown-INTERVAL '1-1' YEAR(2) TO MONTH FROM UNKNOWN_TABLE;
SELECT Unknown+INTERVAL '2-1' YEAR(4) TO MONTH FROM UNKNOWN_TABLE;
SELECT Unknown-INTERVAL '2-1' YEAR(4) TO MONTH FROM UNKNOWN_TABLE;
SELECT Unknown+INTERVAL '1' MONTH FROM UNKNOWN_TABLE;
SELECT Unknown-INTERVAL '1' MONTH FROM UNKNOWN_TABLE;
SELECT Unknown+INTERVAL '2' MONTH FROM UNKNOWN_TABLE;
SELECT Unknown-INTERVAL '2' MONTH FROM UNKNOWN_TABLE;
SELECT Unknown+INTERVAL '1 01:00:00.222' DAY TO SECOND(3) FROM UNKNOWN_TABLE;
SELECT Unknown-INTERVAL '1 01:00:00.222' DAY TO SECOND(3) FROM UNKNOWN_TABLE;
SELECT Unknown+INTERVAL '1 01:10' DAY TO MINUTE FROM UNKNOWN_TABLE;
SELECT Unknown-INTERVAL '1 01:10' DAY TO MINUTE FROM UNKNOWN_TABLE;
SELECT Unknown+INTERVAL '1 1' DAY TO HOUR FROM UNKNOWN_TABLE;
SELECT Unknown-INTERVAL '1 1' DAY TO HOUR FROM UNKNOWN_TABLE;
SELECT Unknown+INTERVAL '10' DAY FROM UNKNOWN_TABLE;
SELECT Unknown-INTERVAL '10' DAY FROM UNKNOWN_TABLE;
SELECT Unknown+INTERVAL '3:05' HOUR TO MINUTE FROM UNKNOWN_TABLE;
SELECT Unknown-INTERVAL '3:05' HOUR TO MINUTE FROM UNKNOWN_TABLE;
SELECT Unknown+INTERVAL '5' HOUR FROM UNKNOWN_TABLE;
SELECT Unknown-INTERVAL '5' HOUR FROM UNKNOWN_TABLE;
SELECT Unknown+INTERVAL '5:10' MINUTE TO SECOND FROM UNKNOWN_TABLE;
SELECT Unknown-INTERVAL '5:10' MINUTE TO SECOND FROM UNKNOWN_TABLE;
SELECT Unknown+INTERVAL '30' MINUTE FROM UNKNOWN_TABLE;
SELECT Unknown-INTERVAL '30' MINUTE FROM UNKNOWN_TABLE;
SELECT Unknown+INTERVAL '333' HOUR(3) FROM UNKNOWN_TABLE;
SELECT Unknown-INTERVAL '333' HOUR(3) FROM UNKNOWN_TABLE;
SELECT Unknown+INTERVAL '15.6789' SECOND(2,3) FROM UNKNOWN_TABLE;
SELECT Unknown-INTERVAL '15.6789' SECOND(2,3) FROM UNKNOWN_TABLE;
SELECT INTERVAL '1-1' YEAR(2) TO MONTH+ AsTimeStamp FROM TIMES;
SELECT INTERVAL '1-1' YEAR(2) TO MONTH+AsDate FROM TIMES;
SELECT INTERVAL '1-1' YEAR(2) TO MONTH+Unknown FROM UNKNOWN_TABLE;
SELECT INTERVAL '2-1' YEAR(4) TO MONTH+AsTimeStamp FROM TIMES;
SELECT INTERVAL '2-1' YEAR(4) TO MONTH+AsDate FROM TIMES;
SELECT INTERVAL '2-1' YEAR(4) TO MONTH+Unknown FROM UNKNOWN_TABLE;
SELECT INTERVAL '1' MONTH+AsTimeStamp FROM TIMES;
SELECT INTERVAL '1' MONTH+AsDate FROM TIMES;
SELECT INTERVAL '1' MONTH+Unknown FROM UNKNOWN_TABLE;
SELECT INTERVAL '2' MONTH+AsTimeStamp FROM TIMES;
SELECT INTERVAL '2' MONTH+AsDate FROM TIMES;
SELECT INTERVAL '2' MONTH+Unknown FROM UNKNOWN_TABLE;
SELECT INTERVAL '1 01:00:00.222' DAY TO SECOND(3)+AsTimeStamp FROM TIMES;
SELECT INTERVAL '1 01:00:00.222' DAY TO SECOND(3)+AsDate FROM TIMES;
SELECT INTERVAL '1 01:00:00.222' DAY TO SECOND(3)+Unknown FROM UNKNOWN_TABLE;
SELECT INTERVAL '1 01:10' DAY TO MINUTE+AsTimeStamp FROM TIMES;
SELECT INTERVAL '1 01:10' DAY TO MINUTE+AsDate FROM TIMES;
SELECT INTERVAL '1 01:10' DAY TO MINUTE+Unknown FROM UNKNOWN_TABLE;
SELECT INTERVAL '1 1' DAY TO HOUR+AsTimeStamp FROM TIMES;
SELECT INTERVAL '1 1' DAY TO HOUR+AsDate FROM TIMES;
SELECT INTERVAL '1 1' DAY TO HOUR+Unknown FROM UNKNOWN_TABLE;
SELECT INTERVAL '10' DAY+AsTimeStamp FROM TIMES;
SELECT INTERVAL '10' DAY+AsDate FROM TIMES;
SELECT INTERVAL '10' DAY+Unknown FROM UNKNOWN_TABLE;
SELECT INTERVAL '3:05' HOUR TO MINUTE+AsTimeStamp FROM TIMES;
SELECT INTERVAL '3:05' HOUR TO MINUTE+AsDate FROM TIMES;
SELECT INTERVAL '3:05' HOUR TO MINUTE+Unknown FROM UNKNOWN_TABLE;
SELECT INTERVAL '5' HOUR+AsTimeStamp FROM TIMES;
SELECT INTERVAL '5' HOUR+AsDate FROM TIMES;
SELECT INTERVAL '5' HOUR+Unknown FROM UNKNOWN_TABLE;
SELECT INTERVAL '5:10' MINUTE TO SECOND+AsTimeStamp FROM TIMES;
SELECT INTERVAL '5:10' MINUTE TO SECOND+AsDate FROM TIMES;
SELECT INTERVAL '5:10' MINUTE TO SECOND+Unknown FROM UNKNOWN_TABLE;
SELECT INTERVAL '30' MINUTE+AsTimeStamp FROM TIMES;
SELECT INTERVAL '30' MINUTE+AsDate FROM TIMES;
SELECT INTERVAL '30' MINUTE+Unknown FROM UNKNOWN_TABLE;
SELECT INTERVAL '333' HOUR(3)+AsTimeStamp FROM TIMES;
SELECT INTERVAL '333' HOUR(3)+AsDate FROM TIMES;
SELECT INTERVAL '333' HOUR(3)+Unknown FROM UNKNOWN_TABLE;
SELECT INTERVAL '15.6789' SECOND(2,3)+AsTimeStamp FROM TIMES;
SELECT INTERVAL '15.6789' SECOND(2,3)+AsDate FROM TIMES;
SELECT INTERVAL '15.6789' SECOND(2,3)+Unknown FROM UNKNOWN_TABLE;
Snowflake¶
SELECT AsTimeStamp + INTERVAL '1y, 1mm' FROM PUBLIC.TIMES;
SELECT AsTimeStamp - INTERVAL '1y, 1mm' FROM PUBLIC.TIMES;
SELECT AsTimeStamp + INTERVAL '2y, 1mm' FROM PUBLIC.TIMES;
SELECT AsTimeStamp - INTERVAL '2y, 1mm' FROM PUBLIC.TIMES;
SELECT AsTimeStamp + INTERVAL '1 month' FROM PUBLIC.TIMES;
SELECT AsTimeStamp - INTERVAL '1 month' FROM PUBLIC.TIMES;
SELECT AsTimeStamp + INTERVAL '2 month' FROM PUBLIC.TIMES;
SELECT AsTimeStamp - INTERVAL '2 month' FROM PUBLIC.TIMES;
SELECT AsTimeStamp + INTERVAL '1d, 01h, 00m, 00s, 222ms' FROM PUBLIC.TIMES;
SELECT AsTimeStamp - INTERVAL '1d, 01h, 00m, 00s, 222ms' FROM PUBLIC.TIMES;
SELECT AsTimeStamp + INTERVAL '1d, 01h, 10m' FROM PUBLIC.TIMES;
SELECT AsTimeStamp - INTERVAL '1d, 01h, 10m' FROM PUBLIC.TIMES;
SELECT AsTimeStamp + INTERVAL '1d, 1h' FROM PUBLIC.TIMES;
SELECT AsTimeStamp - INTERVAL '1d, 1h' FROM PUBLIC.TIMES;
SELECT AsTimeStamp + INTERVAL '10 day' FROM PUBLIC.TIMES;
SELECT AsTimeStamp - INTERVAL '10 day' FROM PUBLIC.TIMES;
SELECT AsTimeStamp + INTERVAL '3h, 05m' FROM PUBLIC.TIMES;
SELECT AsTimeStamp - INTERVAL '3h, 05m' FROM PUBLIC.TIMES;
SELECT AsTimeStamp + INTERVAL '5 hour' FROM PUBLIC.TIMES;
SELECT AsTimeStamp - INTERVAL '5 hour' FROM PUBLIC.TIMES;
SELECT AsTimeStamp + INTERVAL '5m, 10s' FROM PUBLIC.TIMES;
SELECT AsTimeStamp - INTERVAL '5m, 10s' FROM PUBLIC.TIMES;
SELECT AsTimeStamp + INTERVAL '30 minute' FROM PUBLIC.TIMES;
SELECT AsTimeStamp - INTERVAL '30 minute' FROM PUBLIC.TIMES;
SELECT AsTimeStamp + INTERVAL '333 hour' FROM PUBLIC.TIMES;
SELECT AsTimeStamp - INTERVAL '333 hour' FROM PUBLIC.TIMES;
SELECT AsTimeStamp + INTERVAL '15.6789 second' FROM PUBLIC.TIMES;
SELECT AsTimeStamp - INTERVAL '15.6789 second' FROM PUBLIC.TIMES;
SELECT AsDate + INTERVAL '1y, 1mm' FROM PUBLIC.TIMES;
SELECT AsDate - INTERVAL '1y, 1mm' FROM PUBLIC.TIMES;
SELECT AsDate + INTERVAL '2y, 1mm' FROM PUBLIC.TIMES;
SELECT AsDate - INTERVAL '2y, 1mm' FROM PUBLIC.TIMES;
SELECT AsDate + INTERVAL '1 month' FROM PUBLIC.TIMES;
SELECT AsDate - INTERVAL '1 month' FROM PUBLIC.TIMES;
SELECT AsDate + INTERVAL '2 month' FROM PUBLIC.TIMES;
SELECT AsDate - INTERVAL '2 month' FROM PUBLIC.TIMES;
SELECT AsDate + INTERVAL '1d, 01h, 00m, 00s, 222ms' FROM PUBLIC.TIMES;
SELECT AsDate - INTERVAL '1d, 01h, 00m, 00s, 222ms' FROM PUBLIC.TIMES;
SELECT AsDate + INTERVAL '1d, 01h, 10m' FROM PUBLIC.TIMES;
SELECT AsDate - INTERVAL '1d, 01h, 10m' FROM PUBLIC.TIMES;
SELECT AsDate + INTERVAL '1d, 1h' FROM PUBLIC.TIMES;
SELECT AsDate - INTERVAL '1d, 1h' FROM PUBLIC.TIMES;
SELECT AsDate + INTERVAL '10 day' FROM PUBLIC.TIMES;
SELECT AsDate - INTERVAL '10 day' FROM PUBLIC.TIMES;
SELECT AsDate + INTERVAL '3h, 05m' FROM PUBLIC.TIMES;
SELECT AsDate - INTERVAL '3h, 05m' FROM PUBLIC.TIMES;
SELECT AsDate + INTERVAL '5 hour' FROM PUBLIC.TIMES;
SELECT AsDate - INTERVAL '5 hour' FROM PUBLIC.TIMES;
SELECT AsDate + INTERVAL '5m, 10s' FROM PUBLIC.TIMES;
SELECT AsDate - INTERVAL '5m, 10s' FROM PUBLIC.TIMES;
SELECT AsDate + INTERVAL '30 minute' FROM PUBLIC.TIMES;
SELECT AsDate - INTERVAL '30 minute' FROM PUBLIC.TIMES;
SELECT AsDate + INTERVAL '333 hour' FROM PUBLIC.TIMES;
SELECT AsDate - INTERVAL '333 hour' FROM PUBLIC.TIMES;
SELECT AsDate + INTERVAL '15.6789 second' FROM PUBLIC.TIMES;
SELECT AsDate - INTERVAL '15.6789 second' FROM PUBLIC.TIMES;
SELECT Unknown + INTERVAL '1y, 1mm' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown - INTERVAL '1y, 1mm' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown + INTERVAL '2y, 1mm' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown - INTERVAL '2y, 1mm' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown + INTERVAL '1 month' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown - INTERVAL '1 month' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown + INTERVAL '2 month' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown - INTERVAL '2 month' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown + INTERVAL '1d, 01h, 00m, 00s, 222ms' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown - INTERVAL '1d, 01h, 00m, 00s, 222ms' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown + INTERVAL '1d, 01h, 10m' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown - INTERVAL '1d, 01h, 10m' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown + INTERVAL '1d, 1h' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown - INTERVAL '1d, 1h' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown + INTERVAL '10 day' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown - INTERVAL '10 day' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown + INTERVAL '3h, 05m' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown - INTERVAL '3h, 05m' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown + INTERVAL '5 hour' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown - INTERVAL '5 hour' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown + INTERVAL '5m, 10s' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown - INTERVAL '5m, 10s' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown + INTERVAL '30 minute' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown - INTERVAL '30 minute' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown + INTERVAL '333 hour' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown - INTERVAL '333 hour' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown + INTERVAL '15.6789 second' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown - INTERVAL '15.6789 second' FROM PUBLIC.UNKNOWN_TABLE;
UDF Snowflake¶
SELECT DATEADD_UDF(AsTimeStamp,'INTERVAL ''1-1'' YEAR(2) TO MONTH') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsTimeStamp,'INTERVAL ''1-1'' YEAR(2) TO MONTH') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsTimeStamp,'INTERVAL ''2-1'' YEAR(4) TO MONTH') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsTimeStamp,'INTERVAL ''2-1'' YEAR(4) TO MONTH') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsTimeStamp,'INTERVAL ''1'' MONTH') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsTimeStamp,'INTERVAL ''1'' MONTH') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsTimeStamp,'INTERVAL ''2'' MONTH') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsTimeStamp,'INTERVAL ''2'' MONTH') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsTimeStamp,'INTERVAL ''1 01:00:00.222'' DAY TO SECOND(3)') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsTimeStamp,'INTERVAL ''1 01:00:00.222'' DAY TO SECOND(3)') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsTimeStamp,'INTERVAL ''1 01:10'' DAY TO MINUTE') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsTimeStamp,'INTERVAL ''1 01:10'' DAY TO MINUTE') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsTimeStamp,'INTERVAL ''1 1'' DAY TO HOUR') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsTimeStamp,'INTERVAL ''1 1'' DAY TO HOUR') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsTimeStamp,'INTERVAL ''10'' DAY') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsTimeStamp,'INTERVAL ''10'' DAY') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsTimeStamp,'INTERVAL ''3:05'' HOUR TO MINUTE') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsTimeStamp,'INTERVAL ''3:05'' HOUR TO MINUTE') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsTimeStamp,'INTERVAL ''5'' HOUR') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsTimeStamp,'INTERVAL ''5'' HOUR') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsTimeStamp,'INTERVAL ''5:10'' MINUTE TO SECOND') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsTimeStamp,'INTERVAL ''5:10'' MINUTE TO SECOND') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsTimeStamp,'INTERVAL ''30'' MINUTE') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsTimeStamp,'INTERVAL ''30'' MINUTE') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsTimeStamp,'INTERVAL ''333'' HOUR(3)') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsTimeStamp,'INTERVAL ''333'' HOUR(3)') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsTimeStamp,'INTERVAL ''15.6789'' SECOND(2,3)') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsTimeStamp,'INTERVAL ''15.6789'' SECOND(2,3)') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsDate,'INTERVAL ''1-1'' YEAR(2) TO MONTH') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsDate,'INTERVAL ''1-1'' YEAR(2) TO MONTH') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsDate,'INTERVAL ''2-1'' YEAR(4) TO MONTH') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsDate,'INTERVAL ''2-1'' YEAR(4) TO MONTH') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsDate,'INTERVAL ''1'' MONTH') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsDate,'INTERVAL ''1'' MONTH') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsDate,'INTERVAL ''2'' MONTH') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsDate,'INTERVAL ''2'' MONTH') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsDate,'INTERVAL ''1 01:00:00.222'' DAY TO SECOND(3)') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsDate,'INTERVAL ''1 01:00:00.222'' DAY TO SECOND(3)') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsDate,'INTERVAL ''1 01:10'' DAY TO MINUTE') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsDate,'INTERVAL ''1 01:10'' DAY TO MINUTE') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsDate,'INTERVAL ''1 1'' DAY TO HOUR') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsDate,'INTERVAL ''1 1'' DAY TO HOUR') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsDate,'INTERVAL ''10'' DAY') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsDate,'INTERVAL ''10'' DAY') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsDate,'INTERVAL ''3:05'' HOUR TO MINUTE') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsDate,'INTERVAL ''3:05'' HOUR TO MINUTE') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsDate,'INTERVAL ''5'' HOUR') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsDate,'INTERVAL ''5'' HOUR') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsDate,'INTERVAL ''5:10'' MINUTE TO SECOND') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsDate,'INTERVAL ''5:10'' MINUTE TO SECOND') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsDate,'INTERVAL ''30'' MINUTE') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsDate,'INTERVAL ''30'' MINUTE') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsDate,'INTERVAL ''333'' HOUR(3)') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsDate,'INTERVAL ''333'' HOUR(3)') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsDate,'INTERVAL ''15.6789'' SECOND(2,3)') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsDate,'INTERVAL ''15.6789'' SECOND(2,3)') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(UnKnown,'INTERVAL ''1-1'' YEAR(2) TO MONTH') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEDIFF_UDF(UnKnown,'INTERVAL ''1-1'' YEAR(2) TO MONTH') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEADD_UDF(UnKnown,'INTERVAL ''2-1'' YEAR(4) TO MONTH') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEDIFF_UDF(UnKnown,'INTERVAL ''2-1'' YEAR(4) TO MONTH') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEADD_UDF(UnKnown,'INTERVAL ''1'' MONTH') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEDIFF_UDF(UnKnown,'INTERVAL ''1'' MONTH') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEADD_UDF(UnKnown,'INTERVAL ''2'' MONTH') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEDIFF_UDF(UnKnown,'INTERVAL ''2'' MONTH') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEADD_UDF(UnKnown,'INTERVAL ''1 01:00:00.222'' DAY TO SECOND(3)') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEDIFF_UDF(UnKnown,'INTERVAL ''1 01:00:00.222'' DAY TO SECOND(3)') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEADD_UDF(UnKnown,'INTERVAL ''1 01:10'' DAY TO MINUTE') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEDIFF_UDF(UnKnown,'INTERVAL ''1 01:10'' DAY TO MINUTE') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEADD_UDF(UnKnown,'INTERVAL ''1 1'' DAY TO HOUR') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEDIFF_UDF(UnKnown,'INTERVAL ''1 1'' DAY TO HOUR') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEADD_UDF(UnKnown,'INTERVAL ''10'' DAY') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEDIFF_UDF(UnKnown,'INTERVAL ''10'' DAY') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEADD_UDF(UnKnown,'INTERVAL ''3:05'' HOUR TO MINUTE') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEDIFF_UDF(UnKnown,'INTERVAL ''3:05'' HOUR TO MINUTE') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEADD_UDF(UnKnown,'INTERVAL ''5'' HOUR') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEDIFF_UDF(UnKnown,'INTERVAL ''5'' HOUR') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEADD_UDF(UnKnown,'INTERVAL ''5:10'' MINUTE TO SECOND') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEDIFF_UDF(UnKnown,'INTERVAL ''5:10'' MINUTE TO SECOND') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEADD_UDF(UnKnown,'INTERVAL ''30'' MINUTE') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEDIFF_UDF(UnKnown,'INTERVAL ''30'' MINUTE') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEADD_UDF(UnKnown,'INTERVAL ''333'' HOUR(3)') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEDIFF_UDF(UnKnown,'INTERVAL ''333'' HOUR(3)') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEADD_UDF(UnKnown,'INTERVAL ''15.6789'' SECOND(2,3)') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEDIFF_UDF(UnKnown,'INTERVAL ''15.6789'' SECOND(2,3)') FROM PUBLIC.UNKNOWN_TABLE;
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¶
CREATE TABLE PLS_INTEGER_TABLE(
COL NUMBER
);
Utilisation de PLS_INTEGER dans les blocs de procédure¶
Oracle¶
CREATE OR REPLACE PROCEDURE PLS_INTEGER_EXAMPLE
IS
-- PLS_INTEGER AND BINARY INTEGER ALIASES
PLS_INTEGER_VAR PLS_INTEGER;
BINARY_INTEGER_VAR BINARY_INTEGER;
NUMBER_VAR NUMBER;
BEGIN
NUMBER_VAR := 2;
-- maximum possible value
PLS_INTEGER_VAR := 2147483647;
-- implicit cast to number
INSERT INTO PLS_INTEGER_TABLE (COL) VALUES (PLS_INTEGER_VAR);
PLS_INTEGER_VAR := 2147483647;
-- operations with other numeric expressions
INSERT INTO PLS_INTEGER_TABLE (COL) VALUES (PLS_INTEGER_VAR + 1);
INSERT INTO PLS_INTEGER_TABLE (COL) VALUES (PLS_INTEGER_VAR + NUMBER_VAR);
END;
CALL PLS_INTEGER_EXAMPLE();
SELECT * FROM PLS_INTEGER_TABLE;
Résultat¶
COL |
|---|
2147483647 |
2147483648 |
2147483649 |
Snowflake¶
CREATE OR REPLACE PROCEDURE PLS_INTEGER_EXAMPLE ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
DECLARE
-- PLS_INTEGER AND BINARY INTEGER ALIASES
PLS_INTEGER_VAR NUMBER;
BINARY_INTEGER_VAR NUMBER;
NUMBER_VAR NUMBER(38, 18);
BEGIN
NUMBER_VAR := 2;
-- maximum possible value
PLS_INTEGER_VAR := 2147483647;
-- implicit cast to number
INSERT INTO PLS_INTEGER_TABLE(COL) VALUES (:PLS_INTEGER_VAR);
PLS_INTEGER_VAR := 2147483647;
-- operations with other numeric expressions
INSERT INTO PLS_INTEGER_TABLE(COL) VALUES (:PLS_INTEGER_VAR + 1);
INSERT INTO PLS_INTEGER_TABLE(COL) VALUES (:PLS_INTEGER_VAR + :NUMBER_VAR);
END;
$$;
CALL PLS_INTEGER_EXAMPLE();
SELECT * FROM
PLS_INTEGER_TABLE;
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.
CHAR [ (size [ BYTE | CHAR ]) ]
Modèles d’échantillons de sources¶
Types de données Char dans Create table¶
Oracle¶
CREATE TABLE char_data_types
(
char_column1 CHAR,
char_column2 CHAR(15),
char_column3 CHAR(15 BYTE),
char_column4 CHAR(15 CHAR)
);
INSERT INTO char_data_types VALUES ('H', 'Hello world', 'Hello world', 'Hello world');
Snowflake¶
CREATE OR REPLACE TABLE char_data_types
(
char_column1 CHAR,
char_column2 CHAR(15),
char_column3 CHAR(15),
char_column4 CHAR(15)
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
INSERT INTO char_data_types
VALUES ('H', 'Hello world', 'Hello world', 'Hello world');
Récupération des données dans des colonnes Char¶
Oracle¶
SELECT * FROM char_data_types;
Résultat¶
CHAR_COLUMN1 |
CHAR_COLUMN2 |
CHAR_COLUMN3 |
CHAR_COLUMN4 |
|---|---|---|---|
H |
Hello world |
Hello world |
Hello world |
Snowflake¶
SELECT * FROM
char_data_types;
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¶
SELECT
LENGTHB(char_column1),
LENGTHB(char_column2),
LENGTHB(char_column3),
LENGTHB(char_column4)
FROM char_data_types;
Résultat¶
LENGTHB(CHAR_COLUMN1) |
LENGTHB(CHAR_COLUMN2) |
LENGTHB(CHAR_COLUMN3) |
LENGTHB(CHAR_COLUMN4) |
|---|---|---|---|
1 |
15 |
15 |
15 |
Snowflake¶
SELECT
OCTET_LENGTH(char_column1) /*** SSC-FDM-OR0015 - LENGTHB TRANSFORMED TO OCTET_LENGTH RESULTS MAY VARY DUE TO MEMORY MANAGEMENT OF DBMS ***/,
OCTET_LENGTH(char_column2) /*** SSC-FDM-OR0015 - LENGTHB TRANSFORMED TO OCTET_LENGTH RESULTS MAY VARY DUE TO MEMORY MANAGEMENT OF DBMS ***/,
OCTET_LENGTH(char_column3) /*** SSC-FDM-OR0015 - LENGTHB TRANSFORMED TO OCTET_LENGTH RESULTS MAY VARY DUE TO MEMORY MANAGEMENT OF DBMS ***/,
OCTET_LENGTH(char_column4) /*** SSC-FDM-OR0015 - LENGTHB TRANSFORMED TO OCTET_LENGTH RESULTS MAY VARY DUE TO MEMORY MANAGEMENT OF DBMS ***/
FROM
char_data_types;
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.
NCHAR [ (size) ]
Modèles d’échantillons de sources¶
Types de données Nchar dans Create table¶
Oracle¶
CREATE TABLE nchar_data_types
(
nchar_column1 NCHAR,
nchar_column2 NCHAR(5)
);
INSERT INTO nchar_data_types VALUES ('ភ', 'ភាសាខ');
Snowflake¶
CREATE OR REPLACE TABLE nchar_data_types
(
nchar_column1 NCHAR,
nchar_column2 NCHAR(5)
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
INSERT INTO nchar_data_types
VALUES ('ភ', 'ភាសាខ');
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¶
SELECT * FROM nchar_data_types;
Résultat¶
NCHAR_COLUMN1 |
NCHAR_COLUMN2 |
|---|---|
ភ |
ភាសាខ |
Snowflake¶
SELECT * FROM
nchar_data_types;
Résultat¶
NCHAR_COLUMN1 |
NCHAR_COLUMN2 |
|---|---|
ភ |
ភាសាខ |
Récupération de la taille en octets de chaque colonne¶
Oracle¶
SELECT
LENGTHB(nchar_column1),
LENGTHB(nchar_column2)
FROM nchar_data_types;
Résultat¶
LENGTHB(NCHAR_COLUMN1) |
LENGTHB(NCHAR_COLUMN2) |
|---|
2| 10|
Snowflake¶
SELECT
OCTET_LENGTH(nchar_column1) /*** SSC-FDM-OR0015 - LENGTHB TRANSFORMED TO OCTET_LENGTH RESULTS MAY VARY DUE TO MEMORY MANAGEMENT OF DBMS ***/,
OCTET_LENGTH(nchar_column2) /*** SSC-FDM-OR0015 - LENGTHB TRANSFORMED TO OCTET_LENGTH RESULTS MAY VARY DUE TO MEMORY MANAGEMENT OF DBMS ***/
FROM
nchar_data_types;
Résultat¶
OCTET_LENGTH(NCHAR_COLUMN1) |
OCTET_LENGTH(NCHAR_COLUMN2) |
|---|
3| 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, 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 (size)
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.
NVARCHAR2 (size)
Modèles d’échantillons de sources¶
Type de données Nvarchar2 dans Create table¶
Oracle¶
CREATE TABLE nvarchar2_data_types
(
nvarchar2_column NVARCHAR2 (5)
);
INSERT INTO nvarchar2_data_types VALUES ('ភាសាខ');
Snowflake¶
CREATE OR REPLACE TABLE nvarchar2_data_types
(
nvarchar2_column VARCHAR(5)
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
INSERT INTO nvarchar2_data_types
VALUES ('ភាសាខ');
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¶
SELECT * FROM nvarchar2_data_types;
Résultat¶
NVARCHAR2_COLUMN |
|---|
ភាសាខ |
Snowflake¶
SELECT * FROM
nvarchar2_data_types;
Résultat¶
NVARCHAR2_COLUMN |
|---|
ភាសាខ |
Récupération de la taille en octets de chaque colonne¶
Oracle¶
SELECT
LENGTHB(nvarchar2_column)
FROM nvarchar2_data_types;
Résultat¶
LENGTHB(NVARCHAR2_COLUMN) |
|---|
10 |
Snowflake¶
SELECT
OCTET_LENGTH(nvarchar2_column) /*** SSC-FDM-OR0015 - LENGTHB TRANSFORMED TO OCTET_LENGTH RESULTS MAY VARY DUE TO MEMORY MANAGEMENT OF DBMS ***/
FROM
nvarchar2_data_types;
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.
VARCHAR2 (size [ BYTE | CHAR ])
Modèles d’échantillons de sources¶
Types de données Varchar2 dans Create table¶
Oracle¶
CREATE TABLE varchar2_data_types
(
varchar2_column1 VARCHAR2(5),
varchar2_column2 VARCHAR2(5 BYTE),
varchar2_column3 VARCHAR2(5 CHAR)
);
INSERT INTO varchar2_data_types VALUES ('H', 'Hello', 'Hell');
Snowflake¶
CREATE OR REPLACE TABLE varchar2_data_types
(
varchar2_column1 VARCHAR(5),
varchar2_column2 VARCHAR(5),
varchar2_column3 VARCHAR(5)
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
INSERT INTO varchar2_data_types
VALUES ('H', 'Hello', 'Hell');
Récupération des données dans des colonnes varchar¶
Oracle¶
SELECT * FROM varchar2_data_types;
Résultat¶
VARCHAR2_COLUMN1 |
VARCHAR2_COLUMN2 |
VARCHAR2_COLUMN3 |
|---|---|---|
H |
Bonjour |
Hell |
Snowflake¶
SELECT * FROM
varchar2_data_types;
Résultat¶
VARCHAR2_COLUMN1 |
VARCHAR2_COLUMN2 |
VARCHAR2_COLUMN3 |
|---|---|---|
H |
Bonjour |
Hell |
Révision de la taille des variables dans les colonnes¶
Oracle¶
SELECT
LENGTHB(varchar2_column1),
LENGTHB(varchar2_column2),
LENGTHB(varchar2_column3)
FROM VARCHAR2_DATA_TYPES;
Résultat¶
LENGTHB(VARCHAR2_COLUMN1) |
LENGTHB(VARCHAR2_COLUMN2) |
LENGTHB(VARCHAR2_COLUMN3) |
|---|---|---|
1 |
5 |
4 |
Snowflake¶
SELECT
OCTET_LENGTH(varchar2_column1) /*** SSC-FDM-OR0015 - LENGTHB TRANSFORMED TO OCTET_LENGTH RESULTS MAY VARY DUE TO MEMORY MANAGEMENT OF DBMS ***/,
OCTET_LENGTH(varchar2_column2) /*** SSC-FDM-OR0015 - LENGTHB TRANSFORMED TO OCTET_LENGTH RESULTS MAY VARY DUE TO MEMORY MANAGEMENT OF DBMS ***/,
OCTET_LENGTH(varchar2_column3) /*** SSC-FDM-OR0015 - LENGTHB TRANSFORMED TO OCTET_LENGTH RESULTS MAY VARY DUE TO MEMORY MANAGEMENT OF DBMS ***/
FROM
VARCHAR2_DATA_TYPES;
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).
BFILE
BLOB
CLOB
NCLOB
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
Les colonnes Oracle BFILE sont utilisées pour stocker un emplacement avec le répertoire et le nom du fichier. Ils sont transformés en VARCHAR Snowflake afin de stocker le répertoire et le nom du fichier dans la colonne. Toutefois, le chargement du contenu du fichier doit être effectué manuellement.
Oracle¶
--Create Table
CREATE TABLE bfile_table
(
col1 BFILE
);
--Insert Bfilename
INSERT INTO bfile_table VALUES (
BFILENAME('mydirectory', 'myfile.png')
);
--Select
SELECT * FROM bfile_table;
Résultat¶
COL1 |
|---|
[BFILE:monfichier.png] |
Snowflake¶
--Create Table
CREATE OR REPLACE TABLE bfile_table
(
col1
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0105 - ADDITIONAL WORK IS NEEDED FOR BFILE COLUMN USAGE. BUILD_STAGE_FILE_URL FUNCTION IS A RECOMMENDED WORKAROUND ***/!!!
VARCHAR
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
--Insert Bfilename
INSERT INTO bfile_table
VALUES (PUBLIC.BFILENAME_UDF('mydirectory', 'myfile.png')
);
--Select
SELECT * FROM
bfile_table;
Résultat¶
COL1 |
|---|
monrépertoire\monfichier.png |
Avertissement
UDF ajoutée pour remplacer BFILENAME().
UDF ajoutée
CREATE OR REPLACE FUNCTION PUBLIC.BFILENAME_UDF (DIRECTORYNAME STRING, FILENAME STRING)
RETURNS STRING
LANGUAGE SQL
IMMUTABLE
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"udf"}}'
AS
$$
DIRECTORYNAME || '\\' || FILENAME
$$;
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¶
CREATE TABLE blobtable( blob_column BLOB, empty_column BLOB );
INSERT INTO blobtable VALUES (NULL, EMPTY_BLOB());
Snowflake¶
CREATE OR REPLACE TABLE blobtable ( blob_column BINARY,
empty_column BINARY
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
INSERT INTO blobtable
VALUES (NULL, TO_BINARY(' '));
Récupération des données¶
Oracle¶
SELECT * FROM blobtable;
Résultat¶
BLOB_COLUMN |
EMPTY_COLUMN |
|---|---|
[NULL] |
[BLOB] |
Snowflake¶
SELECT * FROM
blobtable;
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¶
INSERT INTO blobtable VALUES(
utl_raw.cast_to_raw('hello world'), EMPTY_BLOB());
SELECT DBMS_LOB.SUBSTR(blob_column) AS result
FROM blobtable;
Résultat¶
RESULT |
|---|
[NULL] |
Hello world |
Snowflake¶
INSERT INTO blobtable
VALUES(
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0076 - TRANSLATION FOR BUILT-IN PACKAGE 'utl_raw.cast_to_raw' IS NOT CURRENTLY SUPPORTED. ***/!!!
'' AS cast_to_raw, TO_BINARY(' '));
SELECT
SUBSTR(blob_column, 1) AS result
FROM
blobtable;
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¶
CREATE TABLE clobtable ( clob_column CLOB, empty_column CLOB );
INSERT INTO clobtable VALUES ( 'THIS IS A TEST', EMPTY_CLOB() );
Snowflake¶
CREATE OR REPLACE TABLE clobtable ( clob_column VARCHAR,
empty_column VARCHAR
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
INSERT INTO clobtable
VALUES ( 'THIS IS A TEST', TO_VARCHAR(' - '));
Récupération des données¶
Oracle¶
SELECT * FROM clobtable;
Résultat¶
CLOB_COLUMN |
EMPTY_COLUMN |
|---|---|
THIS IS A TEST |
Snowflake¶
SELECT * FROM
clobtable;
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¶
CREATE TABLE nclobtable ( nclob_column NCLOB, empty_column NCLOB );
INSERT INTO nclobtable VALUES ( 'THIS IS A TEST', EMPTY_CLOB() );
Snowflake¶
CREATE OR REPLACE TABLE nclobtable ( nclob_column VARCHAR,
empty_column VARCHAR
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
INSERT INTO nclobtable
VALUES ( 'THIS IS A TEST', TO_VARCHAR(' - '));
Récupération des données¶
Oracle¶
SELECT * FROM nclobtable;
Résultat¶
NCLOB_COLUMN |
EMPTY_COLUMN |
|---|---|
THIS IS A TEST |
Snowflake¶
SELECT * FROM
nclobtable;
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.