SnowConvert AI - Différences fonctionnelles Oracle

SSC-FDM-OR0001

Note

Ce FDM a été ajouté pour une ancienne version de SnowConvert AI Oracle. Actuellement, il est obsolète.

Description

Cette erreur est liée au fichier de rapport Assessment. Elle apparaît lorsqu’une erreur se produit lors de l’écriture du fichier de rapport des détails de l’évaluation.

Meilleures pratiques

SSC-FDM-OR0002

La valeur de début de la séquence dépasse la valeur maximale autorisée par Snowflake.

Note

Ce FDM est obsolète. Veuillez vous référer à la documentation SSC-EWI-OR0068

Description

Cette erreur apparaît lorsque la valeur de l’instruction START WITH dépasse la valeur maximale autorisée par Snowflake. Ce que Snowflake dit à propos de la valeur de départ est : Spécifie la première valeur retournée par la séquence. Les valeurs prises en charge sont n’importe quelle valeur qui peut être représentée par un entier de complément à deux de 64 bits (de -2^63 à 2^63-1). Ainsi, selon ce qui a été mentionné précédemment, la valeur maximale autorisée est 9223372036854775807 pour les nombres positifs et 9223372036854775808 pour les nombres négatifs.

Exemple de code

Code d’entrée :
 CREATE SEQUENCE SEQUENCE1
START WITH 9223372036854775808;
Copy
 CREATE SEQUENCE SEQUENCE2
START WITH -9223372036854775809;
Copy
Code généré :
 CREATE OR REPLACE SEQUENCE SEQUENCE1
--** SSC-FDM-OR0002 - 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
--** SSC-FDM-OR0002 - 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

Meilleures pratiques

  • Il peut être recommandé de simplement réinitialiser la séquence et de modifier également son utilisation. NOTE : la colonne cible doit disposer d’un espace suffisant pour contenir cette valeur.

  • Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.

SSC-FDM-OR0003

Suppression de la clause de recherche de l’instruction with element.

Note

Ce FDM est obsolète. Veuillez vous référer à la documentation SSC-EWI-OR0038

Description

La search_clause est utilisée pour définir l’ordre dans lequel les lignes sont traitées dans une instruction SELECT. Cette fonctionnalité permet un parcours personnalisé des données, garantissant que les résultats sont renvoyés dans une séquence spécifique en fonction des critères spécifiés. Cependant, il est important de noter que ce comportement, caractérisé par la search_clause, n’est pas pris en charge dans Snowflake.

Dans les bases de données telles que Oracle, la search_clause est couramment utilisée en conjonction avec des requêtes récursives ou des expressions de table communes (CTEs) pour influencer la séquence dans laquelle les données hiérarchiques sont explorées. En désignant une colonne ou un ensemble de colonnes spécifique dans la search_clause, vous pouvez contrôler le parcours en profondeur d’abord ou en largeur d’abord de la hiérarchie, ce qui a un impact sur l’ordre dans lequel les lignes sont traitées.

Dans Snowflake, un message search_clause sera généré, et la search_clause sera ensuite supprimée.

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 généré :
 WITH dup_hiredate(eid, emp_last, mgr_id, reportLevel, hire_date, job_id) AS
(
SELECT aValue from
atable
) /*** SSC-FDM-OR0003 - SEARCH CLAUSE REMOVED FROM THE WITH ELEMENT STATEMENT ***/
SELECT aValue from
atable;
Copy

Recommandation

  • Aucune autre action de l’utilisateur n’est requise.

  • Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.

SSC-FDM-OR0004

Mot clé siblings supprimé de la clause order by, car Snowflake ne le prend pas en charge.

Description

Dans Oracle, la clause ORDER BY SIBLINGS peut être utilisée dans les requêtes hiérarchiques pour préserver l’ordre des données fourni par la hiérarchie, tout en appliquant une réorganisation des valeurs qui sont des éléments de même niveau dans la même hiérarchie. Celle-ci n’est pas prise en charge dans Snowflake.

Exemple de code

Code d’entrée :
 SELECT LEVEL,
       LPAD(' ', 2 * (LEVEL - 1)) || NAME AS FORMATTED_NAME,
       JOB_TITLE
FROM EMPLOYEES
START WITH MANAGER_ID IS NULL
CONNECT BY PRIOR EMPLOYEE_ID = MANAGER_ID
ORDER SIBLINGS BY NAME;
Copy
Code généré :
 SELECT LEVEL,
       NVL(
       LPAD(' ', 2 * (
                      !!!RESOLVE EWI!!! /*** SSC-EWI-OR0036 - TYPES RESOLUTION ISSUES, ARITHMETIC OPERATION '-' MAY NOT BEHAVE CORRECTLY BETWEEN unknown AND Number ***/!!!LEVEL - 1)) :: STRING, '') || NVL(NAME :: STRING, '') AS FORMATTED_NAME,
       JOB_TITLE
FROM
       EMPLOYEES
START WITH MANAGER_ID IS NULL
CONNECT BY
       PRIOR EMPLOYEE_ID = MANAGER_ID
ORDER BY
       NAME /*** SSC-FDM-OR0004 - SIBLINGS KEYWORD REMOVED FROM ORDER BY CLAUSE BECAUSE SNOWFLAKE DOES NOT SUPPORT IT ***/;
Copy
  • Bien que vous ne puissiez pas obtenir exactement le même ordre qu’avec la clause SIBLINGS, il existe quelques alternatives pour obtenir un résultat similaire.

    • Intégrez la requête dans une requête externe qui applique le tri souhaité à l’aide d’ORDER BY.

    • Créez une CTE avec la requête hiérarchique à l’aide de CONNECT BY et faites référence à la CTE dans une requête ultérieure pour appliquer ORDER BY au tri entre éléments de même niveau (lignes au même niveau).

  • Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.

SSC-FDM-OR0005

Les synonymes ne sont pas pris en charge dans Snowflake, mais les références à ce synonyme ont été modifiées par le nom d’objet d’origine.

Description

Les synonymes ne sont pas pris en charge dans Snowflake. Les synonymes sont remplacés par le nom d’origine.

Exemple de code

Code d’entrée :
 CREATE TABLE TABLE1
(
    COLUMN1 NUMBER
);

CREATE OR REPLACE SYNONYM B.TABLE1_SYNONYM FOR TABLE1;
SELECT * FROM B.TABLE1_SYNONYM WHERE B.TABLE1_SYNONYM.COLUMN1 = 20;
Copy
Code généré :
 CREATE OR REPLACE TABLE TABLE1
    (
        COLUMN1 NUMBER(38, 18) /*** 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"}}'
    ;

--    --** SSC-FDM-OR0005 - SYNONYMS NOT SUPPORTED IN SNOWFLAKE BUT REFERENCES TO THIS SYNONYM WERE CHANGED BY THE ORIGINAL OBJECT NAME. **

--    CREATE OR REPLACE SYNONYM B.TABLE1_SYNONYM FOR TABLE1
                                                         ;
SELECT * FROM
    TABLE1
    WHERE
    TABLE1.COLUMN1 = 20;
Copy

Meilleures pratiques

  • Aucune autre action de l’utilisateur n’est requise.

  • Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.

SSC-FDM-OR0006

État de contrainte supprimé de la contrainte en ligne not null.

Description

Cet avertissement apparaît lorsque la contrainte de colonne not null contient l’un des états de contrainte Oracle suivants dans le cadre de la définition en ligne de la colonne:

 [ RELY | NORELY | RELY DISABLE | RELY ENABLE | VALIDATE | NOVALIDATE ]
Copy

Snowflake ne prend pas en charge ces états. Par conséquent, ils seront supprimés de la contrainte en ligne NOT NULL.

Exemple de code

Code d’entrée :
 CREATE TABLE Table1(
  col1 INT NOT NULL RELY
);
Copy
Code généré :
 CREATE OR REPLACE TABLE Table1 (
    col1 INT NOT NULL /*** SSC-FDM-OR0006 - CONSTRAINT STATE RELY REMOVED FROM NOT NULL INLINE CONSTRAINT ***/
  )
  COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
  ;
Copy

Meilleures pratiques

  • Aucune autre action de l’utilisateur n’est requise.

  • Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.

SSC-FDM-OR0007

Snowflake ne prend pas en charge la gestion des versions des objets. Les développeurs doivent envisager d’autres approches pour la gestion des versions du code.

Description

Snowflake ne prend pas en charge la gestion des versions des objets. Le modificateur EDITINONABLE ou NONEDITIONABLE est supprimé dans le code converti et un avertissement est ajouté.

