SnowConvert : questions relatives à Oracle

SSC-EWI-OR0001

Description

Cette erreur se produit lorsque la valeur de l’instruction START WITH est définie sur LIMIT VALUE.

Dans Oracle, cette clause n’est utilisée qu’avec l’instruction ALTER TABLE.

L’option START WITH LIMIT VALUE, qui n’est disponible que pour identity_options, ne peut être utilisée qu’avec la commande ALTER TABLE MODIFY. Lorsque vous utilisez START WITH LIMIT VALUE, la base de données d’Oracle va :

  1. Verrouiller la table

  2. Trouver :

    • La valeur maximale de la colonne d’identité (pour les séquences croissantes)

    • La valeur minimale de la colonne d’identité (pour les séquences décroissantes)

  3. Cet ensemble de valeurs constitue le filigrane haut du générateur de séquence

  4. Calculez la valeur de la séquence suivante par :

    • Pour les séquences croissantes : filigrane haut + INCREMENT BY entier

    • Pour les séquences décroissantes : filigrane haut - INCREMENT BY entier

ALTER TABLE ORACLE

Exemple de code

Code d’entrée :

CREATE SEQUENCE SEQUENCE1
  START WITH LIMIT VALUE;
Copy

Code de sortie :

CREATE OR REPLACE SEQUENCE SEQUENCE1
  !!!RESOLVE EWI!!! /*** SSC-EWI-OR0001 - SEQUENCE START VALUE WITH 'LIMIT VALUE' IS NOT SUPPORTED BY SNOWFLAKE. ***/!!!
  START WITH LIMIT VALUE
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}';
Copy

Recommandations

  • Aucune action n’est requise de votre part.

  • Pour une assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com

SSC-EWI-OR0050

Gravité

Medium

Description

Cette erreur se produit lorsque l’on tente d’extraire une valeur qui dépasse la plage autorisée. Cela signifie que la valeur de précision n’est pas prise en charge par Snowflake, ce qui entraîne le commentaire du code et l’ajout de ce message.

Exemple de code :

Code d’entrée :

SELECT CAST('123,456E+40' AS NUMBER, '999,999EEE') FROM DUAL;
SELECT CAST('12.34567891234567891234567891234567891267+' AS NUMBER, '99.999999999999999999999999999999999999S') FROM DUAL;
SELECT CAST('12.34567891234567891234567891234567891267' AS NUMBER, '99.999999999999999999999999999999999999') FROM DUAL;
select cast(' 1.0E+123' as number, '9.9EEEE') from dual;
Copy

Code de sortie :

SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0050 - INPUT EXPRESSION IS OUT OF THE RANGE '123,456E+40' ***/!!!
 CAST('123,456E+40' AS NUMBER(38, 18) , '999,999EEE') FROM DUAL;

SELECT
 !!!RESOLVE EWI!!! /*** SSC-EWI-OR0050 - INPUT EXPRESSION IS OUT OF THE RANGE '12.34567891234567891234567891234567891267+' ***/!!! CAST('12.34567891234567891234567891234567891267+' AS NUMBER(38, 18) , '99.999999999999999999999999999999999999S') FROM DUAL;

SELECT
 !!!RESOLVE EWI!!! /*** SSC-EWI-OR0050 - INPUT EXPRESSION IS OUT OF THE RANGE '12.34567891234567891234567891234567891267' ***/!!! CAST('12.34567891234567891234567891234567891267' AS NUMBER(38, 18) , '99.999999999999999999999999999999999999') FROM DUAL;

select
 !!!RESOLVE EWI!!! /*** SSC-EWI-OR0050 - INPUT EXPRESSION IS OUT OF THE RANGE ' 1.0E+123' ***/!!! cast(' 1.0E+123' as NUMBER(38, 18) , '9.9EEEE') from dual;
Copy

Recommandations

  • Aucune action n’est requise de votre part.

  • Pour une assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com

SSC-EWI-OR0110

Certaines parties du code ont été supprimées pour en faciliter la compréhension.

Sévérité

Élevé

Description

Il n’existe pas d’équivalent direct de la clause FOR UPDATE dans le langage Snowflake. L’outil ajoutera un message d’erreur, d’avertissement ou d’information (EWI) et commentera cette clause pendant la conversion.

Exemple de code

Code d’entrée :

CREATE OR REPLACE PROCEDURE for_update_clause
AS
    update_record f_employee%rowtype;
    CURSOR c1 IS SELECT * FROM f_employee FOR UPDATE OF employee_number nowait;
BEGIN
    FOR CREC IN C1 LOOP
	UPDATE f_employee SET employee_number = employee_number + 1000 WHERE CURRENT OF c1;
	IF crec.id = 2 THEN
	    DELETE FROM f_employee WHERE CURRENT OF c1;
	    EXIT;
	END IF;
    END LOOP;
END;
Copy

Code de sortie :

CREATE OR REPLACE PROCEDURE for_update_clause ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
	DECLARE
		update_record OBJECT !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - ROWTYPE DATA TYPE CONVERTED TO OBJECT ***/!!! := OBJECT_CONSTRUCT();
		c1 CURSOR
		FOR
			SELECT * FROM
				f_employee
			!!!RESOLVE EWI!!! /*** SSC-EWI-OR0110 - FOR UPDATE CLAUSE IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
			FOR UPDATE OF employee_number nowait;
	BEGIN
		OPEN C1;
		--** SSC-PRF-0004 - THIS STATEMENT HAS USAGES OF CURSOR FOR LOOP **
		FOR CREC IN C1 DO
			!!!RESOLVE EWI!!! /*** SSC-EWI-OR0136 - CURRENT OF CLAUSE IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
			UPDATE f_employee
				SET employee_number =
 				                     !!!RESOLVE EWI!!! /*** SSC-EWI-OR0036 - TYPES RESOLUTION ISSUES, ARITHMETIC OPERATION '+' MAY NOT BEHAVE CORRECTLY BETWEEN unknown AND Number ***/!!! employee_number + 1000 WHERE CURRENT OF c1;
			IF (crec.id = 2) THEN
--				!!!RESOLVE EWI!!! /*** SSC-EWI-0058 - FUNCTIONALITY FOR 'CURRENT OF' IS NOT CURRENTLY SUPPORTED BY SNOWFLAKE SCRIPTING ***/!!!
--				DELETE FROM
--					f_employee
--				WHERE CURRENT OF c1
				                   ;
				EXIT;
			END IF;
		END FOR;
		CLOSE C1;
	END;
$$;
Copy

Recommandations

  • Traitez les mises à jour de colonnes dans les requêtes UPDATE/DELETE. Pour de plus amples informations, veuillez vous référer au code d’erreur SSC-EWI-0075.

  • Pour une assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com

SSC-EWI-OR0035

Certaines parties du code de sortie ont été supprimées pour en faciliter la compréhension.

Gravité

Medium

Description

La fonction TABLE ne peut pas être utilisée dans Snowflake lors de la création d’une collection d’expressions. Cette fonctionnalité n’est pas prise en charge actuellement.

Exemple de code

Code d’entrée :

SELECT
TABLE2.COLUMN_VALUES
FROM TABLE1 i, TABLE(i.groups) TABLE2;
Copy

Code de sortie :

// SnowConvert Helpers Code section is omitted.
SELECT
TABLE2.COLUMN_VALUES
FROM
TABLE1 i,
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0035 - TABLE FUNCTION IS NOT SUPPORTED WHEN IT IS USED AS A COLLECTION OF EXPRESSIONS ***/!!! TABLE(i.groups) TABLE2;
Copy

Recommandations

  • Aucune action n’est requise de votre part.

  • Pour une assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com

SSC-EWI-OR0097

Gravité

Faible

Description

Les propriétés supplémentaires d’Oracle dans les instructions CREATE PROCEDURE ne sont pas prises par la syntaxe CREATE PROCEDURE de Snowflake et peuvent être omises en toute sécurité lors de la migration.

Exemple de code

Code d’entrée Oracle :

CREATE OR REPLACE PROCEDURE PROC01
DEFAULT COLLATION USING_NLS_COMP
AUTHID CURRENT_USER
ACCESSIBLE BY (PROCEDURE PROC03)
AS
BEGIN
    NULL;
END;
Copy

Code de sortie :

CREATE OR REPLACE PROCEDURE PROC01 ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0097 - PROCEDURE PROPERTIES ARE NOT SUPPORTED IN SNOWFLAKE PROCEDURES ***/!!!
AS
$$
    BEGIN
        NULL;
    END;
$$;
Copy

Recommandations

  • Aucune action n’est requise de la part des utilisateurs.

  • Pour une assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com

SSC-EWI-OR0087

Gravité

Faible

Certaines parties du code ont été omises pour que l’exemple reste clair et concis.

Description

Cette erreur se produit en cas de problème de conversion de la syntaxe de jointure externe d’Oracle utilisant l’opérateur (+) dans les clauses ANSI JOIN. Plus précisément, cela se produit lorsque la requête originale contient des références de tables circulaires dans la clause WHERE, où les tables sont jointes selon un modèle cyclique.

Lorsque cet EWI s’affiche, les opérations JOIN risquent d’échouer parce qu’elles ne se déroulent pas dans la bonne séquence.

Exemple de code

Code d’entrée Oracle :

SELECT
l.location_id, l.state_province,
r.region_id, r.region_name,
c.country_id, c.country_name
FROM
hr.countries c,  hr.regions r,  hr.locations l, hr.departments d WHERE
l.location_id (+) = c.region_id AND
c.region_id (+) = r.region_id AND
r.region_id (+) = c.region_id AND
l.location_id (+) = d.location_id;
Copy

Code de sortie :

SELECT
l.location_id, l.state_province,
r.region_id, r.region_name,
c.country_id, c.country_name
FROM
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0087 - ORDERING THE OUTER JOINS FAILED. QUERY MAY NOT BEHAVE CORRECTLY ***/!!!
hr.departments d
LEFT OUTER JOIN
hr.locations l
ON
l.location_id = c.region_id
AND
l.location_id = d.location_id
LEFT OUTER JOIN
hr.countries c
ON
c.region_id = r.region_id
LEFT OUTER JOIN
hr.regions r
ON
r.region_id = c.region_id;
Copy
  • Vérifiez que votre requête est syntaxiquement correcte et que vous ne joignez pas inutilement des tables entre elles.

  • Si le problème persiste, spécifiez le nom de la table pour chaque colonne dans la clause WHERE (par exemple, utilisez table1.column_name au lieu de column_name).

  • Pour toute assitance supplémentaire, contactez notre équipe de support à l’adresse suivante : snowconvert-support@snowflake.com

SSC-EWI-OR0100

Gravité

Faible

Description

Le site FOR LOOP d’Oracle peut comporter plusieurs conditions, mais FOR LOOP de Snowflake Scripting ne prend en charge qu’une seule condition. Lors de la conversion d’Oracle vers Snowflake, seule la première condition sera migrée, et toute condition supplémentaire sera ignorée.

Exemple de code

Code d’entrée :

CREATE OR REPLACE PROCEDURE P3
AS
BEGIN
FOR i IN REVERSE 1..3,
REVERSE i+5..i+7
LOOP
    NULL;
END LOOP;
END;
Copy

Code de sortie :

CREATE OR REPLACE PROCEDURE P3 ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
    BEGIN
        !!!RESOLVE EWI!!! /*** SSC-EWI-OR0100 - FOR LOOP WITH MULTIPLE CONDITIONS IS CURRENTLY NOT SUPPORTED BY SNOWFLAKE SCRIPTING ***/!!!
        FOR i IN REVERSE 1 TO 3 LOOP
            NULL;
        END LOOP;
    END;
$$;
Copy

Recommandations

  • Décomposez les instructions FOR LOOP complexes en plusieurs boucles plus simples ou réécrivez la condition de la boucle pour la rendre plus claire.

  • Pour toute assistance supplémentaire, veuillez contacter notre équipe de support à l’adresse suivante : snowconvert-support@snowflake.com

SSC-EWI-OR0011

Gravité

Medium

Description

La fonction Cast de Snowflake ne prend pas en charge le paramètre de format lors de l’utilisation de « MONTH » ou « DAY » dans les formats DATE ou TIMESTAMP.

"MONTH/DD/YYYY" or "MM/DAY/YY" ...
Copy

Lorsque vous utilisez la fonction CAST avec le type de données NUMBER dans Snowflake, vous devez spécifier quatre arguments pour afficher correctement les valeurs décimales. Actuellement, le code de sortie ne fournit pas tous les arguments requis pour la fonction TO_NUMBER. Vous devrez ajouter manuellement les arguments manquants pour assurer un formatage décimal correct.

Exemple de code

Code d’entrée :

SELECT CAST('12.48' AS NUMBER, '99.99') FROM DUAL;
Copy

Code de sortie :

SELECT
TO_NUMBER('12.48', '99.99', 38, 2)
FROM DUAL;
Copy

Code d’entrée :

SELECT CAST('FEBRUARY/18/24' as DATE, 'MONTH/DD/YY') FROM DUAL;
SELECT CAST('FEB/MON/24' as DATE, 'MON/DAY/YY') FROM DUAL;
Copy

Code de sortie :

SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0011 - THE FORMAT PARAMETER 'MONTH/DD/YY' IS NOT SUPPORTED ***/!!!
TO_TIMESTAMP ('FEBRUARY/18/24' , 'MONTH/DD/YY')
FROM DUAL;

SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0011 - THE FORMAT PARAMETER 'MON/DAY/YY' IS NOT SUPPORTED ***/!!!
TO_TIMESTAMP ('FEB/MON/24' , 'MON/DAY/YY')
FROM DUAL;
Copy

Recommandations

  • Aucune action n’est requise de votre part.

  • Pour une assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com

SSC-EWI-OR0031

Gravité

Faible

Description

Cette erreur se produit lorsque vous utilisez un paramètre non pris en charge dans la fonction SYS_CONTEXT. Snowflake propose des fonctions contextuelles similaires que vous pouvez utiliser à la place. Pour plus d’informations sur les fonctions contextuelles prises en charge, consultez la documentation de Snowflake.

Exemple de code

Code d’entrée :

SELECT SYS_CONTEXT ('USERENV', 'NLS_SORT') FROM DUAL;
Copy

Code de sortie :

SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0031 - 'NLS_SORT' SYS_CONTEXT PARAMETER NOT SUPPORTED IN SNOWFLAKE ***/!!!
 SYS_CONTEXT ('USERENV', 'NLS_SORT') FROM DUAL;
Copy

Recommandations

  • La fonction est convertie en modèle de fonction définie par l’utilisateur (UDF) que vous pouvez personnaliser pour répliquer le comportement du paramètre SYS_CONTEXT.

  • Pour toute assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com

SSC-EWI-OR0005

Cet EWI n’est plus utilisé. Veuillez consulter SSC-FDM-OR0043 pour la documentation actuelle.

Gravité

Faible

Description

Cette erreur se produit lors de la conversion d’une fonction TO_CLOB en TO_VARCHAR. Lorsque vous travaillez avec les paramètres BFILE ou BLOB, il se peut que vous deviez spécifier un paramètre de format pour une conversion correcte.

Exemple de code

Code d’entrée :

SELECT TO_CLOB('Lorem ipsum dolor sit amet') FROM DUAL;
Copy

Code de sortie :

SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0005 - BFILE/BLOB PARAMETERS ARE CONSIDERED BINARY, FORMAT MAY BE NEEDED ***/!!!
TO_VARCHAR('Lorem ipsum dolor sit amet')
FROM DUAL;
Copy

Recommandations

  • Vérifiez que les résultats de la sortie correspondent entre le code source et le code converti. Ajoutez un paramètre de format si nécessaire.

  • Pour toute assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com

SSC-EWI-OR0104

Gravité

Élevé

Description

Les collections Oracle ne sont actuellement pas prises en charge par SnowConvert. Toutes les variables utilisant des types de collection et leurs opérations associées seront commentées dans le code converti.

Générez des procédures et des macros dans JavaScript en ajoutant l’indicateur -t JavaScript ou --PLTargetLanguage JavaScript à votre commande.

Exemple de code

Code d’entrée Oracle :

-- Additional Params: -t JavaScript
CREATE OR REPLACE PROCEDURE collection_variable_sample_proc
IS
    TYPE POPULATION IS TABLE OF NUMBER INDEX BY VARCHAR2(64); --Associative array
    city_population POPULATION := POPULATION();
    i  VARCHAR2(64);
BEGIN
	city_population('Smallville')  := 2000;
    city_population('Midland')     := 750000;

    i := city_population.FIRST;
    i := city_population.NEXT(1);
END;
Copy

Sortie Cod

CREATE OR REPLACE PROCEDURE collection_variable_sample_proc ()
RETURNS STRING
LANGUAGE JAVASCRIPT
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "oracle",  "convertedOn": "12/16/2024",  "domain": "test" }}'
EXECUTE AS CALLER
AS
$$
	// SnowConvert Helpers Code section is omitted.

	!!!RESOLVE EWI!!! /*** SSC-EWI-OR0072 - PROCEDURAL MEMBER TYPE DEFINITION NOT SUPPORTED. ***/!!!
	/*     TYPE POPULATION IS TABLE OF NUMBER INDEX BY VARCHAR2(64) */
	;
	!!!RESOLVE EWI!!! /*** SSC-EWI-OR0104 - UNUSABLE VARIABLE, ITS TYPE WAS NOT TRANSFORMED ***/!!!
	/*     city_population POPULATION := POPULATION() */
	;
	let I;
	!!!RESOLVE EWI!!! /*** SSC-EWI-OR0104 - UNUSABLE VARIABLE, ITS TYPE WAS NOT TRANSFORMED ***/!!!
	/* 	city_population('Smallville')  := 2000 */
	;
	!!!RESOLVE EWI!!! /*** SSC-EWI-OR0104 - UNUSABLE VARIABLE, ITS TYPE WAS NOT TRANSFORMED ***/!!!
	/*     city_population('Midland')     := 750000 */
	;
	I =
		!!!RESOLVE EWI!!! /*** SSC-EWI-OR0104 - UNUSABLE VARIABLE, ITS TYPE WAS NOT TRANSFORMED ***/!!!
		/*city_population.FIRST*/
		null;
	I =
		!!!RESOLVE EWI!!! /*** SSC-EWI-OR0104 - UNUSABLE VARIABLE, ITS TYPE WAS NOT TRANSFORMED ***/!!!
		/*city_population.NEXT(1)*/
		null;
$$;
Copy

Recommandations

  • Aucune action n’est requise de la part des utilisateurs.

  • Pour une assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com

SSC-EWI-OR0070

Gravité

Medium

Certaines parties du code ont été supprimées pour rendre l’exemple plus clair et plus facile à comprendre.

Description

Une opération binaire ne peut pas être convertie directement. Pour résoudre ce problème, nous avons ajouté une fonction définie par l’utilisateur.

Exemple de code

Oracle :

-- Unsupported operation: EXCEPT DISTINCT
SELECT someValue MULTISET EXCEPT DISTINCT multiset_except FROM customers_demo;
Copy

Snowflake Scripting:

-- Unsupported operation: EXCEPT DISTINCT
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0070 - BINARY OPERATION MULTISET EXCEPT IS NOT SUPPORTED ***/!!!
 someValue MULTISET EXCEPT DISTINCT multiset_except FROM
 customers_demo;
Copy

Recommandations

  • Aucune action n’est requise de la part des utilisateurs finaux.

  • Pour une assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com

SSC-EWI-OR0030

Gravité

Medium

Description

L’erreur indique que la clause KEEP FIRST ou KEEP LAST, qui est utilisée pour sélectionner uniquement les premières ou les dernières valeurs lors de l’utilisation de fonctions d’agrégation, n’est pas prise en charge actuellement.

Exemple de code

Code d’entrée :

SELECT
    department_id,
    MIN(salary) KEEP (
        DENSE_RANK FIRST
        ORDER BY
            commission_pct
    ) "Worst"
FROM
    employees;
Copy

Code de sortie :

SELECT
    department_id,
    MIN(salary)
        !!!RESOLVE EWI!!! /*** SSC-EWI-OR0030 - KEEP STATEMENT USED IN THE AGGREGATE FUNCTION IS NOT SUPPORTED ***/!!!
 KEEP (
        DENSE_RANK FIRST
        ORDER BY
            commission_pct
    ) "Worst"
FROM
 employees;
Copy

Recommandations

  • Aucune action n’est requise de votre part.

  • Pour une assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com

SSC-EWI-OR0121

Gravité

Medium

Description

Lors de la migration des colonnes Oracle BFILE vers Snowflake, elles sont converties en colonnes VARCHAR qui stockent le nom du fichier sous forme de chaîne. Cela signifie que l’utilisation de la fonction SUBSTR dans Snowflake sur ces colonnes migrées opérera sur le nom du fichier lui-même, et non sur son contenu. Cette fonction diffère de la fonction Oracle DBMS_LOB.SUBSTR, qui opère sur le contenu réel du fichier. Pour plus de détails, voir BFILE data type.

Exemple de code

Code d’entrée :

CREATE TABLE table1
(
    bfile_column BFILE
)
SELECT
DBMS_LOB.SUBSTR(bfile_column, 15, 1)
FROM table1;
Copy

Code de sortie :