Exemple de code

Code d’entrée :
 CREATE OR REPLACE EDITIONABLE PROCEDURE FUN1 (n number)is
l_result number;
begin
    DELETE FROM employees;
end;
Copy
Code généré :
 --** SSC-FDM-OR0007 - SNOWFLAKE DOESN'T SUPPORT VERSIONING OF OBJECTS. DEVELOPERS SHOULD CONSIDER ALTERNATE APPROACHES FOR CODE VERSIONING. **
CREATE OR REPLACE PROCEDURE FUN1 (n NUMBER(38, 18))
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
    DECLARE
        l_result NUMBER(38, 18);
    BEGIN
        DELETE FROM
            employees;
    END;
$$;
Copy

Meilleures pratiques

  • L’utilisateur doit envisager d’autres approches pour la gestion des versions du code.

  • Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.

SSC-FDM-OR0008

Set Quantifier non pris en charge

Note

Ce FDM est obsolète. Veuillez vous référer à la documentation SSC-EWI-OR0071

Description

Le quantificateur « all » n’est pas pris en charge dans Snowflake. Le modificateur est supprimé du code source et un avertissement est ajouté. Le code résultant peut se comporter de manière inattendue.

Exemple de code

Code d’entrée :
 SELECT location_id  FROM locations 
MINUS ALL 
SELECT location_id  FROM departments;
Copy
Code généré :
 SELECT location_id  FROM
locations
--** SSC-FDM-OR0008 - 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 supprimeront toujours les valeurs en double.

Meilleures pratiques

  • Vérifiez les alternatives dans Snowflake pour émuler la fonctionnalité du quantificateur « all ».

  • Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.

SSC-FDM-OR0009

Les valeurs SQL implicites du curseur peuvent différer.

Description

Note

Générez des procédures et des macros à l’aide de JavasScript comme langage cible en ajoutant l’indicateur -t JavaScript ou --PLTargetLanguage JavaScript suivant.

Note

Certaines parties du code de sortie sont omises pour des raisons de clarté.

Cet EWI est affiché lorsque la valeur SQL implicite du curseur est utilisée. En effet, Oracle utilise des valeurs différentes selon le type de requête. Par exemple, pour SELECT, la valeur utilisée pour définir les valeurs SQL implicites du curseur sont le nombre de lignes retournées par la requête. Lorsque le type de requête est UPDATE/CREATE/DELETE/INSERT, la valeur utilisée est le nombre de lignes affectées. Il s’agit de la principale raison pour laquelle cet EWI s’affiche.

Exemple de code

Code d’entrée :
-- Additional Params: -t JavaScript
--Transformation for implicit cursor
CREATE OR REPLACE PROCEDURE SP_SAMPLE AUTHID DEFINER IS
  stmt_no  POSITIVE;
BEGIN
  IF SQL%ROWCOUNT = 0 THEN
   EXIT ;
  END IF;
  IF SQL%ISOPEN THEN
   EXIT ;
  END IF;
  IF SQL%FOUND THEN
   EXIT ;
  END IF;
  IF SQL%NOTFOUND THEN
   EXIT ;
  END IF;
END;
Code généré :
 -- Additional Params: -t JavaScript
--Transformation for implicit cursor
CREATE OR REPLACE PROCEDURE SP_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 AI Helpers Code section is omitted.

  let STMT_NO = new POSITIVE();
  if (SQL.ROWCOUNT /*** SSC-FDM-OR0009 - SQL IMPLICIT CURSOR VALUES MAY DIFFER ***/ == 0) {
    break;
  }
  if (SQL.ISOPEN) {
    break;
  }
  if (SQL.FOUND) {
    break;
  }
  if (SQL.NOTFOUND) {
    break;
  }
$$;
Copy

Meilleures pratiques

  • Aucune autre action de l’utilisateur n’est requise.

  • Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.

SSC-FDM-OR0010

La précision inférieure du type de données NUMBER a été augmentée pour correspondre à l’échelle.

Description

Le type de données NUMBER stocke les nombres fixes et à virgule flottante. Ces données sont portables entre les différents systèmes d’exploitation exécutant la base de données Oracle. Le type de données NUMBER est recommandé pour la plupart des cas dans lesquels vous devez stocker des données numériques. La syntaxe est NUMBER (X, Y), où X correspond à la précision et Y correspond à l’échelle.

Par exemple, NUMBER(5, 3) est un nombre qui possède 2 chiffres avant la décimale et 3 chiffres après la décimale, comme suit:

12.345

Copy

Autres considérations importantes :

  1. L’échelle Y spécifie le nombre maximum de chiffres à droite de la virgule décimale.

  2. La précision d’échelle YX spécifie le nombre minimum de zéros présents après le point décimal.

Ce message s’affiche lorsqu’un NUMBER possède une précision inférieure à son échelle. Snowflake ne prend pas en charge cette fonctionnalité, et ce message est utilisé pour indiquer que la valeur de la précision a été augmentée pour maintenir l’équivalence.

Remarque

Veuillez noter qu’il existe des cas où ce problème peut soit s’ajouter à d’autres transformations connues, soit ne pas se produire du tout. Par exemple, dans les cas où l’échelle est remplacée par neuf et où la précision antérieure est supérieure à neuf, ce message ne s’affichera NOT.

Exemple de code

Code d’entrée :
Requêtes
 CREATE TABLE SampleNumberTable(Col1 NUMBER(4, 5));

INSERT INTO SampleNumberTable (Col1)
VALUES (0.00009);

INSERT INTO SampleNumberTable (Col1)
VALUES (0.000021);

INSERT INTO SampleNumberTable (Col1)
VALUES (0.012678912);

SELECT * FROM SampleNumberTable;
Copy
Résultat
Col1   |
-------+
0.00009|
0.00002|
0.01268|

Copy
Code généré :
Requêtes
 CREATE OR REPLACE TABLE SampleNumberTable (Col1 NUMBER(5, 5) /*** SSC-FDM-OR0010 - NUMBER DATATYPE SMALLER PRECISION WAS INCREASED TO MATCH SCALE ***/ /*** SSC-FDM-0006 - NUMBER TYPE COLUMN MAY NOT BEHAVE SIMILARLY IN SNOWFLAKE. ***/
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;

INSERT INTO SampleNumberTable(Col1)
VALUES (0.00009);

INSERT INTO SampleNumberTable(Col1)
VALUES (0.000021);

INSERT INTO SampleNumberTable(Col1)
VALUES (0.012678912);

SELECT * FROM
SampleNumberTable;
Copy
Résultat
Col1   |
-------+
0.00009|
0.00002|
0.01268|

Copy

Meilleures pratiques

SSC-FDM-OR0011

L’argument booléen a été supprimé, car l’option « add to stack » n’est pas prise en charge.

Description

Cet avertissement s’affiche lorsque le troisième argument facultatif de RAISE_APLICATION_ERROR a été supprimé pendant la migration. Cette fonctionnalité n’est pas prise en charge par Snowflake.

Exemple de code

Code d’entrée :
 CREATE OR REPLACE FUNCTION TEST(SAMPLE_A      IN NUMBER DEFAULT NULL,
                               SAMPLE_B       IN NUMBER DEFAULT NULL)
  RETURN NUMBER
 AS
BEGIN
    raise_application_error(-20001, 'First exception message', FALSE);
  RETURN 1;
END TEST;
Copy
Code généré :
 !!!RESOLVE EWI!!! /*** SSC-EWI-0068 - USER DEFINED FUNCTION WAS TRANSFORMED TO SNOWFLAKE PROCEDURE ***/!!!
CREATE OR REPLACE PROCEDURE TEST (SAMPLE_A NUMBER(38, 18) DEFAULT NULL,
                               SAMPLE_B NUMBER(38, 18) DEFAULT NULL)
RETURNS NUMBER(38, 18)
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "oracle",  "convertedOn": "07/02/2025",  "domain": "no-domain-provided" }}'
EXECUTE AS CALLER
AS
$$
 DECLARE
  FIRST_EXCEPTION_MESSAGE_EXCEPTION_CODE_0 EXCEPTION (-20001, 'FIRST EXCEPTION MESSAGE');
 BEGIN
  --** SSC-FDM-OR0011 - ADD TO STACK OF ERRORS IS NOT SUPPORTED, BOOLEAN ARGUMENT FALSE WAS REMOVED. **
  RAISE FIRST_EXCEPTION_MESSAGE_EXCEPTION_CODE_0;
  RETURN 1;
 END;
$$;
Copy