CREATE OR REPLACE TABLE table1
    (
        bfile_column
    !!!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"}}'
    ;
    SELECT
    !!!RESOLVE EWI!!! /*** SSC-EWI-OR0121 - USING DBMS_LOB.SUBSTR ON BFILE SOURCE COLUMN IS NOT SUPPORTED ON SNOWFLAKE ***/!!!
    SUBSTR(bfile_column, 1, 15)
    FROM
    table1;
Copy

Recommandations

  • Apprenez à gérer les fichiers dans Snowflake en consultant la documentation ici.

  • Pour toute assistance supplémentaire, veuillez contacter notre équipe de support à l’adresse suivante : snowconvert-support@snowflake.com

SSC-EWI-OR0092

Gravité

Faible

Description

Ce message apparaît lorsque l’on tente d’utiliser une échelle négative avec un type de données NUMBER à des fins d’arrondi. Snowflake ne prenant pas en charge les échelles négatives, le paramètre d’échelle a été supprimé de la conversion.

Exemple de code

Code d’entrée Oracle :

CREATE TABLE number_table
(
	col1 NUMBER(38),
	col2 NUMBER(38, -1),
	col3 NUMBER(*, -2)
);

INSERT INTO number_table(col1, col2, col3) VALUES (555, 555, 555);

SELECT * FROM number_table;
Copy
COL1|COL2|COL3|
-+-+-+
 555| 560| 600|
Copy

Code de sortie :

CREATE OR REPLACE TABLE number_table
	(
		col1 NUMBER(38) /*** SSC-FDM-0006 - NUMBER TYPE COLUMN MAY NOT BEHAVE SIMILARLY IN SNOWFLAKE. ***/,
		col2 NUMBER(38) !!!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. ***/,
		col3 NUMBER(38) !!!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. ***/
	)
	COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
	;

	INSERT INTO number_table(col1, col2, col3) VALUES (555, 555, 555);

	SELECT * FROM
	number_table;
Copy
|COL1|COL2|COL3|
|-|-|-|
|555 |555 |555 |
Copy

Recommandations

  • Aucune action n’est requise de la part des utilisateurs.

  • Pour une assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com

SSC-EWI-OR0004

Certaines parties du code ont été supprimées pour rendre l’exemple plus clair et plus facile à comprendre.

Description

Cet avertissement apparaît lorsqu’une instruction SELECT contient une clause que Snowflake ne prend pas en charge. Les clauses suivantes ne sont pas supportées par Snowflake :

  • Objets conteneurs qui stockent des données

  • Structures de données hiérarchiques pour l’organisation de l’information

  • Modifications externes des sources de données

  • Partitions ou segments de données

Exemple de code

Code d’entrée :

SELECT * FROM TABLE1 EXTERNAL MODIFY (LOCATION 'file.csv' REJECT LIMIT UNLIMITED);
Copy

Code de sortie :

SELECT * FROM
TABLE1
       !!!RESOLVE EWI!!! /*** SSC-EWI-OR0004 - THE 'OPTIONAL MODIFIED EXTERNAL' SYNTAX IN SELECT IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
       EXTERNAL MODIFY (LOCATION 'file.csv' REJECT LIMIT UNLIMITED);
Copy

Recommandations

  • Aucune action n’est requise de votre part.

  • Pour une assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com

SSC-EWI-OR0014

Certaines parties du code de sortie ont été supprimées pour rendre l’exemple plus clair et plus facile à suivre.

Gravité

Medium

Description

La fonction NLSSORT ne peut pas être utilisée dans l’instruction SELECT pour le moment.

Exemple de code

Code d’entrée :

SELECT NLSSORT(name, 'NLS_SORT = ENGLISH') FROM products;
Copy

Code de sortie :

// SnowConvert Helpers Code section is omitted.
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0014 - FUNCTION NLSSORT IS NOT SUPPORTED ***/!!!
 NLSSORT(name, 'NLS_SORT = ENGLISH') FROM
 products;
Copy

Recommandations

  • NLSSORT est transformée en une fonction définie par l’utilisateur (UDF/Stub), que vous pouvez personnaliser pour répliquer son comportement.

  • Pour toute assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com

SSC-EWI-OR0105

Gravité

Faible

Description

Le type de données BFILE est converti en VARCHAR lors de la migration. Cette conversion permet le stockage du chemin et du nom du fichier. Notez que les fonctions intégrées d’Oracle pour la gestion des types BFILE ne sont pas prises en charge actuellement. Pour plus de détails sur la gestion des chemins et des noms de fichiers, veuillez vous référer à la documentation de BFILENAME_UDF.

La fonction BUILD_STAGE_FILE_URL offre un moyen sûr d’accéder aux fichiers stockés dans les zones de préparation Snowflake. Lorsqu’elle est appelée, elle génère une URL qui pointe vers un fichier spécifique dans une zone de préparation interne. Pour plus de détails, reportez-vous à la documentation de la fonction ici.

Exemple de code

Code d’entrée Oracle :

CREATE TABLE bfiletable ( bfile_column BFILE );

INSERT INTO bfiletable VALUES ( BFILENAME('mydirectory', 'myfile.png') );
Copy

Code de sortie :

CREATE OR REPLACE TABLE bfiletable ( bfile_column
!!!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 INTO bfiletable
VALUES (PUBLIC.BFILENAME_UDF('mydirectory', 'myfile.png') );
Copy

Recommandations

  • Utilisez la fonction BUILD_STAGE_FILE_URL et d’autres fonctions de fichier pour gérer et manipuler des fichiers dans Snowflake.

CREATE OR REPLACE TABLE bfiletable ( bfile_column
!!!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 INTO bfiletable
VALUES (PUBLIC.BFILENAME_UDF('mydirectory', 'myfile.png') );
Copy
URL                                                                                                   |
+
https://thecompany.snowflakecomputing.com/api/files/CODETEST/PUBLIC/MY_STAGE/%2Fmydirectory%2Fmyfile.jpg|
Copy

Cette fonction est compatible avec divers fournisseurs de stockage Cloud. Pour des informations sur l’utilisation de fichiers de votre système local avec des zones de préparation, veuillez vous référer à cette documentation.

  • Convertissez le type de données en un type compatible avec le système cible.

  • Pour toute assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com

SSC-EWI-OR0045

Gravité

Medium

Description

Ce message apparaît lors d’une tentative d’utilisation de FML ou d’un casting au format L, qui n’est pas disponible dans Snowflake. Dans de tels cas, le code est commenté et ce message d’avertissement s’affiche.

Exemple de code :

Code d’entrée :

SELECT CAST(' $123.45' as number, 'L999.99') FROM DUAL;
SELECT CAST('$123.45' as number, 'FML999.99') FROM DUAL;
Copy

Code de sortie :

SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0045 - CAST TYPE L AND FML NOT SUPPORTED ***/!!!
 CAST(' $123.45' as NUMBER(38, 18) , 'L999.99') FROM DUAL;

SELECT
 !!!RESOLVE EWI!!! /*** SSC-EWI-OR0045 - CAST TYPE L AND FML NOT SUPPORTED ***/!!! CAST('$123.45' as NUMBER(38, 18) , 'FML999.99') FROM DUAL;
Copy

Recommandations

  • Aucune action n’est requise de votre part.

  • Pour une assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com

SSC-EWI-OR0082

Certaines parties du code de sortie ont été supprimées pour rendre l’exemple plus clair et plus facile à suivre.

Gravité

Medium

Description

Cette erreur se produit lorsqu’une requête tente d’accéder à un attribut dans une colonne qui a été définie comme un type personnalisé. Bien que la conversion automatique ne soit pas possible, vous pouvez facilement convertir ces requêtes manuellement.

Exemple de code :

Code d’entrée Oracle :

CREATE TYPE type1 AS OBJECT (
  attribute1 VARCHAR2(20),
  attribute2 NUMBER
);
CREATE TYPE type2 AS OBJECT (
  property1 type1,
  property2 DATE
);
CREATE TABLE my_table (
  id NUMBER PRIMARY KEY,
  column1 type2
);
INSERT INTO my_table VALUES (
  1, type2(type1('value1', 100), SYSDATE)
);
SELECT column1.property1.attribute1, column1.property2
FROM my_table;
Copy

Code de sortie :

!!!RESOLVE EWI!!! /*** SSC-EWI-0056 - CUSTOM TYPES ARE NOT SUPPORTED IN SNOWFLAKE BUT REFERENCES TO THIS CUSTOM TYPE WERE CHANGED TO VARIANT ***/!!!
CREATE TYPE type1 AS OBJECT (
  attribute1 VARCHAR2(20),
  attribute2 NUMBER
)
;

!!!RESOLVE EWI!!! /*** SSC-EWI-0056 - CUSTOM TYPES ARE NOT SUPPORTED IN SNOWFLAKE BUT REFERENCES TO THIS CUSTOM TYPE WERE CHANGED TO VARIANT ***/!!!
CREATE TYPE type2 AS OBJECT (
  property1 type1,
  property2 DATE
)
;

CREATE OR REPLACE TABLE my_table (
  id NUMBER(38, 18) /*** SSC-FDM-0006 - NUMBER TYPE COLUMN MAY NOT BEHAVE SIMILARLY IN SNOWFLAKE. ***/ PRIMARY KEY,
  column1 VARIANT !!!RESOLVE EWI!!! /*** SSC-EWI-0062 - CUSTOM TYPE 'type2' USAGE CHANGED TO VARIANT ***/!!!
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;

CREATE OR REPLACE VIEW PUBLIC.my_table_view
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "oracle",  "convertedOn": "" }}'
AS
SELECT
  id,
  column1:property1:attribute1 :: VARCHAR AS attribute1,
  column1:property1:attribute2 :: NUMBER AS attribute2,
  column1:property2 :: DATE AS property2
FROM
  my_table;

INSERT INTO my_table
VALUES (
  1, type2(type1('value1', 100) !!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'type1' NODE ***/!!!, CURRENT_TIMESTAMP()) !!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'type2' NODE ***/!!!
);

SELECT
  !!!RESOLVE EWI!!! /*** SSC-EWI-OR0082 - CANNOT CONVERT NESTED TYPE ATTRIBUTE EXPRESSION ***/!!! column1.property1.attribute1,
  column1.property2
FROM
  my_table;
Copy

Recommandations

  • Pour corriger le code manuellement, remplacez l’opérateur “.” (point) par “:” (deux points) lors de l’accès aux colonnes de type.

  • Pour toute assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com

SSC-EWI-OR0071

Gravité

Faible

Description

L’utilisation du quantificateur « all » n’est pas pris en charge par Snowflake. Lors de la conversion de votre code, ce modificateur sera supprimé et un message d’avertissement sera généré. Veuillez noter que cette modification peut entraîner un comportement inattendu dans votre code.

Exemple de code

Code d’entrée :

SELECT location_id  FROM locations
MINUS ALL
SELECT location_id  FROM departments;
Copy

Code de sortie :

SELECT location_id  FROM
locations
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0071 - QUANTIFIER 'ALL' NOT SUPPORTED FOR THIS SET OPERATOR, RESULTS MAY DIFFER ***/!!!
MINUS
SELECT location_id  FROM
departments;
Copy

Dans Snowflake, les opérateurs INTERSECT et MINUS/EXCEPT éliminent automatiquement les valeurs en double du jeu de résultats.

Recommandations

Vérifiez les fonctions alternatives dans Snowflake pour répliquer la fonctionnalité du quantificateur « all ». Voici comment contourner les limites des opérations MINUS ALL et EXCEPT ALL.

SELECT location_id FROM
(
    SELECT location_id, ROW_NUMBER()OVER(PARTITION BY location_id ORDER BY 1) rn
    FROM locations
    MINUS
    SELECT number_val, ROW_NUMBER()OVER(PARTITION BY location_id ORDER BY 1) rn
    FROM departments
);
Copy

SSC-EWI-OR0020

Gravité

Modéré

Description

L’implémentation de cette fonction par Snowflake n’accepte pas les valeurs négatives, ce qui se traduira par un comportement différent par rapport à la base de données source lors de l’exécution.

Exemple de code

Code d’entrée :

SELECT INSTR('CORPORATE FLOOR','OR', -3, 2) FROM DUAL;
Copy

Code de sortie :

SELECT
REGEXP_INSTR('CORPORATE FLOOR','OR', -3, 2) !!!RESOLVE EWI!!! /*** SSC-EWI-OR0020 - NEGATIVE VALUES NOT SUPPORTED FOR FUNCTION ***/!!! FROM DUAL;
Copy

Recommandations

  • Créez une fonction définie par l’utilisateur (UDF) capable de traiter des valeurs négatives comme paramètres d’entrée ou d’explorer des solutions alternatives.

  • Pour toute assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com

SSC-EWI-OR0051

Gravité

Faible

Description

Cet avertissement apparaît lorsqu’une fonction PRAGMA EXCEPTION_INIT est utilisée dans une procédure. Dans le code original, les noms d’exception et les codes SQL sont définis à l’aide de la fonction RAISE. Lors de la conversion vers Snowflake Scripting, ces codes SQL sont inclus dans la déclaration d’exception. Cependant, certaines de ces valeurs de code SQL peuvent ne pas être compatibles avec Snowflake Scripting.

Exemple de code

Code d’entrée :

CREATE OR REPLACE PROCEDURE EXCEPTION_DECLARATION_SAMPLE AUTHID DEFINER IS
  NEW_EXCEPTION EXCEPTION;
  PRAGMA EXCEPTION_INIT(NEW_EXCEPTION, -63);
  NEW_EXCEPTION2 EXCEPTION;
  PRAGMA EXCEPTION_INIT ( NEW_EXCEPTION2, -20100 );
BEGIN

  IF true THEN
    RAISE NEW_EXCEPTION;
  END IF;

EXCEPTION
    WHEN NEW_EXCEPTION THEN
        --Handle Exceptions
        NULL;
END;
/
Copy

Code de sortie :

Script Snowflake

CREATE OR REPLACE PROCEDURE EXCEPTION_DECLARATION_SAMPLE ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
  DECLARE
    !!!RESOLVE EWI!!! /*** SSC-EWI-OR0099 - EXCEPTION CODE NUMBER EXCEEDS SNOWFLAKE SCRIPTING LIMITS ***/!!!
    NEW_EXCEPTION EXCEPTION;
    !!!RESOLVE EWI!!! /*** SSC-EWI-OR0051 - PRAGMA EXCEPTION_INIT IS NOT SUPPORTED ***/!!!
    PRAGMA EXCEPTION_INIT(NEW_EXCEPTION, -63);
    NEW_EXCEPTION2 EXCEPTION (-20100, '');
    !!!RESOLVE EWI!!! /*** SSC-EWI-OR0051 - PRAGMA EXCEPTION_INIT IS NOT SUPPORTED ***/!!!
  PRAGMA EXCEPTION_INIT ( NEW_EXCEPTION2, -20100 );
  BEGIN
    IF (true) THEN
      RAISE NEW_EXCEPTION;
    END IF;
    EXCEPTION
        WHEN NEW_EXCEPTION THEN
            --Handle Exceptions
            NULL;
    END;
$$;
Copy

Recommandations

  • Aucune action n’est requise de la part des utilisateurs.

  • Pour une assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com

SSC-EWI-OR0075

Gravité

Medium

Certaines parties du code ont été supprimées pour rendre l’exemple plus clair et plus facile à comprendre.

Générez des procédures et des macros dans JavaScript en ajoutant l’indicateur -t JavaScript ou --PLTargetLanguage JavaScript à votre commande.

Description

Les étiquettes des blocs de code ne peuvent pas être utilisées comme références dans les instructions.

Exemple de code

Oracle :

--Additional Params: -t JavaScript
CREATE OR REPLACE EDITIONABLE PROCEDURE PROCEDURE1
IS
BEGIN
    -- procedure body
    EXIT loop_b;
    -- procedure body continuation
END;
Copy

Snowflake Scripting:

--** SSC-FDM-OR0007 - SNOWFLAKE DOESN'T SUPPORT VERSIONING OF OBJECTS. DEVELOPERS SHOULD CONSIDER ALTERNATE APPROACHES FOR CODE VERSIONING. **
CREATE OR REPLACE PROCEDURE PROCEDURE1 ()
RETURNS STRING
LANGUAGE JAVASCRIPT
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
    // SnowConvert Helpers Code section is omitted.

    /* ** SSC-EWI-OR0075 - LABELS IN STATEMENTS ARE NOT SUPPORTED. ** */
    /*     -- procedure body
        EXIT loop_b */
    // procedure body
    ;
    // procedure body continuation
    ;
$$;
Copy

Recommandations

  • Aucune action n’est requise de la part des utilisateurs finaux.

  • Pour une assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com

SSC-EWI-OR0135

Gravité

Faible

Description

Lors de l’exécution d’une requête Time Travel dans Snowflake, il se peut que vous ne receviez aucun résultat si vous spécifiez une période qui se situe en dehors de la période de conservation des données. Pour plus d’informations, veuillez vous référer à Time Travel de Snowflakel.

Exemple de code

Code d’entrée

SELECT * FROM employees
AS OF TIMESTAMP
TO_TIMESTAMP('2023-09-27 07:00:00', 'YYYY-MM-DD HH:MI:SS')
WHERE last_name = 'SampleName';
Copy

Code de sortie

SELECT * FROM
employees
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0135 - DATA RETENTION PERIOD MAY PRODUCE NO RESULTS ***/!!!
AT (TIMESTAMP =>
TO_TIMESTAMP('2023-09-27 07:00:00', 'YYYY-MM-DD HH:MI:SS'))
WHERE last_name = 'SampleName';
Copy

Recommandations

SSC-EWI-OR0101

Gravité

Faible

Description

FOR LOOP d’Oracle prend en charge des clauses supplémentaires qui ne sont pas disponibles dans Snowflake Scripting. Il s’agit notamment des éléments suivants :

  • Clause BY : contrôle la taille du pas du compteur de la boucle

  • Clause WHILE : ajoute une condition booléenne pour poursuivre la boucle

  • Clause WHEN : ajoute une condition booléenne pour poursuivre la boucle

Lors de la transformation du code Oracle en code Snowflake, ces clauses sont ignorées car elles ne sont pas prises en charge par Snowflake Scripting.

Exemple de code

Code d’entrée Oracle :

CREATE OR REPLACE PROCEDURE P2
AS
BEGIN
FOR i IN 1..10 WHILE i <= 5 LOOP
    NULL;
END LOOP;

FOR i IN 5..15 BY 5 LOOP
    NULL;
END LOOP;
END;
Copy

Code de sortie :

CREATE OR REPLACE PROCEDURE P2 ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
    BEGIN
        !!!RESOLVE EWI!!! /*** SSC-EWI-OR0101 - FOR LOOP WITH "WHILE" CLAUSE IS CURRENTLY NOT SUPPORTED BY SNOWFLAKE SCRIPTING ***/!!!
        FOR i IN 1 TO 10 LOOP
            NULL;
        END LOOP;
        !!!RESOLVE EWI!!! /*** SSC-EWI-OR0101 - FOR LOOP WITH "BY" CLAUSE IS CURRENTLY NOT SUPPORTED BY SNOWFLAKE SCRIPTING ***/!!!
        FOR i IN 5 TO 15 LOOP
            NULL;
        END LOOP;
    END;
$$;
Copy

Recommandations

  • Décomposez les instructions FOR LOOP complexes en plusieurs boucles plus simples ou réécrivez la condition de la boucle pour la rendre plus claire.

  • Pour toute assistance supplémentaire, veuillez contacter notre équipe de support à l’adresse suivante : snowconvert-support@snowflake.com

SSC-EWI-OR0010

Certaines parties du code ont été supprimées pour rendre l’exemple plus clair et plus facile à comprendre.

Gravité

Critique

Description

Cet avertissement apparaît lorsque les clauses PARTITION et SUBPARTITION sont utilisées dans une requête. Snowflake gère automatiquement la partition des données, ces clauses ne sont donc pas nécessaires.

Exemple de code

Code d’entrée :

SELECT * FROM table1 PARTITION(col1);
Copy

Code de sortie :

SELECT * FROM
table1
        !!!RESOLVE EWI!!! /*** SSC-EWI-OR0010 - PARTITIONS CLAUSES ARE HANDLED BY SNOWFLAKE. IT REQUIRES MANUAL FIX ***/!!!
        PARTITION(col1);
Copy

Recommandations

  • Pour obtenir une fonctionnalité similaire dans Snowflake, vous devez ajouter manuellement une clause WHERE pour filtrer des lignes de partition spécifiques. Notez que cette solution de contournement peut avoir un impact sur les performances des requêtes.

  • Pour toute assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com

SSC-EWI-OR0099

Gravité

Faible

Description

Cette erreur se produit lorsque le numéro de la déclaration d’exception se situe en dehors de la plage autorisée pour Snowflake Scripting. Les numéros d’exception doivent être des entiers compris entre -20000 et -20999.

Exemple de code

Code d’entrée :

CREATE OR REPLACE PROCEDURE procedure_exception
IS
my_exception EXCEPTION;
PRAGMA EXCEPTION_INIT ( my_exception, -19000 );
BEGIN
    NULL;
END;
Copy

Code de sortie :

CREATE OR REPLACE PROCEDURE procedure_exception ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
    DECLARE
        !!!RESOLVE EWI!!! /*** SSC-EWI-OR0099 - EXCEPTION CODE NUMBER EXCEEDS SNOWFLAKE SCRIPTING LIMITS ***/!!!
        my_exception EXCEPTION;
        !!!RESOLVE EWI!!! /*** SSC-EWI-OR0051 - PRAGMA EXCEPTION_INIT IS NOT SUPPORTED ***/!!!
        PRAGMA EXCEPTION_INIT ( my_exception, -19000 );
    BEGIN
        NULL;
    END;
$$;
Copy

Recommandations

  • Vérifiez que votre code d’exception se situe dans la plage autorisée par Snowflake Scripting. Si ce n’est pas le cas, utilisez un autre numéro d’exception disponible.

  • Pour toute assistance supplémentaire, contactez-nous à l’adresse suivante : snowconvert-support@snowflake.com

SSC-EWI-OR0089

Cet EWI n’est plus utilisé. Veuillez consulter SSC-FDM-OR0044 pour la documentation actuelle.

Gravité

Faible

Description

Cet avertissement apparaît lors de l’utilisation de la fonction REGEXP_LIKE d’Oracle avec un paramètre de correspondance (troisième paramètre). L’avertissement indique que la fonction REGEXP_LIKE_UDF de Snowflake, qui remplace REGEXP_LIKE d’Oracle, peut ne pas prendre en charge tous les caractères des paramètres de correspondance. Le résultat de la requête dans Snowflake peut donc être différent de celui d’Oracle.

Exemple de code

Code d’entrée Oracle :

SELECT last_name
FROM hr.employees
WHERE REGEXP_LIKE (last_name, '([aeiou])\1', 'i')
ORDER BY last_name;
Copy

Code de sortie :

SELECT last_name
FROM
hr.employees
WHERE
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0089 - REGEXP_LIKE_UDF MATCH PARAMETER MAY HAVE SOME FUNCTIONAL DIFFERENCES COMPARED TO ORACLE. ***/!!!
PUBLIC.REGEXP_LIKE_UDF(last_name, '([aeiou])\\1', 'i')
ORDER BY last_name;
Copy
  • Si votre condition REGEXP_LIKE contient des caractères non pris en charge dans la fonction définie par l’utilisateur, envisagez de modifier l’expression régulière pour obtenir le même comportement de correspondance sans utiliser ces caractères. Pour plus de détails sur les caractères non pris en charge, veuillez consulter la documentation REGEXP_LIKE_UDF.

  • Pour toute assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com

SSC-EWI-OR0128

Certaines parties du code de sortie ont été supprimées pour rendre l’exemple plus clair et plus facile à suivre.

Gravité

Faible

Description

Ce message indique qu’un attribut de curseur booléen ne peut pas être utilisé dans SnowScript, soit parce qu’il n’est pas pris en charge, soit parce qu’il n’existe pas de fonctionnalité équivalente. Le tableau ci-dessous dresse la liste des attributs booléens du curseur qui peuvent être répliqués dans SnowScript :

| Boolean Cursor Attribute | Statut | | | - | | %FOUND | Peut être émulé | | %NOTFOUND | Can be emulated | | %ISOPEN | Non pris en charge |

Exemple de code

Code d’entrée :

CREATE OR REPLACE PROCEDURE cursor_attributes_proc
IS
    is_open_attr BOOLEAN;
    found_attr BOOLEAN;
    my_record table1%ROWTYPE;
    CURSOR my_cursor IS SELECT * FROM table1;
BEGIN
    OPEN my_cursor;
    LOOP
        FETCH my_cursor INTO my_record;
        EXIT WHEN my_cursor%NOTFOUND;
        is_open_attr := my_cursor%ISOPEN;
        found_attr := my_cursor%FOUND;
    END LOOP;
    CLOSE my_cursor;
END;
Copy

Code de sortie :

CREATE OR REPLACE PROCEDURE cursor_attributes_proc ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
    DECLARE
        is_open_attr BOOLEAN;
        found_attr BOOLEAN;
        my_record OBJECT !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - ROWTYPE DATA TYPE CONVERTED TO OBJECT ***/!!! := OBJECT_CONSTRUCT();
        my_cursor CURSOR
        FOR
            SELECT
                OBJECT_CONSTRUCT( *) sc_cursor_record FROM
                table1;
    BEGIN
        OPEN my_cursor;
        LOOP
            --** SSC-PRF-0003 - FETCH INSIDE A LOOP IS CONSIDERED A COMPLEX PATTERN, THIS COULD DEGRADE SNOWFLAKE PERFORMANCE. **
            FETCH my_cursor INTO
                :my_record;
            IF (my_record IS NULL) THEN
                EXIT;
            END IF;
            is_open_attr := null /*my_cursor%ISOPEN*/!!!RESOLVE EWI!!! /*** SSC-EWI-OR0128 - BOOLEAN CURSOR ATTRIBUTE %ISOPEN IS NOT SUPPORTED IN SNOWFLAKE ***/!!!;
            found_attr := my_record IS NOT NULL;
        END LOOP;
        CLOSE my_cursor;
    END;
$$;
Copy

Recommandations

SSC-EWI-OR0068

Gravité

Medium

Description

Cette erreur se produit lorsque la valeur de START WITH est supérieure à la valeur maximale autorisée par Snowflake. Selon la documentation de Snowflake, la valeur de début de séquence doit être comprise dans l’intervalle d’un entier de 64 bits en complément à deux : de -2^63 à 2^63-1. Plus précisément, les valeurs maximales autorisées sont les suivantes :

  • Chiffres positifs : 9223372036854775807

  • Nombres négatifs : 9223372036854775808

Exemple de code

Code d’entrée :

CREATE SEQUENCE SEQUENCE1
START WITH 9223372036854775808;
Copy
CREATE SEQUENCE SEQUENCE2
START WITH -9223372036854775809;
Copy

Code de sortie :

CREATE OR REPLACE SEQUENCE SEQUENCE1
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0068 - SEQUENCE START VALUE EXCEEDS THE MAX VALUE ALLOWED BY SNOWFLAKE. ***/!!!
START WITH 9223372036854775808
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}';
Copy
CREATE OR REPLACE SEQUENCE SEQUENCE2
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0068 - SEQUENCE START VALUE EXCEEDS THE MAX VALUE ALLOWED BY SNOWFLAKE. ***/!!!
START WITH -9223372036854775809
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}';
Copy