Meilleures pratiques

  • Aucune action de la part de l’utilisateur final n’est requise.

  • Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.

SSC-FDM-OR0012

Les instructions COMMIT et ROLLBACK nécessitent une configuration adéquate pour fonctionner comme prévu.

Description

Les instructions COMMIT et ROLLBACK nécessitent une configuration adéquate pour fonctionner comme prévu dans Snowflake. L’instruction suivante doit être exécutée dans Snowflake pour simuler la fonctionnalité correcte de ces instructions:

 ALTER SESSION SET AUTOCOMMIT = false;
Copy

Exemple de code

Code d’entrée
 COMMIT;
ROLLBACK;
Copy
Code généré
 --** SSC-FDM-OR0012 - COMMIT REQUIRES THE APPROPRIATE SETUP TO WORK AS INTENDED **
COMMIT;

--** SSC-FDM-OR0012 - ROLLBACK REQUIRES THE APPROPRIATE SETUP TO WORK AS INTENDED **
ROLLBACK;
Copy

Meilleures pratiques

  • Exécutez la requête mentionnée dans la section de description avant de commencer à exécuter votre code.

  • Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.

SSC-FDM-OR0013

La clause Cycle n’est pas prise en charge dans Snowflake.

Note

Ce FDM est obsolète. Veuillez vous référer à la documentation SSC-EWI-OR0039

Description

Ce message s’affiche lorsque SnowConvert AI trouve une requête avec une clause CYCLE. Celle-ci n’est pas prise en charge dans Snowflake et est donc commentée dans le code.

Cette clause indique lorsqu’il existe une récursivité.

Pour plus de détails, consultez la documentation sur la fonctionnalité de la clause.

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 généré :
 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
--** SSC-FDM-OR0013 - CYCLE CLAUSE IS NOT SUPPORTED IN SNOWFLAKE **
CONNECT BY
      A.C = 0 START WITH A.B = 1;
Copy

Meilleures pratiques

  • S’il existe des cycles dans la hiérarchie des données, vous pouvez examiner cet article pour les gérer.

  • Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.

SSC-FDM-OR0014

Inadéquation du type de données de la clé étrangère.

Description

Cette erreur se produit lorsqu’il existe une inadéquation dans le type de données d’une clé étrangère.

Exemple de code

Code d’entrée :
 CREATE TABLE "MyDb"."MyTable"
(
    "COL1" NUMBER,
    CONSTRAINT "PK" PRIMARY KEY ("COL1")
);

CREATE TABLE "MyDb"."MyTable1"
(   
    "COL1" NUMBER(*,0),
    CONSTRAINT "FK1" FOREIGN KEY ("COL1") REFERENCES "MyDb"."MyTable" ("COL1")
);
Copy
Code généré :
 CREATE OR REPLACE TABLE "MyDb"."MyTable"
    (
        "COL1" NUMBER(38, 18) /*** SSC-FDM-0006 - NUMBER TYPE COLUMN MAY NOT BEHAVE SIMILARLY IN SNOWFLAKE. ***/,
        CONSTRAINT "PK" PRIMARY KEY ("COL1")
    )
    COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
    ;

    CREATE OR REPLACE TABLE "MyDb"."MyTable1"
    (
        "COL1" NUMBER(38) /*** 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"}}'
    ;

    ALTER TABLE "MyDb"."MyTable1"
    ADD
    --** SSC-FDM-OR0014 - FOREIGN KEY DATA TYPE MISMATCH **
    CONSTRAINT "FK1" FOREIGN KEY ("COL1") REFERENCES "MyDb"."MyTable" ("COL1");
Copy

Note

Notez que « MyDb ». »MyTable1 ».COL1 et « MyDb ». »MyTable ».COL1 sont de types différents et que l’ERROR s’affiche.

Meilleures pratiques

  • S’il existe des cycles dans la hiérarchie des données, vous pouvez examiner cet article pour les gérer.

  • Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.

SSC-FDM-OR0015

Les résultats LENGTHB transformés en OCTET_LENGTH peuvent varier en raison de la gestion de la mémoire de DBMS.

Description

Ce problème se produit lorsqu’il existe un appel à la fonction LENGTHB qui retourne la taille d’une colonne ou d’un littéral en octets. Cette fonction est transformée en fonction OCTET_LENGTH de Snowflake.

Lorsque le paramètre de la fonction est une colonne, le résultat correspondra à la taille de la valeur que la colonne possède. Cette taille peut varier d’Oracle à Snowflake. Le type de la colonne joue un rôle important dans le résultat renvoyé par la fonction.

Exemple de code

Code d’entrée :
Requêtes
 CREATE TABLE char_table
(
	char_column1 CHAR(15)
);

INSERT INTO char_table VALUES ('Hello world');

SELECT char_column1, LENGTHB(char_column1), LENGTH('Hello world') FROM char_table;
Copy
Résultat
|CHAR_COLUMN1   |LENGTHB(CHAR_COLUMN1)|LENGTH('HELLOWORLD')|
|---------------|---------------------|--------------------|
|Hello world    |15                   |11                  |


Copy
Code généré :
Requêtes
CREATE OR REPLACE TABLE char_table
(
	char_column1 CHAR(15)
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;

INSERT INTO char_table
VALUES ('Hello world');

SELECT char_column1,
OCTET_LENGTH(char_column1) /*** SSC-FDM-OR0015 - LENGTHB TRANSFORMED TO OCTET_LENGTH RESULTS MAY VARY DUE TO MEMORY MANAGEMENT OF DBMS ***/, LENGTH('Hello world') FROM
char_table;
Résultat
|CHAR_COLUMN1|OCTET_LENGTH(CHAR_COLUMN1)|LENGTH('HELLO WORLD')|
|------------|--------------------------|---------------------|
|Hello world |11                        |11                   |


Copy

Meilleures pratiques

  • Vérifiez manuellement les types de données utilisés.

  • Vérifiez l’encodage des colonnes utilisées, car OCTET_LENGTH peut renvoyer des tailles plus grandes lorsque la chaîne contient des points de code Unicode.

  • Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.

SSC-FDM-OR0016

Les options COMMIT et ROLLBACK ont été supprimées, car Snowflake n’en a pas besoin.

Description

Les options d’instruction COMMIT et ROLLBACK sont supprimées, car Snowflake n’en a pas besoin.

Exemple de code

Code d’entrée
 COMMIT WORK FORCE '22.57.53';
ROLLBACK WORK FORCE '22.57.53';
Copy
Code généré
 --** SSC-FDM-OR0016 - COMMIT OPTIONS REMOVED BECAUSE SNOWFLAKE DOES NOT REQUIRE THEM **
--** SSC-FDM-OR0012 - COMMIT REQUIRES THE APPROPRIATE SETUP TO WORK AS INTENDED **
COMMIT WORK;

--** SSC-FDM-OR0016 - ROLLBACK OPTIONS REMOVED BECAUSE SNOWFLAKE DOES NOT REQUIRE THEM **
--** SSC-FDM-OR0012 - ROLLBACK REQUIRES THE APPROPRIATE SETUP TO WORK AS INTENDED **
ROLLBACK WORK;
Copy

Meilleures pratiques

SSC-FDM-OR0017

DBTimezone a été supprimé pour utiliser la valeur par défaut de l’horodatage.

Description

Le mot-clé DBTIMEZONE a été supprimé de l’expression AT TIME ZONE.

Exemple de code

Code d’entrée :
 SELECT TIMESTAMP '1998-12-25 09:26:50.12' AT TIME ZONE DBTIMEZONE FROM DUAL;
Copy
Code généré :
 SELECT
--** SSC-FDM-OR0017 - DBTIMEZONE WAS REMOVED TO USE THE DEFAULT VALUE OF THE TIMESTAMP **
TO_TIMESTAMP_LTZ( TIMESTAMP '1998-12-25 09:26:50.12')
FROM DUAL;
Copy

Meilleures pratiques

  • Vous devrez peut-être définir le paramètre de session TIMEZONE afin d’obtenir des résultats équivalents.

  • Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.

SSC-FDM-OR0018

L’instruction Merge peut ne pas fonctionner comme prévu.

Description

Cet avertissement est utilisé pour indiquer que l’instruction Merge de Snowflake peut présenter certaines différences fonctionnelles par rapport à Oracle.

Exemple de code

Code d’entrée :
 MERGE INTO people_target pt 
USING people_source ps 
ON    (pt.person_id = ps.person_id) 
WHEN MATCHED THEN UPDATE 
  SET pt.first_name = ps.first_name, 
      pt.last_name = ps.last_name, 
      pt.title = ps.title 
  DELETE where pt.title  = 'Mrs.' 
WHEN NOT MATCHED THEN INSERT 
  (pt.person_id, pt.first_name, pt.last_name, pt.title) 
  VALUES (ps.person_id, ps.first_name, ps.last_name, ps.title) 
  WHERE ps.title = 'Mr';
Copy
Code généré :
 --** SSC-FDM-OR0018 - SNOWFLAKE MERGE STATEMENT MAY HAVE SOME FUNCTIONAL DIFFERENCES COMPARED TO ORACLE **
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECTS "people_target", "people_source" **
MERGE INTO people_target pt
USING people_source ps
ON    (pt.person_id = ps.person_id)
      WHEN MATCHED AND pt.title  = 'Mrs.' THEN
        DELETE
      WHEN MATCHED THEN
        UPDATE SET
          pt.first_name = ps.first_name,
               pt.last_name = ps.last_name,
               pt.title = ps.title
      WHEN NOT MATCHED AND ps.title = 'Mr' THEN
        INSERT
        (pt.person_id, pt.first_name, pt.last_name, pt.title)
        VALUES (ps.person_id, ps.first_name, ps.last_name, ps.title);
Copy

Meilleures pratiques

  • Si vous obtenez des résultats différents de ceux d’Oracle, tenez compte des points suivants :

    • Pour la priorité des commandes d’exécution, accédez au [lien ] suivant(https://docs.snowflake.com/fr/sql-reference/sql/merge.html#usage-notes) pour obtenir plus d’informations.

      • Exécutez les instructions DML ignorées en dehors (avant ou après, selon le cas) de l’instruction Merge.

  • Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.

SSC-FDM-OR0019

La sortie du cadre de fenêtre peut ne pas être équivalente.

Description

Cet avertissement est ajouté lorsqu’une unité de cadre de fenêtre ROWS se trouve dans le code source.

ROWS fonctionne en utilisant des numéros de lignes physiques pour son calcul, qui peut différer une fois qu’il est migré vers la plateforme cible. Ajouter manuellement des clauses ORDER BY supplémentaires peut permettre d’atténuer ou d’éliminer ce problème.

Note

Notez que, comme l’indique la documentation Oracle,\ « La valeur renvoyée par une fonction analytique avec un décalage logique est toujours déterministe. Cependant, la valeur renvoyée par une fonction analytique avec un décalage physique peut produire des résultats non déterministes, à moins que l’expression d’ordre ne donne un ordre unique. Vous pouvez avoir à spécifier plusieurs colonnes dans la order_by_clause pour obtenir cet ordre unique. »

Ainsi, il est recommandé de vérifier au préalable si la fonction a renvoyé des résultats déterministes afin d’éviter tout problème.

Exemple de code

Code d’entrée :
 SELECT
SUM(C_BIRTH_DAY)
OVER (
    ORDER BY C_BIRTH_COUNTRY
    ROWS UNBOUNDED PRECEDING) AS MAX1
FROM WINDOW_TABLE;
Copy
Code généré :
 SELECT
SUM(C_BIRTH_DAY)
OVER (
    ORDER BY C_BIRTH_COUNTRY ROWS UNBOUNDED PRECEDING /*** SSC-FDM-OR0019 - WINDOW FRAME OUTPUT MAY NOT BE EQUIVALENT ***/) AS MAX1
FROM
WINDOW_TABLE;
Copy

Meilleures pratiques

  • Assurez un ordre déterministe pour les lignes afin de garantir des sorties déterministes lors de l’exécution dans Snowflake.

  • Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.

SSC-FDM-OR0020

PRAGMA EXCEPTION_INIT n’est pas pris en charge.

Note

Ce FDM est obsolète. Veuillez vous référer à la documentation SSC-EWI-OR0051](../conversion-issues/oracleEWI.md#ssc-ewi-or0051)

Description

Cet avertissement est ajouté lorsque la fonction PRAGMA EXCEPTION_INIT est invoquée dans une procédure. Le nom des exceptions et le code SQL des exceptions est défini dans la fonction RAISE. Lorsqu’il est converti dans l’Exécution de scripts Snowflake, le code SQL est ajouté à la déclaration des exceptions. Cependant, certaines valeurs de code peuvent être non valides dans l’Exécution de scripts Snowflake.

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 généré :
Snowflake Scripting
 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
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0097 - PROCEDURE PROPERTIES ARE NOT SUPPORTED IN SNOWFLAKE PROCEDURES ***/!!!
AS
$$
  DECLARE
    --** SSC-FDM-OR0023 - EXCEPTION CODE NUMBER EXCEEDS SNOWFLAKE SCRIPTING LIMITS **
    NEW_EXCEPTION EXCEPTION;
    --** SSC-FDM-OR0020 - PRAGMA EXCEPTION_INIT IS NOT SUPPORTED **
    PRAGMA EXCEPTION_INIT(NEW_EXCEPTION, -63);
    NEW_EXCEPTION2 EXCEPTION (-20100, '');
    --** SSC-FDM-OR0020 - 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

Meilleures pratiques

  • Aucune action de la part de l’utilisateur final n’est requise.

  • Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.

SSC-FDM-OR0021

La clause For Loop avec un nombre flottant en tant que limite peut ne pas se comporter correctement dans l’Exécution de scripts Snowflake.

Description

L’Exécution de scripts Snowflake autorise uniquement un INTEGER ou une expression qui correspond à un INTEGER en tant que limite pour la condition FOR LOOP. Les nombres flottants seront arrondis à la valeur supérieure ou inférieure et modifieront la limite d’origine.

La limite inférieure sera arrondie à l’entier le plus proche. Par exemple :

3.1 -> 3, 6.7 -> 7, 4.5 -> 5

Cependant, la limite supérieure sera tronquée à l’entier inférieur le plus proche. Par exemple :

3.1 -> 3, 6.7 -> 6, 4.5 -> 4

Exécution de scripts Snowflake

 CREATE OR REPLACE PROCEDURE p1()
RETURNS VARCHAR
LANGUAGE SQL
AS
$$
    DECLARE
        var1 VARCHAR DEFAULT '';
        var2 VARCHAR DEFAULT '';
        var3 VARCHAR DEFAULT '';
    BEGIN
        --Loop 1
        FOR i IN 1.2 TO 5.2 DO
            var1 := var1 || ' ' || i::VARCHAR;
        END FOR;
        
        --Loop 2
        FOR i IN 1.7 TO 5.5 DO
            var2 := var2 || ' ' || i::VARCHAR;
        END FOR;
        
        --Loop 3
        FOR i IN 1.5 TO 5.8 DO
            var3 := var3 || ' ' || i::VARCHAR;
        END FOR;
        RETURN  ' Loop1: ' || var1 ||
                ' Loop2: ' || var2 ||
                ' Loop3: ' || var3;
    END;
$$;

CALL p1();
Copy
Résultat
P1                                                |
--------------------------------------------------+
 Loop1:  1 2 3 4 5                                |
 Loop2:  2 3 4 5                                  |
 Loop3:  2 3 4 5                                  |

Copy

Exemple de code

Code d’entrée :
 CREATE OR REPLACE PROCEDURE p1
AS
BEGIN
FOR i NUMBER(5,1) IN 1.2 .. 5.7 LOOP
    NULL;
END LOOP;
END;
Copy
Code généré :
 CREATE OR REPLACE PROCEDURE p1 ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "oracle",  "convertedOn": "07/02/2025",  "domain": "no-domain-provided" }}'
EXECUTE AS CALLER
AS
$$
    BEGIN
        --** SSC-FDM-OR0021 - FOR LOOP WITH FLOAT NUMBER AS LOWER OR UPPER BOUND MAY NOT BEHAVE CORRECTLY IN SNOWFLAKE SCRIPTING **
        --** SSC-PRF-0008 - PERFORMANCE REVIEW - LOOP USAGE **
        FOR i IN 1.2 TO 5.7
                            --** SSC-PRF-0008 - PERFORMANCE REVIEW - LOOP USAGE **
                            LOOP
                                   NULL;
END LOOP;
    END;
$$;
Copy

Meilleures pratiques

  • Réécrivez la condition FOR LOOP afin qu’elle utilise des entiers.

  • Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.

SSC-FDM-OR0022

La clause For Loop avec plusieurs conditions n’est actuellement pas prise en charge par l’Exécution de scripts Snowflake. Seule la première condition est utilisée.

Note