Recommandations

  • Nous vous recommandons de réinitialiser la séquence et d’adapter son utilisation. NOTE : assurez-vous que la colonne cible a une capacité suffisante pour stocker cette valeur.

  • Pour toute assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com

SSC-EWI-OR0039

Certaines parties du code de sortie ont été supprimées pour rendre l’exemple plus clair et plus facile à suivre.

Gravité

Faible

Description

Ce message apparaît lorsque SnowConvert détecte une requête contenant une clause NOCYCLE, qui n’est actuellement pas prise en charge par Snowflake.

Cette instruction indique quand une opération récursive se produit.

Pour de plus amples informations sur les fonctionnalités des clauses, veuillez vous référer à la documentation.

Exemple de code

Connecter par

Code d’entrée :

CREATE OR REPLACE FORCE NONEDITIONABLE VIEW VIEW01 AS
SELECT
      UNIQUE A.*
FROM
      TABLITA A
WHERE
      A.X = A.C CONNECT BY NOCYCLE A.C = 0 START WITH A.B = 1
HAVING
      X = 1
GROUP BY
      A.C;
Copy

Code de sortie :

CREATE OR REPLACE VIEW VIEW01
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
AS
SELECT DISTINCT
      A.*
FROM
      TABLITA A
WHERE
      A.X = A.C
GROUP BY
      A.C
HAVING
      X = 1
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0039 - NOCYCLE CLAUSE IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
CONNECT BY
      A.C = 0 START WITH A.B = 1;
Copy

Recommandations

  • Si votre hiérarchie de données contient des cycles, veuillez vous référer à cet article pour savoir comment les traiter.

  • Pour toute assitance supplémentaire, contactez notre équipe de support à l’adresse suivante : snowconvert-support@snowflake.com

SSC-EWI-OR0029

Description

Snowflake ne prend pas en charge la fonction « Défaut en cas d’erreur de conversion ».

Exemple de code

Code d’entrée :

SELECT TO_NUMBER('2,00' DEFAULT 0 ON CONVERSION ERROR) "Value" FROM DUAL;
Copy

Code de sortie :

SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0029 - DEFAULT ON CONVERSION ERROR NOT SUPPORTED IN SNOWFLAKE ***/!!! TO_NUMBER('2,00') "Value" FROM DUAL;
Copy

Recommandations

  • Envisagez de créer une fonction définie par l’utilisateur (UDF) pour répliquer la fonctionnalité de la valeur DEFAULT lors du traitement de ON CONVERSION ERROR.

  • Pour toute assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com

SSC-EWI-OR0078

Gravité

Medium

Description

SnowConvert n’a pas pu analyser l’instruction dynamique SQL contenue dans la commande Execute Immediate.

Générez des procédures et des macros dans JavaScript en ajoutant l’indicateur -t JavaScript ou --PLTargetLanguage JavaScript à votre commande.

Exemple de code

Oracle :

--Additional Params: -t JavaScript
CREATE OR REPLACE PROCEDURE PROC1 AS
BEGIN
    EXECUTE IMMEDIATE 'NOT A VALID SQL STATEMENT';
END;
Copy

Snowflake Scripting:

CREATE OR REPLACE PROCEDURE PROC1 ()
RETURNS STRING
LANGUAGE JAVASCRIPT
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "oracle",  "convertedOn": "12/16/2024",  "domain": "test" }}'
EXECUTE AS CALLER
AS
$$
    // SnowConvert Helpers Code section is omitted.

    !!!RESOLVE EWI!!! /*** SSC-EWI-OR0078 - UNABLE TO PARSE DYNAMIC SQL STATEMENT ***/!!!
    /*EXEC(`NOT A VALID SQL STATEMENT`)*/
    ;
$$;
Copy

Recommandations

  • Vérifiez que la syntaxe de votre instruction dynamique SQL est correcte.

  • Consultez la documentation du site SnowConvert pour vérifier si votre instruction est prise en charge.

  • Pour toute assistance supplémentaire, contactez-nous à l’adresse suivante : snowconvert-support@snowflake.com

SSC-EWI-OR0118

Gravité

Medium

Description

Oracle comprend des vues et des tables intégrées que Snowflake ne prend pas en charge. Lorsque ces éléments sont utilisés dans des requêtes ou des instructions, SnowConvert génère un message d’erreur.

Exemple de code

Code d’entrée :

SELECT * FROM ALL_COL_COMMENTS;
SELECT * FROM (SELECT * FROM ALL_COL_COMMENTS);
Copy

Code de sortie :

SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0118 - TRANSLATION FOR ORACLE BUILT-IN TABLE/VIEW 'ALL_COL_COMMENTS' IS NOT CURRENTLY SUPPORTED. ***/!!!
 * FROM
 ALL_COL_COMMENTS;

SELECT * FROM (SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0118 - TRANSLATION FOR ORACLE BUILT-IN TABLE/VIEW 'ALL_COL_COMMENTS' IS NOT CURRENTLY SUPPORTED. ***/!!! * FROM
ALL_COL_COMMENTS);
Copy

Recommandations

  • Les informations généralement contenues dans les vues intégrées d’Oracle sont disponibles dans Snowflake par l’intermédiaire de Information Schema ou de la commande SHOW soit par le biais du schéma d’information, soit en utilisant la commande

  • Pour toute assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com

SSC-EWI-OR0009

Gravité

Élevé

Description

La fonction JSON_TABLE n’est pas prise en charge dans cette version.

Exemple de code

Code d’entrée :

SELECT jt.phones
FROM j_purchaseorder,
JSON_TABLE(po_document, '$.ShippingInstructions'
COLUMNS
(phones VARCHAR2(100) FORMAT JSON PATH '$.Phone')) AS jt;
Copy

Code de sortie :

SELECT jt.phones
FROM
j_purchaseorder,
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0009 - JSON_TABLE IS NOT SUPPORTED ***/!!!
JSON_TABLE(po_document, '$.ShippingInstructions'
COLUMNS
(phones VARCHAR(100) FORMAT JSON PATH '$.Phone')) AS jt;
Copy

Recommandations

  • Utilisez la fonction FLATTEN de Snowflake comme alternative à la fonctionnalité JSON_TABLE.

  • Pour toute assitance supplémentaire, contactez notre équipe de support à l’adresse suivante : snowconvert-support@snowflake.com

SSC-EWI-OR0108

Certaines parties du code de sortie ont été supprimées pour rendre l’exemple plus clair et plus facile à suivre.

Gravité

Medium

Description

Les types de variables Oracle tels que les curseurs, les collections, les enregistrements et les types définis par l’utilisateur ne peuvent pas être directement convertis vers Snowflake. En outre, Snowflake Scripting ne prend pas actuellement en charge la transformation des caractères génériques, des objets et des paramètres de sortie.

La conversion de ces variables en types de données semi-structurées Snowflake peut constituer une solution dans certains cas.

Exemple de code

Code d’entrée :

CREATE OR REPLACE PROCEDURE pinvalidassign(out_parameter   IN OUT NUMBER)
AS
record_variable       employees%ROWTYPE;

TYPE cursor_type IS REF CURSOR;
cursor1   cursor_type;
cursor2   SYS_REFCURSOR;

TYPE collection_type IS TABLE OF NUMBER INDEX BY VARCHAR(64);
collection_variable     collection_type;

BEGIN
--Record Example
  record_variable.last_name := 'Ortiz';

--Cursor Example
  cursor1 := cursor2;

--Collection
  collection_variable('Test') := 5;

--Out Parameter
  out_parameter := 123;
END;
Copy

Code de sortie :