Ce FDM est obsolète. Veuillez vous référer à la documentation SSC-EWI-OR0100

Description

Oracle autorise plusieurs conditions dans une seule FOR LOOP. Cependant, l’Exécution de scripts Snowflake n’autorise qu’une seule condition par FOR LOOP. Seule la première condition est migrée, et les autres sont ignorées lors de la transformation.

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 généré :
 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
        --** SSC-FDM-OR0022 - 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

Meilleures pratiques

  • Séparez les FOR LOOP en différentes boucles ou réécrivez la condition.

  • Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.

SSC-FDM-OR0023

Le code d’exception dépasse la limite de l’Exécution de scripts Snowflake.

Note

Ce FDM est obsolète. Veuillez vous référer à la documentation SSC-EWI-OR0099

Description

Cet avertissement apparaît lorsqu’un code d’erreur de déclaration d’exception dépasse les limites du nombre d’exceptions de l’Exécution de scripts Snowflake. Le nombre doit être un entier 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 généré :
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
        --** SSC-FDM-OR0023 - EXCEPTION CODE NUMBER EXCEEDS SNOWFLAKE SCRIPTING LIMITS **
        my_exception EXCEPTION;
        --** SSC-FDM-OR0020 - PRAGMA EXCEPTION_INIT IS NOT SUPPORTED **
        PRAGMA EXCEPTION_INIT ( my_exception, -19000 );
    BEGIN
        NULL;
    END;
$$;

Meilleures pratiques

  • Vérifiez si le code d’exception se situe entre les limites autorisées par l’Exécution de scripts Snowflake. Si non, remplacez-le par un autre numéro d’exception disponible.

  • Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.

SSC-FDM-OR0024

Colonnes de l’expression introuvables

Note

Ce FDM est obsolète. Veuillez vous référer à la documentation SSC-EWI-OR0002

Description

Cette erreur se produit lorsque les colonnes d’une expression Select n’ont pas pu être résolues, généralement lorsqu’elle fait référence à un accès de type dont la référence n’a pas été résolue ou à une colonne avec un type défini par l’utilisateur dont les colonnes n’ont pas été définies, comme un type sans corps ou un type d’objet sans colonnes.

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 généré :
 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 /*** SSC-FDM-OR0024 - COLUMNS FROM EXPRESSION unknownTable%ROWTYPE NOT FOUND ***/;
    END;
$$;
Copy

Meilleures pratiques

  • Vérifiez que la définition de type référencée comporte bien des colonnes.

  • Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.

SSC-FDM-OR0025

La contrainte Not Null n’est pas prise en charge dans les procédures Snowflake.

Description

La contrainte NOT NULL des déclarations de variables Oracle n’est pas prise en charge dans les déclarations de variables à l’intérieur des procédures dans Snowflake.

Exemple de code

Code d’entrée :
 CREATE OR REPLACE PROCEDURE PROC04
IS
 var3 FLOAT NOT NULL := 100;
BEGIN
NULL;
END;
Copy
Code généré :
 CREATE OR REPLACE PROCEDURE PROC04 ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
 DECLARE
  var3 FLOAT := 100 /*** SSC-FDM-OR0025 - NOT NULL CONSTRAINT IS NOT SUPPORTED BY SNOWFLAKE ***/;
 BEGIN
  NULL;
 END;
$$;
Copy

Meilleures pratiques

  • Aucune action de la part de l’utilisateur final n’est requise.

  • Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.

SSC-FDM-OR0026

Type non pris en charge dans l’opération de conversion.

Note

Ce FDM est obsolète. Veuillez vous référer à la documentation SSC-EWI-OR0045

Description

Cette erreur se produit lorsqu’un type n’est pas pris en charge dans une opération de conversion.

Exemple

Code d’entrée :
 select cast(' $123.45' as number, 'L999.99') from dual;
Copy
Code généré :
 select
--** SSC-FDM-OR0026 - CAST TYPE NOT SUPPORTED **
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0011 - THE FORMAT PARAMETER ' $123.45' IS NOT SUPPORTED ***/!!!
 cast(' $123.45' as NUMBER(38, 18) , 'L999.99') from dual;
Copy

EWIs connexes

  1. SSC-EWI-OR0011 : le paramètre de format n’est pas pris en charge.

Meilleures pratiques

  • La conversion est convertie en fonction définie par l’utilisateur (UDF/Stub). Vous pouvez donc la modifier pour émuler le comportement de la fonction de conversion.

  • Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.

SSC-FDM-OR0027

DEFAULT ON CONVERSION ERROR n’est pas pris en charge.

Note

Ce FDM est obsolète. Veuillez vous référer à la documentation SSC-EWI-OR0029

Description

L’erreur de conversion par défaut n’est pas prise en charge dans Snowflake.

Exemple de code

Code d’entrée :
 SELECT TO_NUMBER('2,00' DEFAULT 0 ON CONVERSION ERROR) "Value" FROM DUAL;
Copy
Code généré :
 SELECT
--** SSC-FDM-OR0027 - DEFAULT ON CONVERSION ERROR NOT SUPPORTED IN SNOWFLAKE IN SNOWFLAKE **
TO_NUMBER('2,00') "Value" FROM DUAL;
Copy

Meilleures pratiques

  • Vous pouvez créer une UDF pour émuler le comportement de la valeur DEFAULT ON CONVERSION ERROR.

  • Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.

SSC-FDM-OR0028

Le paramètre SYS_CONTEXT n’est pas pris en charge.

Note

Ce FDM est obsolète. Veuillez vous référer à la documentation SSC-EWI-OR0031.

Description

Cette erreur se produit lorsqu’un paramètre de fonction SYS_CONTEXT n’est pas pris en charge.

Exemple de code

Code d’entrée :
 SELECT SYS_CONTEXT ('USERENV', 'NLS_SORT') FROM DUAL;
Copy
Code généré :
 SELECT
--** SSC-FDM-OR0028 - 'NLS_SORT' SYS_CONTEXT PARAMETER NOT SUPPORTED IN SNOWFLAKE **
SYS_CONTEXT ('USERENV', 'NLS_SORT') FROM DUAL;
Copy

Meilleures pratiques

  • La fonction est convertie en fonction définie par l’utilisateur(stub). Vous pouvez donc la modifier pour émuler le comportement du paramètre SYS_CONTEXT.

  • Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.

SSC-FDM-OR0029

Cette configuration ALTER SESSION n’est pas prise en charge dans Snowflake.

Description

Une clause ou une configuration de l’instruction ALTER SESSION n’est pas prise en charge actuellement.

Exemple de code

Code d’entrée :
 ALTER SESSION SET SQL_TRACE TRUE;
Copy
Code généré :
 ----** SSC-FDM-OR0029 - THIS ALTER SESSION CONFIGURATION IS NOT SUPPORTED IN SNOWFLAKE **
--ALTER SESSION SET SQL_TRACE TRUE
                                ;
Copy

Meilleures pratiques

  • Pour les variables de session, vous pouvez consulter la [documentation ] Snowflake (https://docs.snowflake.com/fr/sql-reference/parameters.html) pour trouver un équivalent.

  • Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.

SSC-FDM-OR0030

La pseudo-colonne ROWID n’est pas prise en charge dans Snowflake.

Description

Lorsque ROWID est utilisée comme pseudo-colonne dans une requête, elle est transformée en null afin d’éviter les erreurs d’exécution, et l’EWI est ajouté. Il n’existe encore aucune transformation pour émuler la fonctionnalité.

Exemple de code

Code d’entrée Oracle :
 SELECT ROWID FROM T1;
Copy
Code généré :
 SELECT
--** SSC-FDM-OR0030 - ROWID PSEUDOCOLUMN IS NOT SUPPORTED IN SNOWFLAKE, IT WAS CONVERTED TO NULL TO AVOID RUNTIME ERRORS **
'' AS ROWID
FROM
T1;
Copy

Meilleures pratiques

  • Aucune action de la part de l’utilisateur final n’est requise.

  • Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.

SSC-FDM-OR0031

La clause de journalisation des erreurs dans les instructions DML n’est pas prise en charge par Snowflake.

Description

Cette erreur est utilisée pour indiquer que la clause error_logging dans les instructions DML d’Oracle n’est pas prise en charge par les instructions DML de Snowflake.

Exemple de code

Code d’entrée :
 MERGE INTO people_target pt 
USING people_source ps ON (pt.person_id = ps.person_id) 
WHEN MATCHED THEN UPDATE 
  SET pt.first_name = ps.first_name, 
      pt.last_name = ps.last_name, 
      pt.title = ps.title
LOG ERRORS;
Copy
Code généré :
 MERGE INTO people_target pt
USING people_source ps ON (pt.person_id = ps.person_id)
  WHEN MATCHED THEN
    UPDATE
    SET pt.first_name = ps.first_name,
        pt.last_name = ps.last_name,
        pt.title = ps.title
--  --** SSC-FDM-OR0031 - THE ERROR LOGGING CLAUSE IN DML STATEMENTS IS NOT SUPPORTED BY SNOWFLAKE **
--LOG ERRORS
          ;
Copy

Meilleures pratiques

  • Aucune autre action de l’utilisateur n’est requise.

  • Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.

SSC-FDM-OR0032

La fonction StandardHash avec un paramètre d’entrée sans chaîne génère un résultat différent dans Snowflake.

Description

Cet avertissement est utilisé lorsque la fonction STANDARD_HASH dans Oracle avec un paramètre d’entrée sans chaîne génère un résultat différent dans Snowflake.

Exemple de code

Code d’entrée :
Requête
 SELECT STANDARD_HASH(1+1) FROM DUAL;
Copy
Résultat
 STANDARD_HASH(1+1)                               |
--------------------------------------------------+
 E39323970701D93598FC1D357F4BF04578CE3242         |

Copy
Code généré :
Requête
SELECT
--** SSC-FDM-OR0032 - STANDARD HASH FUNCTION WITH INPUT NON-STRING PARAMETER GENERATES A DIFFERENT RESULT IN SNOWFLAKE **
SHA1(1+1)
FROM DUAL;
Résultat
 SHA1(1+1)                                        |
--------------------------------------------------+
 da4b9237bacccdf19c0760cab7aec4a8359010b0         |

Meilleures pratiques

  • Aucune autre action de l’utilisateur n’est requise.

  • Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.

SSC-FDM-OR0033

DBMS_RANDOM.VALUE La précision du paquet intégré est inférieure dans Snowflake.

Description

Ce message s’affiche lorsque SnowConvert AI migre une DBMS_RANDOM.VALUE. Fonction de paquet intégré d’Oraclen. Cet avertissement indique que l’UDF ajoutée pour émuler la fonctionnalité a une précision inférieure à la fonction d’originen.

Exemple de code

Code d’entrée :

 CREATE OR REPLACE PROCEDURE built_in_package_proc
IS
var1 NUMBER;
BEGIN
    SELECT DBMS_RANDOM.VALUE() INTO var1 FROM DUAL;

    SELECT DBMS_RANDOM.VALUE(2,10) INTO var1 FROM DUAL; 
END;
Copy
Code généré :
 CREATE OR REPLACE PROCEDURE built_in_package_proc ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
    DECLARE
        var1 NUMBER(38, 18);
    BEGIN
        SELECT
            --** SSC-FDM-OR0033 - DBMS_RANDOM.VALUE DIGITS OF PRECISION ARE LOWER IN SNOWFLAKE **
            DBMS_RANDOM.VALUE_UDF() INTO
            :var1
        FROM DUAL;

        SELECT
            --** SSC-FDM-OR0033 - DBMS_RANDOM.VALUE DIGITS OF PRECISION ARE LOWER IN SNOWFLAKE **
            DBMS_RANDOM.VALUE_UDF(2,10) INTO
            :var1
        FROM DUAL;
    END;
$$;
Copy

Meilleures pratiques

  • Aucune autre action de l’utilisateur n’est requise.

  • Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.

SSC-FDM-OR0034

La valeur de début de séquence avec “LIMIT VALUE” n’est pas prise en charge par Snowflake.

Note

Ce FDM est obsolète. Veuillez vous référer à la documentation SSC-EWI-OR0001

Description

Cette erreur apparaît lorsque la valeur de l’instruction START WITH est LIMIT VALUE.

Dans Oracle, cette clause n’est utilisée que dans ALTER TABLE.

  • START WITH LIMIT VALUE, qui est spécifique aux identity_options, ne peut être utilisée qu’avec ALTER TABLE MODIFY. Si vous spécifiez START WITH LIMIT VALUE, la base de données Oracle verrouille la table et trouve la valeur maximale de la colonne d’identité dans la table (pour les séquences croissances) ou la valeur minimale de la colonne d’identité (pour les séquences décroissantes) et attribue la valeur comme point culminant du générateur de séquences. La valeur suivante renvoyée par le générateur de séquences sera le point culminant + INCREMENT BY integer pour les séquences croissances, ou le point culminant - INCREMENT BY integer pour les séquences décroissantes.

ALTER TABLE ORACLE

Exemple de code

Code d’entrée :
 CREATE SEQUENCE SEQUENCE1
  START WITH LIMIT VALUE;
Copy
Code généré :
 CREATE OR REPLACE SEQUENCE SEQUENCE1
  --** SSC-FDM-OR0034 - 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

Meilleures pratiques

  • Aucune autre action de l’utilisateur n’est requise.

  • Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.

SSC-FDM-OR0035

Mise en œuvre de l’UDF de vérification DBMS_OUTPUT.PUTLINE

Description

Ce message s’affiche lorsque SnowConvert AI migre une DBMS_OUTPUT.PUT_LINE Fonction de paquet intégré d’Oraclen. Cet avertissement vous indique de vérifier l’UD ajoutéeF.

Cet EWI existe pour indiquer à l’utilisateur d’examiner la mise en œuvre de DBMS_OUTPUT.PUT_LINE_UDF, où les informations suivantes se trouvent :

Avertissement

Les performances peuvent être affectées par l’utilisation de cette UDF. Si vous voulez commencer à journaliser des informations, supprimez le commentaire de la mise en œuvre. Notez que cette opération utilise une table temporaire. Si vous voulez que les données persistent après la fin d’une session, veuillez supprimer TEMPORARY de CREATE TABLE.

Une fois les appels à DBMS_OUTPUT.PUT_LINE_UDF effectués, veuillez utiliser la requête suivante pour lire tous les journaux : SELECT * FROM DBMS_OUTPUT.DBMS_OUTPUT_LOG.

Exemple de code

Code d’entrée :
 CREATE OR REPLACE PROCEDURE builtin_package_call
IS
BEGIN
	DBMS_OUTPUT.PUT_LINE(1);
	DBMS_OUTPUT.PUT_LINE("Test");
END;
Copy
Code généré :
 CREATE OR REPLACE PROCEDURE builtin_package_call ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
	BEGIN
		--** SSC-FDM-OR0035 - CHECK UDF IMPLEMENTATION FOR DBMS_OUTPUT.PUT_LINE_UDF. **
		CALL DBMS_OUTPUT.PUT_LINE_UDF(1);
		--** SSC-FDM-OR0035 - CHECK UDF IMPLEMENTATION FOR DBMS_OUTPUT.PUT_LINE_UDF. **
		CALL DBMS_OUTPUT.PUT_LINE_UDF("Test");
	END;
$$;
Copy

Meilleures pratiques

  • Aucune autre action de l’utilisateur n’est requise.

  • Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.

SSC-FDM-OR0036

Paramètres de paquets intégrés inutiles

Description

Ce message s’affiche lorsque SnowConvert AI migre une procédure ou une fonction de paquet intégrée d’Oracle, et certains des arguments sont supprimés de l’appel.

Certains des paramètres d’origine peuvent ne pas avoir d’équivalent dans Snowflake ou peuvent ne pas être nécessaires dans la version transformée. Ces paramètres sont supprimés du code produit, mais ils sont préservés dans le message EWI pour que l’utilisateur puisse toujours les suivre.

Exemple de code

Code d’entrée :
 CREATE OR REPLACE PROCEDURE built_in_package_proc
IS
w_file UTL_FILE.FILE_TYPE;
BEGIN
    w_file:= UTL_FILE.FOPEN('MY_DIR','test.txt','W',32760);
    UTL_FILE.PUT_LINE(w_file,'New line');    
END;
Copy
Code généré :
 CREATE OR REPLACE PROCEDURE built_in_package_proc ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
    DECLARE
        w_file OBJECT /*** SSC-FDM-0015 - REFERENCED CUSTOM TYPE 'UTL_FILE.FILE_TYPE' IN QUERY NOT FOUND, USAGES MAY BE AFFECTED ***/ := OBJECT_CONSTRUCT();
    BEGIN
        --** SSC-FDM-OR0036 - PARAMETERS: 'LOCATION, MAX_LINESIZE_UDF' UNNECESSARY IN THE IMPLEMENTATION. **
        CALL UTL_FILE.FOPEN_UDF('test.txt', 'W');
        SELECT
            *
        INTO
            w_file
        FROM
            TABLE(RESULT_SCAN(LAST_QUERY_ID()));
        --** SSC-FDM-OR0036 - PARAMETERS: 'AUTOFLUSH_UDF' UNNECESSARY IN THE IMPLEMENTATION. **
        CALL UTL_FILE.PUT_LINE_UDF(:w_file, 'New line');
    END;
$$;
Copy

Meilleures pratiques

SSC-FDM-OR0037

La syntaxe utilisée dans Select n’est pas prise en charge dans Snowflake.

Note

Ce FDM est obsolète. Veuillez vous référer à la documentation SSC-EWI-OR0004

Note

Certaines parties du code de sortie sont omises pour des raisons de clarté.

Description

Cet avertissement se produit lorsqu’une clause dans Select n’est pas prise en charge dans Snowflake. Les clauses non prises en charge sont les suivantes :

  • CONTAINERS

  • SUBQUERY RESTRICTION

  • HIERARCHIES

  • EXTERNAL MODIFY

  • DBLINK

  • SHARDS

  • PARTITION

  • SUBPARTITION

  • HIERARCHICAL

Exemple de code

Code d’entrée :
 SELECT * FROM TABLE1 EXTERNAL MODIFY (LOCATION 'file.csv' REJECT LIMIT UNLIMITED);
Copy
Code généré :
 --** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "TABLE1" **
SELECT * FROM
TABLE1
--       --** SSC-FDM-OR0037 - THE 'OPTIONAL MODIFIED EXTERNAL' SYNTAX IN SELECT IS NOT SUPPORTED IN SNOWFLAKE **
--       EXTERNAL MODIFY (LOCATION 'file.csv' REJECT LIMIT UNLIMITED)
                                                                   ;
Copy

Meilleures pratiques

  • Aucune autre action de l’utilisateur n’est requise.

  • Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.

SSC-FDM-OR0038

L’attribut booléen du curseur n’est pas pris en charge.

Note

Ce FDM est obsolète. Veuillez vous référer à la documentation SSC-EWI-OR0128

Description

Ce message est utilisé pour indiquer qu’un attribut booléen du curseur n’est pas pris en charge dans SnowScript ou qu’il n’existe pas de transformation qui émule sa fonctionnalité dans SnowScript. Le tableau suivant indique les attributs booléens du curseur qui peuvent être émulés:

Attribut booléen du curseur

Statut

%FOUND

Peut être émulé

%NOTFOUND

Peut être émulé

%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 généré :
 --** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "table1" **
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*/ /*** SSC-FDM-OR0038 - BOOLEAN CURSOR ATTRIBUTE %ISOPEN IS NOT SUPPORTED IN SNOWFLAKE ***/;
            found_attr := my_record IS NOT NULL;
        END LOOP;
        CLOSE my_cursor;
    END;
$$;
Copy

Meilleures pratiques

SSC-FDM-OR0039

Create Type non pris en charge dans Snowflake

Note

Ce FDM est obsolète. Veuillez vous référer à la documentation SSC-EWI-OR0007

Description

Ce message est ajouté lorsqu’une instruction Create Type non prise en charge par Snowflake est utilisée.

Exemple de code

Code d’entrée (Oracle) :
 CREATE TYPE type6 UNDER type5(COL1 INTEGER);
Copy
Code généré :
 ----** SSC-FDM-OR0039 - CREATE TYPE SUBTYPE IS NOT SUPPORTED IN SNOWFLAKE **
--CREATE TYPE type6 UNDER type5(COL1 INTEGER)
                                           ;
Copy

Meilleures pratiques

  • Aucune action de la part de l’utilisateur final n’est requise.

  • Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.

SSC-FDM-OR0040

Les caractères numériques ne peuvent pas être modifiés dans Snowflake. Le séparateur décimal dans Snowflake est le caractère point.

Description

Les caractères numériques ne peuvent pas être modifiés dans Snowflake. Le séparateur décimal dans Snowflake est le caractère point. L’instruction de session ALTER est commentée et un avertissement est ajouté.

Exemple de code

Oracle :
 ALTER SESSION SET NLS_NUMERIC_CHARACTERS = ',.';
Copy
Snowflake Scripting :
 ----** SSC-FDM-OR0040 - NUMERIC CHARACTERS CANNOT BE ALTERED IN SNOWFLAKE. THE DECIMAL SEPARATOR IN SNOWFLAKE IS THE DOT CHARACTER. **
--ALTER SESSION SET NLS_NUMERIC_CHARACTERS = ',.'
                                               ;
Copy

Meilleures pratiques

  • Aucune action de la part de l’utilisateur final n’est requise.

  • Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.

SSC-FDM-OR0041

Paquet intégré non pris en charge.

Note

Ce FDM est obsolète. Veuillez vous référer à la documentation SSC-EWI-OR0076

Description

La traduction pour les paquets intégrés n’est pas prise en charge 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 généré :
 SELECT
--** SSC-FDM-OR0041 - TRANSLATION FOR BUILT-IN PACKAGE 'UTL_RAW.CAST_TO_RAW' IS NOT CURRENTLY SUPPORTED. **
'' AS CAST_TO_RAW,
--** SSC-FDM-OR0041 - TRANSLATION FOR BUILT-IN PACKAGE 'DBMS_UTILITY.GET_TIME' IS NOT CURRENTLY SUPPORTED. **
'' AS GET_TIME
FROM DUAL;
Copy

Meilleures pratiques

  • Aucune action de la part de l’utilisateur final n’est requise.

  • Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.

SSC-FDM-OR0042

Le type Date transformé en Timestamp a un comportement différent.

Description

Le type Date est transformé en type Date ou Timestamp en fonction de l’indicateur –disableDateAsTimestamp, car le type Date dans Snowflake a un comportement différent de celui dans Oracle.

Différences clés

DATE Oracle

Snowflake DATE

Fonctionnalité

Enregistre les informations relatives à la date et à l’heure

Ne stocke que les informations relatives à la date (année, mois, jour)

Stockage interne

Nombre binaire représentant les secondes écoulées depuis l’époque

Format compact optimisé pour les dates

Cas d’utilisation

Stockage polyvalent de la date et de l’heure

Scénarios dans lesquels seules des informations sur la date sont nécessaires

Avantages

Prise en charge de la date et de l’heure

Stockage plus efficace des dates

Limitations

Il n’est pas possible d’enregistrer séparément la date et l’heure.

Ne stocke pas d’informations sur l’heure

Exemple de code

Code d’entrée (Oracle) :
 CREATE TABLE "PUBLIC"."TABLE1"
(
    "CREATED_DATE" DATE,
    "UPDATED_DATE" DATE
);
Copy
Code généré :
 CREATE OR REPLACE TABLE "PUBLIC"."TABLE1"
    (
        "CREATED_DATE" TIMESTAMP /*** SSC-FDM-OR0042 - DATE TYPE COLUMN HAS A DIFFERENT BEHAVIOR IN SNOWFLAKE. ***/,
        "UPDATED_DATE" TIMESTAMP /*** SSC-FDM-OR0042 - DATE TYPE COLUMN HAS A DIFFERENT BEHAVIOR IN SNOWFLAKE. ***/
    )
    COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
    ;
Copy
 -- Additional Params: --disableDateAsTimestamp
CREATE OR REPLACE TABLE "PUBLIC"."TABLE1"
    (
        "CREATED_DATE" DATE /*** SSC-FDM-OR0042 - DATE TYPE COLUMN HAS A DIFFERENT BEHAVIOR IN SNOWFLAKE. ***/,
        "UPDATED_DATE" DATE /*** SSC-FDM-OR0042 - DATE TYPE COLUMN HAS A DIFFERENT BEHAVIOR IN SNOWFLAKE. ***/
    )
    COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
    ;
Copy

Meilleures pratiques

  • Aucune action de la part de l’utilisateur final n’est requise.

  • Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.

SSC-FDM-OR0043

Les paramètres BFILE/BLOB sont considérés comme binaires. Un format peut être nécessaire.

Description

Cette erreur se produit lorsque TO_CLOB est converti en fonction TO_VARCHAR. Un format peut être nécessaire pour les paramètres BFILE/BLOB.

Exemple de code

Code d’entrée:
 SELECT TO_CLOB('Lorem ipsum dolor sit amet') FROM DUAL;
Copy
Code généré :
 SELECT
--** SSC-FDM-OR0043 - BFILE/BLOB PARAMETERS ARE CONSIDERED BINARY, FORMAT MAY BE NEEDED. **
TO_VARCHAR('Lorem ipsum dolor sit amet')
FROM DUAL;
Copy

Meilleures pratiques

  • Vérifiez si les sorties dans le code d’entrée et le code converti sont équivalentes et ajoutez un paramètre de format si nécessaire.

  • Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.

SSC-FDM-OR0044

Le paramètre de correspondance REGEXP_LIKE_UDF peut ne pas se comporter correctement.

Note

Certaines parties du code de sortie sont omises pour des raisons de clarté.

Description

Cet avertissement apparaît lorsque la condition REGEXP_LIKE d’Oracle vient avec le troisième paramètre (paramètre de correspondance). Cet avertissement est ajouté car l’REGEXP_LIKE_UDF utilisée pour remplacer la condition REGEXP_LIKE ne reconnaît pas tous les caractères utilisés par le paramètre de correspondance, de sorte que le résultat de la requête dans Snowflake peut ne pas être équivalent à 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 généré :
 SELECT last_name
FROM
hr.employees
WHERE
--** SSC-FDM-OR0044 - 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
  • Lorsque la condition REGEXP_LIKE vient avec l’un des caractères non pris en charge par la fonction définie par l’utilisateur, une solution possible peut consister à modifier l’expression régulière afin de simuler le comportement du caractère manquant dans le paramètre de correspondance. Pour en savoir plus sur les caractères non pris en charge, consultez la documentation REGEXP_LIKE_UDF.

  • Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.

SSC-FDM-OR0045

Les clauses de partitions sont gérées par Snowflake.

Note

Ce FDM est obsolète. Veuillez vous référer à la documentation SSC-EWI-OR0010

Description

Cet avertissement apparaît lorsque les clauses PARTITION et SUBPARTITION apparaissent dans une requête. Snowflake gère automatiquement les partitions.

Exemple de code

Code d’entrée :
 SELECT * FROM TABLITA PARTITION(col1);
Copy
Code généré :
 SELECT * FROM
TABLITA
--        --** SSC-FDM-OR0045 - PARTITIONS CLAUSES ARE HANDLED BY SNOWFLAKE **
--        PARTITION(col1)
                       ;
Copy

Meilleures pratiques

  • Aucune autre action de l’utilisateur n’est requise.

  • Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.

SSC-FDM-OR0046

La restriction de sous-requête n’est pas possible dans Snowflake.

Note

Certaines parties du code de sortie sont omises pour des raisons de clarté.

Description

Cet avertissement se produit lorsqu’une restriction de sous-requête apparaît dans une instruction SELECT.

Exemple de code

Code d’entrée :
 SELECT * FROM LATERAL(SELECT * FROM TABLITA WITH READ ONLY CONSTRAINT T);
Copy
Code généré :
 SELECT * FROM LATERAL(SELECT * FROM
TABLITA
--        --** SSC-FDM-OR0046 - THE SUBQUERY RESTRICTION IS NOT POSSIBLE IN SNOWFLAKE **
--        WITH READ ONLY CONSTRAINT T
                                   );
Copy

Meilleures pratiques

  • Aucune autre action de l’utilisateur n’est requise.

  • Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.

SSC-FDM-OR0047

Il peut être nécessaire de définir un format TimeStampOutput.

Description

Le paramètre de session TIMESTAMP_OUTPUT_FORMAT doit peut-être être défini sur “DD-MON-YY HH24.MI.SS.FF AM TZH:TZM” pour l’équivalence de sortie de l’horodatage.

Exemple de code

Code d’entrée:
 SELECT SYSTIMESTAMP FROM DUAL;
Copy
Exemple de sortie TIMESTAMP par défaut dans Oracle

Sortie

13-JAN-21 04.18.37.288656 PM +00:00

Code généré :
 SELECT
CURRENT_TIMESTAMP() /*** SSC-FDM-OR0047 - YOU MAY NEED TO SET TIMESTAMP OUTPUT FORMAT ('DD-MON-YY HH24.MI.SS.FF AM TZH:TZM') ***/
FROM DUAL;
Copy
Exemple de sortie TIMESTAMP par défaut dans Snowflake

Sortie

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

Meilleures pratiques

  • Pour modifier le format de sortie de l’horodatage dans Snowflake, utilisez la requête suivante :

    ALTER SESSION SET TIMESTAMP_OUTPUT_FORMAT = 'DD-MON-YY HH24.MI.SS.FF AM TZH:TZM';
    
  • Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.

SSC-FDM-OR0049

La fonction LAG peut échouer si le type de valeur par défaut diffère du type d’expression.

Description

Dans Oracle, la fonction LAG convertit automatiquement le type de données de la valeur par défaut pour correspondre au type de l’expression. Cependant, Snowflake n’effectue pas cette conversion implicite. Par conséquent, un avertissement est émis pour indiquer que la fonction LAG peut échouer si les types de données sont incompatibles.

Exemple de code

Code d’entrée :
 SELECT 
    LAG(salary, 2, '0') OVER (ORDER BY salary) AS salary_two_steps_back
FROM 
    employees;
Copy
Code généré :
 SELECT
    --** SSC-FDM-OR0049 - LAG FUNCTION MIGHT FAIL IF DEFAULT VALUE TYPE DIFFERS FROM THE EXPRESSION TYPE. **
    LAG(salary, 2, '0')
    OVER (ORDER BY salary) AS salary_two_steps_back
FROM
    employees;
Copy

Meilleures pratiques

  • Vérifiez que le type de données de la valeur par défaut correspond au type de données de l’expression dans la fonction LAG. S’ils diffèrent, convertissez explicitement la valeur par défaut en type de données de l’expression.

  • Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.

SSC-FDM-OR0050

Les exceptions avec les paramètres NOCOPY peuvent entraîner une incohérence des données.

Description

Dans PL/SQL d’Oracle, le mot-clé NOCOPY est un indice d’optimisation pour les paramètres de procédure OUT et INOUT. Par défaut, Oracle transmet ces paramètres par valeur, créant ainsi une copie coûteuse des données pendant l’appel et la recopiant à la fin. Cela peut entraîner une surcharge importante des performances pour les grandes structures de données.

NOCOPY demande à Oracle de transmettre les paramètres par référence, ce qui permet à la procédure de modifier directement les données d’origine. Cela élimine la surcharge liée à la copie et améliore les performances. Cependant, les modifications sont immédiates et ne sont pas implicitement annulées si une exception non gérée se produit dans la procédure.

Par conséquent, nous supprimerons l’option des paramètres NOCOPY et ajouterons ce FDM. En effet, l’exécution de la procédure s’arrête lorsqu’une exception survient, ce qui empêche l’instruction RETURN d’être atteinte. En conséquence, la variable du bloc de déclaration de l’appelant conserve ses valeurs initiales, car la procédure ne parvient pas à renvoyer correctement une nouvelle valeur pour l’attribution.

Exemple de code

Code d’entrée :
CREATE OR REPLACE PROCEDURE calculate_division_with_nocopy (
    p_numerator IN NUMBER,
    p_denominator IN NUMBER,
    p_result OUT NOCOPY NUMBER
)
IS
    PROCEDURE calculate_division(result OUT NOCOPY NUMBER)
    AS
    BEGIN
    result := 20;
    result := p_numerator / p_denominator;
    END calculate_division;
BEGIN
    calculate_division(p_result);
        EXCEPTION
        WHEN OTHERS THEN
            p_result := p_result;
END calculate_division_with_nocopy;
Copy
Code généré :
CREATE OR REPLACE PROCEDURE calculate_division_with_nocopy (p_numerator NUMBER(38, 18), p_denominator NUMBER(38, 18), p_result OUT NUMBER(38, 18)
)
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "oracle",  "convertedOn": "07/23/2025",  "domain": "no-domain-provided" }}'
EXECUTE AS CALLER
AS
$$
    DECLARE
        calculate_division PROCEDURE(result
        --** SSC-FDM-OR0050 - EXCEPTIONS WITH NOCOPY PARAMETERS MAY LEAD TO DATA INCONSISTENCY. **
        NUMBER(38, 18))
        RETURNS NUMBER
        AS
            BEGIN
                result := 20;
                result := :p_numerator / :p_denominator;
                RETURN result;
            END;
        call_results NUMBER;
    BEGIN
        call_results := (
            CALL
            calculate_division(:p_result)
        );
        p_result := :call_results;
        EXCEPTION
        WHEN OTHER THEN
            p_result := :p_result;
        END;
$$;
Copy

Meilleures pratiques