CREATE OR REPLACE PROCEDURE pinvalidassign (out_parameter NUMBER(38, 18))
RETURNS VARIANT
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
  DECLARE
    record_variable OBJECT !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - ROWTYPE DATA TYPE CONVERTED TO OBJECT ***/!!! := OBJECT_CONSTRUCT();
--    !!!RESOLVE EWI!!! /*** SSC-EWI-0058 - FUNCTIONALITY FOR 'PL REF CURSOR TYPE DEFINITION' IS NOT CURRENTLY SUPPORTED BY SNOWFLAKE SCRIPTING ***/!!!

--    TYPE cursor_type IS REF CURSOR;
    cursor1_res RESULTSET;
    cursor2_res RESULTSET;
--    !!!RESOLVE EWI!!! /*** SSC-EWI-0058 - FUNCTIONALITY FOR 'PL COLLECTION TYPE DEFINITION' IS NOT CURRENTLY SUPPORTED BY SNOWFLAKE SCRIPTING ***/!!!

--    TYPE collection_type IS TABLE OF NUMBER INDEX BY VARCHAR(64);
    collection_variable VARIANT !!!RESOLVE EWI!!! /*** SSC-EWI-0062 - CUSTOM TYPE 'collection_type' USAGE CHANGED TO VARIANT ***/!!!;
  BEGIN
    --Record Example
    record_variable := OBJECT_INSERT(record_variable, 'LAST_NAME', 'Ortiz', true);

    --Cursor Example
    !!!RESOLVE EWI!!! /*** SSC-EWI-OR0108 - THE FOLLOWING ASSIGNMENT STATEMENT IS NOT SUPPORTED BY SNOWFLAKE SCRIPTING ***/!!!
      cursor1 := :cursor2;

    --Collection
    !!!RESOLVE EWI!!! /*** SSC-EWI-OR0108 - THE FOLLOWING ASSIGNMENT STATEMENT IS NOT SUPPORTED BY SNOWFLAKE SCRIPTING ***/!!!
      collection_variable('Test') := 5;
    --Out Parameter
    out_parameter := 123;
    RETURN out_parameter;
  END;
$$;
Copy

Recommandations

SSC-EWI-OR0008

Gravité

Faible

Description

Cette erreur se produit lorsque le système rencontre des formats de date qui ne sont pas reconnus, ce qui peut entraîner des résultats inattendus.

Exemple de code

Code d’entrée :

SELECT TO_CHAR(DATE '1998-12-25','iw-iyyy') FROM DUAL;
Copy

Code de sortie :

SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0008 - UNKNOWN FORMAT, MAY HAVE UNEXPECTED BEHAVIOR ***/!!!
 TO_CHAR(DATE '1998-12-25','iw-iyyy'') FROM DUAL;
Copy

Remarque : le format de date « iw-iyyy » n’est pas pris en charge.

Recommandations

  • Pour obtenir la liste des formats d’horodatage pris en charge, veuillez vous référer à la documentation.

  • Pour toute assistance supplémentaire, veuillez contacter notre équipe de support à l’adresse suivante : snowconvert-support@snowflake.com

SSC-EWI-OR0109

Gravité

Medium

Description

Snowflake Scripting ne prend pas en charge l’utilisation d’expressions comme arguments dans la clause USING des instructions EXECUTE IMMEDIATE, contrairement à Oracle où cette fonctionnalité est disponible.

Snowflake Scripting prend en charge les expressions variables. Vous pouvez remplacer une expression en l’affectant manuellement à une variable, comme le montre l’exemple ci-dessous.

Exemple de code

Code d’entrée :

CREATE OR REPLACE PROCEDURE expression_arguments
IS
  immediate_input INTEGER := 0;
BEGIN
  EXECUTE IMMEDIATE 'INSERT INTO immediate_table VALUES (:value)' USING immediate_input+1;
END;
Copy

Code de sortie :

CREATE OR REPLACE PROCEDURE expression_arguments ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
  DECLARE
    immediate_input INTEGER := 0;
  BEGIN
    !!!RESOLVE EWI!!! /*** SSC-EWI-0030 - THE STATEMENT BELOW HAS USAGES OF DYNAMIC SQL. ***/!!!
    EXECUTE IMMEDIATE 'INSERT INTO immediate_table
VALUES (?)' USING (
    !!!RESOLVE EWI!!! /*** SSC-EWI-OR0109 - EXPRESSIONS AS ARGUMENTS OF USING CLAUSE IS NOT SUPPORTED BY SNOWFLAKE SCRIPTING ***/!!!
    :immediate_input +1);
  END;
$$;
Copy

Procédure d’exécution immédiate de migration manuelle :

Pour résoudre l’erreur de compilation tout en conservant les mêmes résultats qu’Oracle, utilisez la procédure décrite ci-dessus.

CREATE OR REPLACE PROCEDURE PUBLIC.expression_arguments ()
RETURNS VARCHAR
LANGUAGE SQL
EXECUTE AS CALLER
AS
$$
   DECLARE
      immediate_input INTEGER := 0;
      using_argument_variable INTEGER;
   BEGIN
      using_argument_variable := immediate_input+1;
      EXECUTE IMMEDIATE 'INSERT INTO PUBLIC.immediate_table VALUES (?)' USING (using_argument_variable );
   END;
$$;
Copy

Recommandations

  • Pour migrer manuellement les procédures, créez une variable et affectez-lui l’expression.

  • Pour une assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com

SSC-EWI-OR0049

Gravité

Critique

Certaines parties du code ont été omises pour que l’exemple reste clair et concis.

Description

Cet avertissement apparaît lorsque vous tentez d’utiliser un membre non pris en charge d’un paquet avec état.

Cette fonction sera disponible dans une prochaine version.

Exemple de code

Code d’entrée :

CREATE OR REPLACE PACKAGE MY_PACKAGE
AS
    TYPE COLLECTIONTYPEDEFINITION IS TABLE OF BULKCOLLECTTABLE%ROWTYPE;
END;
Copy

Code de sortie :

CREATE SCHEMA IF NOT EXISTS MY_PACKAGE
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;

!!!RESOLVE EWI!!! /*** SSC-EWI-OR0049 - PACKAGE TYPE DEFINITIONS in stateful package MY_PACKAGE are not supported yet ***/!!!
TYPE COLLECTIONTYPEDEFINITION IS TABLE OF BULKCOLLECTTABLE%ROWTYPE;
Copy

Recommandations

  • Aucune action n’est requise de votre part.

  • Pour une assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com

SSC-EWI-OR0129

Gravité

Faible

Certaines parties de la sortie du code ont été supprimées pour rendre l’exemple plus clair.

Description

Cet avertissement apparaît lorsque le système ne peut pas déterminer le type de données d’un élément parce que son attribut TYPE référencé est introuvable. Dans ce cas, le système affecte automatiquement le type de données VARIANT à l’élément.

Exemple de code

Code d’entrée :

CREATE OR REPLACE PROCEDURE procedure01
IS
var1 table01.col1%TYPE;
BEGIN
NULL;
END;
Copy

Code de sortie :

CREATE OR REPLACE PROCEDURE procedure01 ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
DECLARE
var1 VARIANT !!!RESOLVE EWI!!! /*** SSC-EWI-OR0129 - TYPE ATTRIBUTE 'table01.col1%TYPE' COULD NOT BE RESOLVED, SO IT WAS TRANSFORMED TO VARIANT ***/!!!;
BEGIN
NULL;
END;
$$;
Copy

Recommandations

  • Vérifiez manuellement le type de données de l’élément référencé et mettez à jour l’attribut TYPE dans l’élément de référence en conséquence.

  • Pour toute assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com

SSC-EWI-OR0069

Gravité

Medium

Description

Snowflake ne prend pas en charge la propriété CURRVAL pour les séquences.

Exemple de code

Oracle :

select seq1.currval from dual;
Copy

Snowflake Scripting:

select
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0069 - THE SEQUENCE CURRVAL PROPERTY IS NOT SUPPORTED IN SNOWFLAKE. ***/!!!
 seq1.currval from dual;
Copy

Recommandations

SSC-EWI-OR0038

Gravité

Faible

Description

La search_clause contrôle la manière dont les lignes sont traitées dans une instruction SELECT en définissant leur ordre. Bien que cette fonction vous permette de spécifier comment les données doivent être parcourues et renvoyées dans Oracle, elle n’est pas disponible dans Snowflake.

Dans Oracle et les bases de données similaires, la search_clause permet de contrôler la manière dont les données hiérarchiques sont traitées dans les requêtes récursives ou les Common Table Expressions (CTEs). Lorsque vous spécifiez des colonnes dans la [search_clause (https://docs.oracle.com/en/database/oracle/oracle-database/19/sqlrf/SELECT.html#GUID-CFA006CA-6FF1-4972-821E-6996142A51C6__I2077142), vous pouvez choisir entre les méthodes de parcours « depth-first » ou « breadth-first », qui déterminent l’ordre de traitement des lignes.

Dans Snowflake, un message search_clause sera généré puis supprimé.

Exemple de code

Code d’entrée :

WITH dup_hiredate(eid, emp_last, mgr_id, reportLevel, hire_date, job_id) AS
(SELECT aValue from atable) SEARCH DEPTH FIRST BY hire_date SET order1 SELECT aValue from atable;
Copy

Code de sortie :

WITH dup_hiredate(eid, emp_last, mgr_id, reportLevel, hire_date, job_id) AS
(
SELECT aValue from
atable
) !!!RESOLVE EWI!!! /*** SSC-EWI-OR0038 - SEARCH CLAUSE REMOVED FROM THE WITH ELEMENT STATEMENT ***/!!!
SELECT aValue from
atable;
Copy

Recommandation

  • Aucune action n’est requise de votre part.

  • Pour une assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com

SSC-EWI-OR0033

Gravité

Medium

Description

Les déclarations de variables PL/SQL dans les clauses WITH ne sont actuellement pas prises en charge.

Exemple de code

Code d’entrée :

WITH FUNCTION get_domain ( url VARCHAR2 ) RETURN VARCHAR2 IS pos BINARY_INTEGER;
len BINARY_INTEGER;
BEGIN
pos := INSTR(url, 'www.');
len := INSTR(SUBSTR(url, pos + 4), '.') - 1;
END; SELECT aValue from aTable;
Copy

Code de sortie :

// SnowConvert Helpers Code section is omitted.
WITH
     !!!RESOLVE EWI!!! /*** SSC-EWI-OR0033 - PLDECLARATION IN WITH NOT SUPPORTED ***/!!!
 FUNCTION get_domain ( url VARCHAR2 ) RETURN VARCHAR2 IS pos BINARY_INTEGER;
len BINARY_INTEGER;
BEGIN
pos := INSTR(url, 'www.');
len := INSTR(SUBSTR(url, pos + 4), '.') - 1;
END; SELECT aValue from
aTable;
Copy

Recommandations

  • Aucune action n’est requise de votre part.

  • Pour une assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com

SSC-EWI-OR0007

Description

Ce message apparaît lorsque vous tentez d’utiliser une instruction Create Type qui n’est pas prise en charge par Snowflake.

Exemple de code

Code d’entrée (Oracle) :

CREATE TYPE type6 UNDER type5(COL1 INTEGER);
Copy

Code de sortie :

--!!!RESOLVE EWI!!! /*** SSC-EWI-OR0007 - CREATE TYPE SUBTYPE IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
--CREATE TYPE type6 UNDER type5(COL1 INTEGER)
                                           ;
Copy

Recommandations

  • Aucune action n’est requise de la part des utilisateurs.

  • Pour une assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com

SSC-EWI-OR0116

Gravité

Medium

Certaines parties du code de sortie ont été supprimées pour rendre l’exemple plus clair.

Description

Cette erreur se produit lorsque l’on tente d’effectuer des opérations arithmétiques exclusivement avec des intervalles. Snowflake ne prend pas en charge les calculs entre deux valeurs d’intervalle.

Exemple de code

Code d’entrée :

SELECT INTERVAL '1-1' YEAR(2) TO MONTH + INTERVAL '1-1' YEAR(2) + INTERVAL '1-1' YEAR(2) TO MONTH FROM dual;

SELECT INTERVALCOLUMN + INTERVAL '1-1' YEAR(2) TO MONTH FROM INTERVALTABLE;
Copy

Code de sortie :

SELECT
--INTERVAL '1-1 year' + INTERVAL '1y, 1mm' + INTERVAL '1y, 1mm'
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0116 - OPERATIONS BETWEEN INTERVALS ARE NOT SUPPORTED BY SNOWFLAKE ***/!!!
null
FROM dual;


SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0036 - TYPES RESOLUTION ISSUES, ARITHMETIC OPERATION '+' MAY NOT BEHAVE CORRECTLY BETWEEN Unknown AND Interval ***/!!! INTERVALCOLUMN + INTERVAL '1y, 1mm'
FROM
INTERVALTABLE;
Copy

Recommandations

  • Si le calendrier d’une opération pose problème, vous pouvez le corriger en ajoutant des dates ou des horodatages à l’emplacement approprié.

  • Pour toute assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com

SSC-EWI-OR0046

Cet avertissement n’est plus utilisé. Veuillez consulter SSC-EWI-0109 pour la documentation actuelle.

Gravité

Medium

Description

Lorsqu’une commande de modification de table n’est pas compatible avec la syntaxe de Snowflake, le code sera commenté et cette notification sera ajoutée en tant que commentaire.

Exemple de code :

Code d’entrée :

ALTER TABLE SOMENAME DEFAULT COLLATION SOMENAME;

ALTER TABLE SOMENAME ROW ARCHIVAL;

ALTER TABLE SOMENAME MODIFY CLUSTERING;

ALTER TABLE SOMENAME DROP CLUSTERING;

ALTER TABLE SOMENAME SHRINK SPACE COMPACT CASCADE;
Copy

Code de sortie :

!!!RESOLVE EWI!!! /*** SSC-EWI-0109 - ALTER TABLE SYNTAX NOT APPLICABLE IN SNOWFLAKE ***/!!!
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "SOMENAME" **
ALTER TABLE SOMENAME
DEFAULT COLLATION SOMENAME;

!!!RESOLVE EWI!!! /*** SSC-EWI-0109 - ALTER TABLE SYNTAX NOT APPLICABLE IN SNOWFLAKE ***/!!!
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "SOMENAME" **

ALTER TABLE SOMENAME
ROW ARCHIVAL;

!!!RESOLVE EWI!!! /*** SSC-EWI-0109 - ALTER TABLE SYNTAX NOT APPLICABLE IN SNOWFLAKE ***/!!!
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "SOMENAME" **

ALTER TABLE SOMENAME
MODIFY CLUSTERING;

!!!RESOLVE EWI!!! /*** SSC-EWI-0109 - ALTER TABLE SYNTAX NOT APPLICABLE IN SNOWFLAKE ***/!!!
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "SOMENAME" **

ALTER TABLE SOMENAME
DROP CLUSTERING;

!!!RESOLVE EWI!!! /*** SSC-EWI-0109 - ALTER TABLE SYNTAX NOT APPLICABLE IN SNOWFLAKE ***/!!!
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "SOMENAME" **

ALTER TABLE SOMENAME
SHRINK SPACE COMPACT CASCADE;
Copy

Recommandations

  • Aucune autre action n’est nécessaire de votre part.

  • Pour toute assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com

SSC-EWI-OR0023

Gravité

Élevé

Certaines parties du code ont été supprimées pour rendre l’exemple plus clair et plus facile à comprendre.

Description

Cette erreur se produit lorsqu’une fonction d’agrégation est utilisée

  • DENSE_RANK() : attribue un rang à chaque ligne d’une partition, sans interruption dans la séquence de classement en cas d’égalité

  • RANK() : attribue un rang à chaque ligne d’une partition, avec des écarts dans la séquence de classement en cas d’égalité

  • PERCENT_RANK() : calcule le rang relatif d’une ligne au sein d’une partition sous forme de pourcentage (0 à 1)

  • CUME_DIST() : calcule la distribution cumulative d’une valeur à l’intérieur d’une partition (0 à 1)

n’est pas pris en charge par Snowflake.

Exemple de code

Code d’entrée :

SELECT DENSE_RANK(12000) WITHIN GROUP (ORDER BY salary DESC NULLS FIRST) FROM employees;

SELECT RANK(12000) WITHIN GROUP (ORDER BY salary DESC NULLS FIRST) FROM employees;

SELECT PERCENT_RANK(12000) WITHIN GROUP (ORDER BY salary DESC NULLS FIRST) FROM employees;

SELECT CUME_DIST(12000) WITHIN GROUP (ORDER BY salary DESC NULLS FIRST) FROM employees;
Copy

Code de sortie :

SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0023 - DENSE_RANK AGGREGATE FUNCTION SYNTAX IS NOT SUPPORTED BY SNOWFLAKE. ***/!!!
 DENSE_RANK(12000) WITHIN GROUP (ORDER BY salary DESC NULLS FIRST) FROM
 employees;


SELECT
 !!!RESOLVE EWI!!! /*** SSC-EWI-OR0023 - RANK AGGREGATE FUNCTION SYNTAX IS NOT SUPPORTED BY SNOWFLAKE. ***/!!! RANK(12000) WITHIN GROUP (ORDER BY salary DESC NULLS FIRST) FROM
 employees;


SELECT
 !!!RESOLVE EWI!!! /*** SSC-EWI-OR0023 - PERCENT_RANK AGGREGATE FUNCTION SYNTAX IS NOT SUPPORTED BY SNOWFLAKE. ***/!!! PERCENT_RANK(12000) WITHIN GROUP (ORDER BY salary DESC NULLS FIRST) FROM
 employees;


SELECT
 !!!RESOLVE EWI!!! /*** SSC-EWI-OR0023 - CUME_DIST AGGREGATE FUNCTION SYNTAX IS NOT SUPPORTED BY SNOWFLAKE. ***/!!! CUME_DIST(12000) WITHIN GROUP (ORDER BY salary DESC NULLS FIRST) FROM
 employees;
Copy

Recommandations

SSC-EWI-OR0072

Gravité

Medium

Certaines parties du code ont été supprimées pour rendre l’exemple plus clair et plus facile à comprendre.

Générez des procédures et des macros dans JavaScript en ajoutant l’indicateur -t JavaScript ou --PLTargetLanguage JavaScript à votre commande.

Description

Les membres procéduraux ne sont pas pris en charge dans cette version. Voici un exemple de ce que nous entendons par membres procéduraux :

  • Constantes définies dans le code

  • Curseurs de base de données utilisés pour récupérer les données

  • Iinstructions Pragma qui contrôlent le comportement du compilateur

  • Variables définies dans le code

Exemple de code

Oracle :

-- Additional Params: -t JavaScript
CREATE OR REPLACE EDITIONABLE PROCEDURE PROCEDURE1
   IS
   PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
    NULL;
END;
Copy

Snowflake Scripting:

--** SSC-FDM-OR0007 - SNOWFLAKE DOESN'T SUPPORT VERSIONING OF OBJECTS. DEVELOPERS SHOULD CONSIDER ALTERNATE APPROACHES FOR CODE VERSIONING. **
CREATE OR REPLACE PROCEDURE PROCEDURE1 ()
RETURNS STRING
LANGUAGE JAVASCRIPT
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "oracle",  "convertedOn": "12/16/2024",  "domain": "test" }}'
EXECUTE AS CALLER
AS
$$
   // SnowConvert Helpers Code section is omitted.

   !!!RESOLVE EWI!!! /*** SSC-EWI-OR0072 - PROCEDURAL MEMBER PRAGMA DECLARATION NOT SUPPORTED. ***/!!!
   /*    PRAGMA AUTONOMOUS_TRANSACTION */
   ;
   null;
$$;
Copy

Recommandations

  • Aucune action n’est requise de la part des utilisateurs.

  • Pour une assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com

SSC-EWI-OR0052

Gravité

Faible

Certaines parties de la sortie du code ont été supprimées pour que l’exemple reste clair et concis.

Générez des procédures et des macros dans JavaScript en ajoutant l’indicateur -t JavaScript ou --PLTargetLanguage JavaScript à votre commande.

Description

Des exceptions existent à la fois dans Oracle et dans Snowflake. Cependant, la fonction RAISE prend en charge les trois tâches : la déclaration, l’affectation et l’élimination de l’erreur. C’est pourquoi la déclaration d’exception apparaît sous forme de commentaire et génère un message d’avertissement.

Exemple de code

Code d’entrée :

-- Additional Params: -t JavaScript
CREATE OR REPLACE PROCEDURE EXCEPTION_DECLARATION_SAMPLE AUTHID DEFINER IS
  NEW_EXCEPTION EXCEPTION;
  PRAGMA EXCEPTION_INIT(NEW_EXCEPTION, -63);
BEGIN

  IF true THEN
    RAISE NEW_EXCEPTION;
  END IF;

EXCEPTION
    WHEN NEW_EXCEPTION THEN
        --Handle Exceptions
END;
Copy

Code de sortie :

CREATE OR REPLACE PROCEDURE EXCEPTION_DECLARATION_SAMPLE ()
RETURNS STRING
LANGUAGE JAVASCRIPT
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "oracle",  "convertedOn": "12/16/2024",  "domain": "test" }}'
EXECUTE AS CALLER
AS
$$
  !!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'PlInvokerRightsClause' NODE ***/!!!
  //AUTHID DEFINER
  null
  // SnowConvert Helpers Code section is omitted.

  try {
    !!!RESOLVE EWI!!! /*** SSC-EWI-OR0052 - EXCEPTION DECLARATION IS HANDLED BY RAISE FUNCTION ***/!!!
    /*   NEW_EXCEPTION EXCEPTION */
    ;
    !!!RESOLVE EWI!!! /*** SSC-EWI-OR0051 - PRAGMA EXCEPTION_INIT IS NOT SUPPORTED ***/!!!
    /*   PRAGMA EXCEPTION_INIT(NEW_EXCEPTION, -63) */
    ;
    if (true) {
      RAISE(-63,`NEW_EXCEPTION`,`NEW_EXCEPTION`);
    }
  } catch(error) {
    switch(error.name) {
      case `NEW_EXCEPTION`: {
        break;
      }
      default: {
        throw error;
        break;
      }
    }
  }
  //Handle Exceptions
  ;
$$;
Copy

Pour une meilleure lisibilité, certaines sections du code de sortie ont été omises.

Recommandations

SSC-EWI-OR0095

Gravité

Faible

Description

Les types de données INTERVAL YEAR TO MONTH et INTERVAL DAY TO SECOND sont convertis en VARCHAR(20) car ils ne sont pas pris en charge. Par conséquent, vous ne pouvez pas effectuer d’opérations arithmétiques entre Type de date et les colonnes qui étaient à l’origine Type d’intervalle.

De plus, lorsque vous effectuez des opérations entre un type d’intervalle et un type de date (spécifiquement dans cette séquence), Snowflake ne prend pas en charge ces opérations et génère ce message EWI.

Exemple de code

Code d’entrée :

CREATE TABLE table_with_intervals
(
    date_col DATE,
    time_col TIMESTAMP,
    intervalYearToMonth_col INTERVAL YEAR TO MONTH,
    intervalDayToSecond_col INTERVAL DAY TO SECOND
);

-- Date + Interval Y to M
SELECT date_col + intervalYearToMonth_col FROM table_with_intervals;

-- Date - Interval D to S
SELECT date_col - intervalDayToSecond_col FROM table_with_intervals;

-- Timestamp + Interval D to S
SELECT time_col + intervalDayToSecond_col FROM table_with_intervals;

-- Timestamp - Interval Y to M
SELECT time_col - intervalYearToMonth_col FROM table_with_intervals;
Copy

Code de sortie :

CREATE OR REPLACE TABLE table_with_intervals
    (
        date_col TIMESTAMP /*** SSC-FDM-OR0042 - DATE TYPE COLUMN HAS A DIFFERENT BEHAVIOR IN SNOWFLAKE. ***/,
        time_col TIMESTAMP(6),
        intervalYearToMonth_col VARCHAR(20) !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - INTERVAL YEAR TO MONTH DATA TYPE CONVERTED TO VARCHAR ***/!!!,
        intervalDayToSecond_col VARCHAR(20) !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - INTERVAL DAY TO SECOND DATA TYPE CONVERTED TO VARCHAR ***/!!!
    )
    COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
    ;

    -- Date + Interval Y to M
    SELECT
    !!!RESOLVE EWI!!! /*** SSC-EWI-OR0095 - OPERATION BETWEEN INTERVAL TYPE AND DATE TYPE NOT SUPPORTED ***/!!! date_col + intervalYearToMonth_col FROM
    table_with_intervals;

    -- Date - Interval D to S
SELECT
    !!!RESOLVE EWI!!! /*** SSC-EWI-OR0095 - OPERATION BETWEEN INTERVAL TYPE AND DATE TYPE NOT SUPPORTED ***/!!! date_col - intervalDayToSecond_col FROM
    table_with_intervals;

    -- Timestamp + Interval D to S
SELECT
    !!!RESOLVE EWI!!! /*** SSC-EWI-OR0095 - OPERATION BETWEEN INTERVAL TYPE AND DATE TYPE NOT SUPPORTED ***/!!! time_col + intervalDayToSecond_col FROM
    table_with_intervals;

    -- Timestamp - Interval Y to M
SELECT
    !!!RESOLVE EWI!!! /*** SSC-EWI-OR0095 - OPERATION BETWEEN INTERVAL TYPE AND DATE TYPE NOT SUPPORTED ***/!!! time_col - intervalYearToMonth_col FROM
    table_with_intervals;
Copy

Recommandations

  • Créez une fonction définie par l’utilisateur (UDF) qui réplique la fonctionnalité d’Oracle.

  • Utilisez la valeur transformée stockée dans la colonne pendant la migration en tant qu”Intervalle constante Snowflake lorsqu’elle est disponible.

  • Pour toute assistance supplémentaire, contactez-nous à l’adresse suivante : snowconvert-support@snowflake.com

SSC-EWI-OR0126

Gravité

Medium

Description

Cette erreur se produit lors de la tentative d’utilisation d’un objet dont le type de données personnalisé est intégré au système.

Exemple de code

Code d’entrée :

CREATE OR REPLACE PROCEDURE proc01 is
   var1 DBMS_SQL.VARCHAR2_TABLE;
   var2 CTX_CLS.DOC_TAB;
BEGIN
   varX := var1.property;
   varY := var2(1);
END;
Copy

Code de sortie :

CREATE OR REPLACE PROCEDURE proc01 ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
   DECLARE
      var1 VARIANT /*** SSC-FDM-0015 - REFERENCED CUSTOM TYPE 'DBMS_SQL.VARCHAR2_TABLE' IN QUERY NOT FOUND, USAGES MAY BE AFFECTED ***/;
      var2 VARIANT /*** SSC-FDM-0015 - REFERENCED CUSTOM TYPE 'CTX_CLS.DOC_TAB' IN QUERY NOT FOUND, USAGES MAY BE AFFECTED ***/;
   BEGIN
      varX := var1.property !!!RESOLVE EWI!!! /*** SSC-EWI-OR0126 - UNUSABLE OBJECT var1, BUILT-IN CUSTOM TYPES ARE NOT SUPPORTED ***/!!!;
      varY := var2(1) !!!RESOLVE EWI!!! /*** SSC-EWI-OR0126 - UNUSABLE OBJECT var2, BUILT-IN CUSTOM TYPES ARE NOT SUPPORTED ***/!!!;
   END;
$$;
Copy

Recommandations

  • Aucune action n’est requise de la part des utilisateurs.

  • Pour une assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com

SSC-EWI-OR0076

Gravité

Medium

Description

La traduction intégrée des paquets n’est pas disponible actuellement.

Exemple de code

Code d’entrée (Oracle) :

SELECT
UTL_RAW.CAST_TO_RAW('some magic here'),
DBMS_UTILITY.GET_TIME
FROM DUAL;
Copy

Code de sortie :

SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0076 - TRANSLATION FOR BUILT-IN PACKAGE 'UTL_RAW.CAST_TO_RAW' IS NOT CURRENTLY SUPPORTED. ***/!!!
'' AS CAST_TO_RAW,
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0076 - TRANSLATION FOR BUILT-IN PACKAGE 'DBMS_UTILITY.GET_TIME' IS NOT CURRENTLY SUPPORTED. ***/!!!
'' AS GET_TIME
FROM DUAL;
Copy

Recommandations

  • Aucune action n’est requise de la part des utilisateurs.

  • Pour une assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com

SSC-EWI-OR0136

Gravité

Critique

Description

Snowflake ne prend pas en charge actuellement la clause CURRENT OF à l’intérieur de la clause WHERE des instructions UPDATE et DELETE.

Exemple de code

Oracle :

CREATE OR REPLACE PROCEDURE proc_update_current_of
AS
  CURSOR C1
  IS
    SELECT * FROM F_EMPLOYEE FOR UPDATE OF SALARY nowait;
BEGIN
  FOR CREC IN C1
  LOOP
    UPDATE F_EMPLOYEE SET SALARY=SALARY+2000 WHERE CURRENT OF C1;
  END LOOP;
END;
Copy

Snowflake Scripting:

CREATE OR REPLACE PROCEDURE proc_update_current_of ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
  DECLARE
    C1 CURSOR
    FOR
      SELECT * FROM
        F_EMPLOYEE
      !!!RESOLVE EWI!!! /*** SSC-EWI-OR0110 - FOR UPDATE CLAUSE IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
      FOR UPDATE OF SALARY nowait;
  BEGIN
      OPEN C1;
      --** SSC-PRF-0004 - THIS STATEMENT HAS USAGES OF CURSOR FOR LOOP **
      FOR CREC IN C1 DO
      !!!RESOLVE EWI!!! /*** SSC-EWI-OR0136 - CURRENT OF CLAUSE IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
      UPDATE F_EMPLOYEE
        SET SALARY=
                   !!!RESOLVE EWI!!! /*** SSC-EWI-OR0036 - TYPES RESOLUTION ISSUES, ARITHMETIC OPERATION '+' MAY NOT BEHAVE CORRECTLY BETWEEN unknown AND Number ***/!!!SALARY+2000 WHERE CURRENT OF C1;
      END FOR;
      CLOSE C1;
  END;
$$;
Copy

EWI apparenté

  1. SSC-EWI-OR0036 : Avertissement : les opérations arithmétiques entre les types de données chaîne et date peuvent produire des résultats inattendus.

  2. SSC-PRF-0004 : ce code contient des boucles basées sur des curseurs qui peuvent avoir un impact sur les performances.

  3. SSC-EWI-OR0110 : la clause FOR UPDATE n’est pas actuellement prise en charge dans Snowflake.

Recommandations

  • Réécrivez la requête à l’aide des instructions standard UPDATE ou DELETE. Incluez des conditions spécifiques aux colonnes dans la clause WHERE. Sachez que si votre table contient des enregistrements en double, la requête peut affecter ces enregistrements plusieurs fois.

  • Pour toute assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com

SSC-EWI-OR0013

Gravité

Medium

Description

Le paramètre NLS (National Language Support) n’est actuellement pas pris en charge pour les fonctions suivantes :

  • Convertir une valeur en chaîne de caractères (TOCHAR)

  • Convertir une valeur en date (TODATE)

  • Convertir une valeur en nombre (TONUMBER)

  • Conversion d’une valeur en horodatage (TOTIMESTAMP)

  • Convertir une valeur dans un type de données spécifié (CAST)

Exemple de code

Code d’entrée :

SELECT TO_NUMBER('-AusDollars100','9G999D99', ' NLS_NUMERIC_CHARACTERS = '',.''NLS_CURRENCY= ''AusDollars''') "Amount" FROM DUAL;
Copy

Code de sortie :

SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0013 - NLS PARAMETER ' NLS_NUMERIC_CHARACTERS = '',.''NLS_CURRENCY= ''AusDollars''' NOT SUPPORTED ***/!!!
 TO_NUMBER('-AusDollars100','9G999D99', ' NLS_NUMERIC_CHARACTERS = '',.''NLS_CURRENCY= ''AusDollars''') "Amount" FROM DUAL;
Copy

Recommandations

  • La fonction TO_NUMBER est transformée en une fonction définie par l’utilisateur (UDF/Stub), ce qui vous permet de personnaliser son comportement en fonction de vos exigences spécifiques en matière de paramètres.

  • Pour toute assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com

SSC-EWI-OR0042

Certaines parties du code de sortie ont été supprimées pour rendre l’exemple plus clair et plus facile à suivre.

Gravité

Faible

Description

Ce message apparaît lorsque SnowConvert détecte une requête contenant une clause MODEL, qui n’est actuellement pas prise en charge par Snowflake.

Exemple de code

Code d’entrée :

SELECT
   employee_id,
   salary
FROM
   employees
MODEL
DIMENSION BY (employee_id)
MEASURES (salary)
();
Copy

Code de sortie :

SELECT
   employee_id,
   salary
FROM
   employees
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0042 - MODEL CLAUSE IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
MODEL
DIMENSION BY (employee_id)
MEASURES (salary)
();
Copy

Recommandations

SSC-EWI-OR0053

Gravité

Medium

Description

Cette erreur se produit lors d’une tentative d’extraction de données à l’aide d’un format d’entrée incorrect. En conséquence, le code est commenté et ce message s’affiche.

Exemple de code :

Code d’entrée :

SELECT CAST('12sdsd3,456E+40' AS NUMBER, '999,999EEE') FROM DUAL;
SELECT CAST('12345sdsd' AS NUMBER, '99999') FROM DUAL;
Copy

Code de sortie :

SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0053 - INCORRECT INPUT FORMAT '12sdsd3,456E+40' ***/!!!
 CAST('12sdsd3,456E+40' AS NUMBER(38, 18) , '999,999EEE') FROM DUAL;

SELECT
 !!!RESOLVE EWI!!! /*** SSC-EWI-OR0053 - INCORRECT INPUT FORMAT '12345sdsd' ***/!!! CAST('12345sdsd' AS NUMBER(38, 18) , '99999') FROM DUAL;
Copy

Recommandations

  • Aucune action n’est requise de votre part.

  • Pour une assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com

SSC-EWI-OR0002

Certaines parties du code de sortie ont été supprimées pour rendre l’exemple plus clair et plus facile à suivre.

Gravité

Élevé

Description

Cette erreur se produit lorsque le système ne peut pas résoudre les colonnes d’une expression de sélection. Cela se produit généralement dans deux cas de figure :

  1. Lorsqu’on fait référence à un accès de type qui n’a pas été résolu

  2. Lorsque vous essayez d’accéder aux colonnes d’un type défini par l’utilisateur qui n’a pas de définition de colonne (tel qu’un type sans corps ou un type d’objet vide)

Exemple de code

Code d’entrée :

CREATE OR REPLACE PROCEDURE record_unknown_table_proc
AS
    unknownTable_variable_rowtype unknownTable%ROWTYPE;
BEGIN
    INSERT INTO MyTable values unknownTable_variable_rowtype;
END;
Copy

Code de sortie :

CREATE OR REPLACE PROCEDURE record_unknown_table_proc ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
    DECLARE
        unknownTable_variable_rowtype OBJECT !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - ROWTYPE DATA TYPE CONVERTED TO OBJECT ***/!!! := OBJECT_CONSTRUCT();
    BEGIN
        INSERT INTO MyTable
        SELECT
            null !!!RESOLVE EWI!!! /*** SSC-EWI-OR0002 - COLUMNS FROM EXPRESSION unknownTable%ROWTYPE NOT FOUND ***/!!!;
    END;
$$;
Copy

Recommandations

  • Vérifiez si la définition du type référencé contient des définitions de colonnes.

  • Pour toute assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com

SSC-EWI-OR0036

Gravité

Faible

Description

Cette erreur se produit lorsque deux types de données incompatibles sont utilisés dans une opération arithmétique, ce qui peut entraîner des résultats inattendus.

Exemple de code

Code d’entrée :

SELECT
    SYSDATE,
    SYSDATE + '1',
    SYSDATE + 'A'
from
    dual;
Copy

Code de sortie :

SELECT
    CURRENT_TIMESTAMP(),
    !!!RESOLVE EWI!!! /*** SSC-EWI-OR0036 - TYPES RESOLUTION ISSUES, ARITHMETIC OPERATION '+' MAY NOT BEHAVE CORRECTLY BETWEEN Date AND String ***/!!!
    CURRENT_TIMESTAMP() + '1',
    !!!RESOLVE EWI!!! /*** SSC-EWI-OR0036 - TYPES RESOLUTION ISSUES, ARITHMETIC OPERATION '+' MAY NOT BEHAVE CORRECTLY BETWEEN Date AND String ***/!!!
    CURRENT_TIMESTAMP() + 'A'
from
    dual;
Copy

Lorsque vous effectuez des opérations entre les types de données Chaîne et Date, sachez que les résultats peuvent être inattendus ou incorrects. Il est recommandé de convertir la chaîne en un type de date avant d’effectuer toute opération liée à la date.

Recommandations

  • Aucune action n’est requise de votre part.

  • Pour une assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com

SSC-EWI-OR0067

Gravité

Modéré

Certaines parties du code ont été omises pour que l’exemple reste clair et concis.

Description

Snowflake ne vous permet pas de définir plusieurs contraintes dans une seule instruction ALTER TABLE.

Exemple de code

Oracle :

ALTER TABLE TABLE1 ADD (
  CONSTRAINT TABLE1_PK
  PRIMARY KEY
  (ID)
  ENABLE VALIDATE,
  CONSTRAINT TABLE1_FK foreign key(ID2)
  references TABLE2 (ID) ON DELETE CASCADE);
Copy

Snowflake Scripting:

!!!RESOLVE EWI!!! /*** SSC-EWI-OR0067 - MULTIPLE CONSTRAINT DEFINITION IN A SINGLE STATEMENT IS NOT SUPPORTED IN SNOWFLAKE. ***/!!!
ALTER TABLE TABLE1
ADD (
  CONSTRAINT TABLE1_PK
  PRIMARY KEY
  (ID) ,
  CONSTRAINT TABLE1_FK foreign key(ID2)
  references TABLE2 (ID) ON DELETE CASCADE);
Copy

Recommandations

  • Aucune action n’est requise de la part des utilisateurs finaux.

  • Pour une assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com

SSC-EWI-OR0026

Certaines parties du code de sortie ont été supprimées pour rendre l’exemple plus clair et plus facile à suivre.

Gravité

Medium

Description

L’instruction ROWID n’est actuellement pas prise en charge dans cette version.

Exemple de code

Oracle :

SELECT QUERY_NAME.ROWID from TABLE1;
Copy

Snowflake Scripting:

SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0026 - ROWID NOT SUPPORTED ***/!!!
 QUERY_NAME.ROWID from
 TABLE1;
Copy

Recommandations

SSC-EWI-OR0103

Gravité

Élevé

Description

Snowflake Scripting pour les instructions FOR LOOP est limitée par rapport à celui d’Oracle. Alors qu’Oracle prend en charge plusieurs types de conditions (telles que les expressions booléennes, les collections et les enregistrements), Snowflake n’autorise que FOR LOOP avec des plages d’entiers comme limites. Tout autre format de boucle sera marqué comme non pris en charge et devra être converti manuellement.

Clauses de contrôle d’itération Oracle que FOR LOOP de Snowflake ne prend pas en charge :

  • single_expression_control : évalue une seule expression

  • values_of_control : traite les valeurs individuelles d’une collection

  • indices_of_control : itère à travers les index d’un tableau

  • pairs_of_control : traite les paires clé-valeur d’une collection

La fonction cursor_iteration_control n’est pas prise en charge actuellement. Cependant, vous pouvez la convertir en CURSOR FOR LOOP en supprimant les parenthèses de l’expression.

FOR i IN (cursor_variable) LOOP NULL ; END LOOP ;

Doit être remplacé par :

FOR i IN cursor_variable LOOP NULL ; END LOOP ;

Exemple de code

Code d’entrée Oracle :

CREATE OR REPLACE PROCEDURE P3
AS
TYPE values_aat IS TABLE OF PLS_INTEGER INDEX BY PLS_INTEGER;
l_employee_values   values_aat;
BEGIN
FOR power IN REPEAT power*2 WHILE power <= 64 LOOP
    NULL;
END LOOP;

FOR i IN VALUES OF l_employee_values LOOP
    NULL;
END LOOP;
END;
Copy

Code de sortie :

CREATE OR REPLACE PROCEDURE P3 ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
    DECLARE
--        !!!RESOLVE EWI!!! /*** SSC-EWI-0058 - FUNCTIONALITY FOR 'PL COLLECTION TYPE DEFINITION' IS NOT CURRENTLY SUPPORTED BY SNOWFLAKE SCRIPTING ***/!!!
--        TYPE values_aat IS TABLE OF PLS_INTEGER INDEX BY PLS_INTEGER;
        l_employee_values VARIANT !!!RESOLVE EWI!!! /*** SSC-EWI-0062 - CUSTOM TYPE 'values_aat' USAGE CHANGED TO VARIANT ***/!!!;
    BEGIN
        !!!RESOLVE EWI!!! /*** SSC-EWI-OR0103 - FOR LOOP FORMAT IS CURRENTLY NOT SUPPORTED BY SNOWFLAKE SCRIPTING ***/!!!!!!RESOLVE EWI!!! /*** SSC-EWI-OR0101 - FOR LOOP WITH "WHILE" CLAUSE IS CURRENTLY NOT SUPPORTED BY SNOWFLAKE SCRIPTING ***/!!!
        FOR power IN REPEAT power*2 WHILE power <= 64 LOOP
            NULL;
        END LOOP;
        !!!RESOLVE EWI!!! /*** SSC-EWI-OR0103 - FOR LOOP FORMAT IS CURRENTLY NOT SUPPORTED BY SNOWFLAKE SCRIPTING ***/!!!

        FOR i IN VALUES OF :l_employee_values LOOP
            NULL;
        END LOOP;
    END;
$$;
Copy

Recommandations

  • Modifiez la condition FOR LOOP ou sélectionnez un autre type LOOP pour obtenir le même résultat.

  • Pour toute assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com

SSC-EWI-OR0090

Gravité

Medium

Certaines parties de la sortie du code ont été supprimées pour faciliter la compréhension.

Description

Cette erreur se produit lors de l’utilisation d’un OUTER JOIN de style Oracle avec l’opérateur (+) dans une clause BETWEEN contenant plusieurs tables. Snowflake ne prend pas en charge cette combinaison de syntaxe spécifique. Le problème se pose en particulier lorsque la clause BETWEEN fait référence à des colonnes provenant de tables différentes.

Exemple de code

Code d’entrée Oracle :

SELECT
*
FROM
hr.countries c, hr.regions r,  hr.locations l WHERE
l.location_id  BETWEEN r.region_id(+) AND c.region_id(+);
Copy

Code de sortie :

SELECT
*
FROM
hr.countries c,
hr.regions r,
hr.locations l WHERE
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0090 - INVALID NON-ANSI OUTER JOIN BETWEEN PREDICATE CASE FOR SNOWFLAKE. ***/!!!
l.location_id  BETWEEN r.region_id(+) AND c.region_id(+);
Copy

Recommandations

  • Convertissez manuellement la syntaxe Outer Join en syntaxe ANSI.

  • Pour toute assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com

SSC-EWI-OR0123

Gravité

Medium

Description

Une référence à un lien de base de données a été supprimée du nom de l’objet car Snowflake ne prend pas en charge les liens de base de données. Seule la partie du nom précédant le symbole @ est conservée.

Exemple de code

Code d’entrée :

-- Creation of the database link
CREATE DATABASE LINK mylink
    CONNECT TO user1 IDENTIFIED BY password1
    USING 'connection_str';

-- Statements that use the database link we created
SELECT * FROM employees@mylink;

INSERT INTO employees@mylink
    (employee_id, last_name, email, hire_date, job_id)
    VALUES (999, 'Claus', 'sclaus@oracle.com', SYSDATE, 'SH_CLERK');

UPDATE employees@mylink SET min_salary = 3000
    WHERE job_id = 'SH_CLERK';

DELETE FROM employees@mylink
    WHERE employee_id = 999;
Copy

Code de sortie :

- Creation of the database link
-** SSC-OOS - OUT OF SCOPE CODE UNIT. CREATE DATABASE LINK IS OUT OF TRANSLATION SCOPE. **
--CREATE DATABASE LINK mylink
--    CONNECT TO user1 IDENTIFIED BY password1
--    USING 'connection_str'

    -- Statements that use the database link we created
SELECT * FROM
    !!!RESOLVE EWI!!! /*** SSC-EWI-OR0123 - DBLINK CONNECTIONS NOT SUPPORTED [ DBLINK : mylink | USER: user1/password1 | CONNECTION: 'connection_str' ] ***/!!!
    employees;

INSERT INTO
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0123 - DBLINK CONNECTIONS NOT SUPPORTED [ DBLINK : mylink | USER: user1/password1 | CONNECTION: 'connection_str' ] ***/!!!
employees
    (employee_id, last_name, email, hire_date, job_id)
    VALUES (999, 'Claus', 'sclaus@oracle.com', CURRENT_TIMESTAMP(), 'SH_CLERK');

UPDATE
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0123 - DBLINK CONNECTIONS NOT SUPPORTED [ DBLINK : mylink | USER: user1/password1 | CONNECTION: 'connection_str' ] ***/!!!
employees
    SET min_salary = 3000
    WHERE job_id = 'SH_CLERK';

DELETE FROM
    !!!RESOLVE EWI!!! /*** SSC-EWI-OR0123 - DBLINK CONNECTIONS NOT SUPPORTED [ DBLINK : mylink | USER: user1/password1 | CONNECTION: 'connection_str' ] ***/!!!
    employees
    WHERE employee_id = 999;
Copy

Recommandations

  • Veillez à ce que tous les liens de la base de données aient un nom unique. Si plusieurs liens de base de données portent le même nom et que le code est migré plusieurs fois, l’interface Web externe (EWI) peut traiter les informations de manière incorrecte en fonction du lien de base de données traité en premier.

  • Déplacez les objets de la base de données référencés par les liens de base de données vers la même instance de base de données Snowflake que celle que vous utilisez.

  • Pour une assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com

SSC-EWI-OR0032

Gravité

Medium

Description

Cette erreur se produit lorsque vous tentez d’utiliser un paramètre non pris en charge dans une fonction.

Exemple de code

Code d’entrée :

SELECT TO_CHAR(DATE '1998-12-25', 'AM') FROM DUAL;
Copy

Code de sortie :

SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0032 - PARAMETER USED IN THE FUNCTION 'TO_CHAR' WITH FORMAT AM IS NOT SUPPORTED ***/!!!
 TO_CHAR(DATE '1998-12-25', 'AM') FROM DUAL;
Copy

Recommandations

  • La fonction est convertie en modèle de fonction définie par l’utilisateur (UDF) que vous pouvez personnaliser en fonction du comportement du paramètre.

  • Pour toute assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com

SSC-EWI-OR0006

Cet EWI n’est plus utilisé. Veuillez consulter la documentation SSC-FDM-OR0047 pour obtenir des informations à jour.

Gravité

Faible

Description

Le paramètre de session TIMESTAMP_OUTPUT_FORMAT doit être défini sur “DD-MON-YY HH24.MI.SS.FF AM TZH:TZM” pour garantir l’affichage des horodatages dans le bon format et maintenir l’équivalence entre les systèmes.

Exemple de code

Code d’entrée :

SELECT SYSTIMESTAMP FROM DUAL;
Copy

Exemple de sortie par défaut de TIMESTAMP dans Oracle

January 13, 2021 04:18:37.288656 PM UTC

Code de sortie :

SELECT
CURRENT_TIMESTAMP() !!!RESOLVE EWI!!! /*** SSC-EWI-OR0006 - YOU MAY NEED TO SET TIMESTAMP OUTPUT FORMAT ('DD-MON-YY HH24.MI.SS.FF AM TZH:TZM') ***/!!!
FROM DUAL;
Copy

Exemple de sortie par défaut de TIMESTAMP dans Snowflake

2021-01-13 08:18:19.720 -080

Recommandations

Pour modifier l’affichage des horodatages dans Snowflake, exécutez cette requête :

ALTER SESSION SET TIMESTAMP_OUTPUT_FORMAT = 'DD-MON-YY HH24.MI.SS.FF AM TZH:TZM';
Copy

SSC-EWI-OR0057

Gravité

Critique

Certaines parties de la sortie du code ont été supprimées pour faciliter la compréhension.

Description

Les procédures ou fonctions imbriquées (procédures/fonctions définies à l’intérieur d’autres procédures/fonctions) ne peuvent pas être traduites pour le moment. Cette fonction sera disponible dans une prochaine version.

Exemple de code

Code d’entrée :

CREATE OR REPLACE function FOO1 RETURN INTEGER AS
    FUNCTION FOO2 return integer;
    FUNCTION FOO2 RETURN INTEGER AS
    BEGIN
        RETURN 123;
    END;
BEGIN
    RETURN FOO2() + 456;
END;
Copy

Code de sortie :

--** SSC-FDM-0029 - USER DEFINED FUNCTION WAS TRANSFORMED TO SNOWFLAKE PROCEDURE **
!!!RESOLVE EWI!!! /*** SSC-EWI-0046 - NESTED FUNCTION/PROCEDURE DECLARATIONS ARE NOT SUPPORTED IN SNOWFLAKE. ***/!!!
CREATE OR REPLACE PROCEDURE FOO1 ()
RETURNS INTEGER
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
    DECLARE
        !!!RESOLVE EWI!!! /*** SSC-EWI-OR0057 - TRANSFORMATION FOR NESTED PROCEDURE OR FUNCTION IS NOT SUPPORTED ***/!!!
        FUNCTION FOO2 return integer;
        !!!RESOLVE EWI!!! /*** SSC-EWI-OR0057 - TRANSFORMATION FOR NESTED PROCEDURE OR FUNCTION IS NOT SUPPORTED ***/!!!
        FUNCTION FOO2 RETURN INTEGER AS
        BEGIN
           RETURN 123;
        END;
    BEGIN
        RETURN FOO2() + 456;
    END;
$$;
Copy

Recommandations

  • Aucune action n’est requise de la part des utilisateurs finaux.

  • Pour une assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com

SSC-EWI-OR0047

Gravité

Faible

Certaines parties du code ont été omises pour que l’exemple reste clair et concis.

Description

Cet avertissement apparaît lorsque la fonction TO_NCHAR d’Oracle a été convertie en fonction TO_VARCHAR de Snowflake au cours du processus de migration.

Il peut arriver que la transformation du code entraîne des erreurs de compilation ou produise une sortie inattendue qui diffère de l’original.

Exemple de code

Code d’entrée :

select TO_NCHAR(sysdate,'DY','nls_date_language=english') from dual
Copy

Code de sortie :

select
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0047 - TO_NCHAR TRANSFORMED TO TO_VARCHAR, IT MAY NOT BE COMPILABLE IN SNOWFLAKE ***/!!!
TO_VARCHAR(CURRENT_TIMESTAMP(),'DY','nls_date_language=english') from dual;
Copy

Le code présenté précédemment génère une erreur lorsqu’il est exécuté dans Snowflake.

Tous les scénarios ne donnent pas lieu à des erreurs.

Code d’entrée :

SELECT TO_NCHAR(SYSDATE, 'YYYY-MM-DD') FROM dual;
Copy

Code de sortie :

SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0047 - TO_NCHAR TRANSFORMED TO TO_VARCHAR, IT MAY NOT BE COMPILABLE IN SNOWFLAKE ***/!!!
TO_VARCHAR(CURRENT_TIMESTAMP(), 'YYYY-MM-DD') FROM dual;
Copy

L’exemple final s’exécute avec succès dans Snowflake et produit la même sortie lors de l’exécution.

Recommandations

  • Aucune action n’est requise de votre part.

  • Pour une assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com

SSC-EWI-OR0016

Gravité

Medium

Description

Les fonctions XML énumérées ci-dessous ne sont pas prises en charge actuellement :

  • La fonction EXTRACT permet de récupérer les données des documents XML

  • EXTRACTVALUE récupère des valeurs spécifiques à partir des éléments XML

  • XMLSEQUENCE convertit les données XML en format de table

  • XMLTYPE définit un type de données pour le stockage du contenu XML

Exemple de code

Code d’entrée :

select * from table(XMLSequence(XMLType('
<Product ProductCode="200">
 <BrandName>Notebook</BrandName>
 <ProductList>
  <Item ItemNo="200A"><Price>900</Price></Item>
  <Item ItemNo="200B"><Price>700</Price></Item>
  <Item ItemNo="200C"><Price>650</Price></Item>
  <Item ItemNo="200D"><<Price>750</Price></Item>
</ProductList>
</Product>')));
Copy

Code de sortie :

select * from table(
                    !!!RESOLVE EWI!!! /*** SSC-EWI-OR0016 - FUNCTION RELATED WITH XML NOT SUPPORTED ***/!!!
XMLSequence(
            !!!RESOLVE EWI!!! /*** SSC-EWI-OR0016 - FUNCTION RELATED WITH XML NOT SUPPORTED ***/!!!XMLType('
<Product ProductCode="200">
 <BrandName>Notebook</BrandName>
 <ProductList>
  <Item ItemNo="200A"><Price>900</Price></Item>
  <Item ItemNo="200B"><Price>700</Price></Item>
  <Item ItemNo="200C"><Price>650</Price></Item>
  <Item ItemNo="200D"><<Price>750</Price></Item>
</ProductList>
</Product>')));
Copy

Recommandations

SSC-EWI-OR0133

Gravité

Medium

Description

Lors de la conversion d’une instruction OPEN FOR, SC crée une affectation de curseur utilisant le même nom que la variable de curseur d’origine, ainsi que des instructions supplémentaires pour répliquer son comportement. Toutefois, si le code d’origine contient plusieurs instructions OPEN FOR utilisant la même variable curseur, le code converti comportera plusieurs affectations de curseur avec des noms identiques. Cela entraînera des erreurs de compilation dans Snowflake.

Exemple de code

Code d’entrée

CREATE OR REPLACE PROCEDURE open_for_procedure
AS
	query1 VARCHAR(200) := 'SELECT 123 FROM dual';
	query2 VARCHAR(200) := 'SELECT 456 FROM dual';
	my_cursor_variable SYS_REFCURSOR;
BEGIN
	OPEN my_cursor_variable FOR query1;
	OPEN my_cursor_variable FOR query2;
END;
Copy

Code de sortie

CREATE OR REPLACE PROCEDURE open_for_procedure ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
	DECLARE
		query1 VARCHAR(200) := 'SELECT 123 FROM dual';
		query2 VARCHAR(200) := 'SELECT 456 FROM dual';
		my_cursor_variable_res RESULTSET;
	BEGIN
		!!!RESOLVE EWI!!! /*** SSC-EWI-0030 - THE STATEMENT BELOW HAS USAGES OF DYNAMIC SQL. ***/!!!
		my_cursor_variable_res := (
			EXECUTE IMMEDIATE :query1
		);
		LET my_cursor_variable CURSOR
		FOR
			my_cursor_variable_res;
		OPEN my_cursor_variable;
		!!!RESOLVE EWI!!! /*** SSC-EWI-0030 - THE STATEMENT BELOW HAS USAGES OF DYNAMIC SQL. ***/!!!
		my_cursor_variable_res := (
			EXECUTE IMMEDIATE :query2
		);
		!!!RESOLVE EWI!!! /*** SSC-EWI-OR0133 - THE CURSOR VARIABLE NAMED 'my_cursor_variable' HAS ALREADY BEEN ASSIGNED IN ANOTHER CURSOR ***/!!!
		LET my_cursor_variable CURSOR
		FOR
			my_cursor_variable_res;
		OPEN my_cursor_variable;
	END;
$$;
Copy

EWI apparenté

  1. SSC-EWI-0030 : une dynamique SQL est détectée dans l’instruction suivante.

Recommandations

  • Pour corriger les erreurs de compilation dans le code de sortie, renommez toutes les affectations de curseur qui affichent le message d’erreur SSC-EWI-OR0133.

  • Pour toute assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com