SnowConvert: différences fonctionnelles PostgreSQL

SSC-FDM-PG0001

Gravité

Faible

Description

La propriété FOUND de PostgreSQL indique si la requête la plus récente a donné des résultats. Cette propriété peut être modifiée par plusieurs commandes SQL, notamment INSERT, UPDATE, DELETE, MERGE, SELECT INTO, PERFORM, FETCH et FOR loops. Pour plus d’informations, veuillez vous référer à la documentation de PostgreSQL.

Dans Snowflake, il n’y a pas d’équivalent direct pour cette propriété, quel que soit le scénario.

  • INSERT

  • UPDATE

  • DELETE

  • MERGE

Le code sera converti en propriété SQLFOUND de Snowflake (vous trouverez ici la documentation), dont la fonctionnalité est similaire à celle de la propriété FOUND de PostgreSQL).

  • SELECT INTO - Récupère les données d’une requête et les stocke dans des variables

  • PERFORM - Exécute une requête et rejette les résultats

  • FETCH - Récupère les lignes d’un curseur dans des variables

Le code crée une fonction définie par l’utilisateur (UDF) nommée IS_FOUND_UDF qui réplique la fonctionnalité de la propriété FOUND de PostgreSQL.

La variable SQLFOUND ne met sa valeur à jour que lorsqu’une requête modifie au moins une ligne de la base de données. Si la requête la plus récente ne modifie aucune ligne, la valeur de SQLFOUND reste inchangée.

La fonction IS_FOUND_UDF renvoie TRUE uniquement lorsque l’instruction renvoie une ou plusieurs lignes. Si l’instruction ne renvoie aucune ligne, la fonction renvoie FALSE.

Exemple SQLFOUND
 INSERT INTO SampleTable (SampleColumn1)
VALUES ('SampleValue0.1');
Copy

Comme cette requête modifie une table, SQLFOUND fournit une fonctionnalité qui se rapproche le plus du comportement de PostgreSQL.

Exemple IS_FOUND_UDF
 SELECT SampleColumn FROM SampleTable;
Copy

La fonction IS_FOUND_UDF() est celle qui se rapproche le plus du comportement de PostgreSQL, car elle renvoie une ligne sans modifier les données.

Code source IS_FOUND_UDF
 CREATE OR REPLACE FUNCTION FOUND_UDF() 
RETURNS BOOLEAN
LANGUAGE SQL
IMMUTABLE
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "udf",  "convertedOn": "09/09/2024" }}'
AS
$$
SELECT (count(*) != 0) FROM TABLE(result_scan(last_query_id()))
$$;
Copy

Exemple de code

Instruction Insert :
 -- Found property used with INSERT statement.
CREATE OR REPLACE FUNCTION FoundUsingInsertFunction()
RETURNS BOOLEAN
AS
$$
  BEGIN
    INSERT INTO SampleTable (SampleColumn1)
    VALUES ('SampleValue0.1');
    RETURN FOUND;
  END;
$$
LANGUAGE plpgsql;
Copy
 -- Found property used with INSERT statement.
!!!RESOLVE EWI!!! /*** SSC-EWI-GP0003 - RETURNING FUNCTION TRANSLATED TO STORED PROCEDURE ***/!!!
CREATE OR REPLACE PROCEDURE FoundUsingInsertFunction ()
RETURNS BOOLEAN
LANGUAGE SQL
AS
$$
  BEGIN
    INSERT INTO SampleTable (SampleColumn1)
    VALUES ('SampleValue0.1');
    RETURN SQLFOUND /*** SSC-FDM-PG0001 - FOUND COULD HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE IN SOME SCENARIOS. ***/;
  END;
$$;
Copy
Instruction de mise à jour
 -- Found property used with UPDATE statement.
CREATE OR REPLACE FUNCTION FoundUsingUpdateFunction()
RETURNS BOOLEAN
AS
$$
    BEGIN
        UPDATE SampleTable 
        SET SampleColumn1 = 'SampleValue0.1' 
        WHERE SampleColumn1 = 'SampleValue0.1';
        RETURN FOUND;
    END;
$$
LANGUAGE plpgsql;
Copy
 -- Found property used with UPDATE statement.
!!!RESOLVE EWI!!! /*** SSC-EWI-GP0003 - RETURNING FUNCTION TRANSLATED TO STORED PROCEDURE ***/!!!
CREATE OR REPLACE PROCEDURE FoundUsingUpdateFunction ()
RETURNS BOOLEAN
LANGUAGE SQL
AS
$$
    BEGIN
        UPDATE SampleTable
        SET SampleColumn1 = 'SampleValue0.1'
        WHERE SampleColumn1 = 'SampleValue0.1';
        RETURN SQLFOUND /*** SSC-FDM-PG0001 - FOUND COULD HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE IN SOME SCENARIOS. ***/;
    END;
$$;
Copy
Instruction de suppression
 -- Found property used with DELETE statement.
CREATE OR REPLACE FUNCTION FoundUsingDeleteFunction()
RETURNS BOOLEAN
AS
$$
    BEGIN
        DELETE FROM SampleTable 
        WHERE SampleColumn1 = 'SampleValue0.1';
        RETURN FOUND;
    END;
$$
LANGUAGE plpgsql;
Copy
 -- Found property used with DELETE statement.
!!!RESOLVE EWI!!! /*** SSC-EWI-GP0003 - RETURNING FUNCTION TRANSLATED TO STORED PROCEDURE ***/!!!
CREATE OR REPLACE PROCEDURE FoundUsingDeleteFunction ()
RETURNS BOOLEAN
LANGUAGE SQL
AS
$$
    BEGIN
        DELETE FROM
            SampleTable
        WHERE SampleColumn1 = 'SampleValue0.1';
        RETURN SQLFOUND /*** SSC-FDM-PG0001 - FOUND COULD HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE IN SOME SCENARIOS. ***/;
    END;
$$;
Copy
Instruction Merge
 -- Found property used with MERGE statement.
CREATE OR REPLACE FUNCTION FoundUsingMergeFunction()
RETURNS BOOLEAN
AS
$$
    BEGIN
        MERGE INTO SampleTableB B
        USING (SELECT * FROM SampleTableA) A
        ON B.SampleColumn1 = A.SampleColumn2
        WHEN MATCHED THEN DELETE;
        RETURN FOUND;
    END;
$$
LANGUAGE plpgsql;
Copy
 -- Found property used with MERGE statement.
!!!RESOLVE EWI!!! /*** SSC-EWI-GP0003 - RETURNING FUNCTION TRANSLATED TO STORED PROCEDURE ***/!!!
CREATE OR REPLACE PROCEDURE FoundUsingMergeFunction ()
RETURNS BOOLEAN
LANGUAGE SQL
AS
$$
    BEGIN
        MERGE INTO SampleTableB B
        USING (SELECT * FROM SampleTableA) A
        ON B.SampleColumn1 = A.SampleColumn2
        WHEN MATCHED THEN DELETE !!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'MergeStatement' NODE ***/!!!;
        RETURN SQLFOUND /*** SSC-FDM-PG0001 - FOUND COULD HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE IN SOME SCENARIOS. ***/;
    END;
$$;
Copy
Instruction Select Into
 -- Found property used with SELECT INTO statement.
CREATE OR REPLACE FUNCTION FoundUsingSelectIntoFunction()
RETURNS BOOLEAN
AS
$$
    DECLARE 
        SampleNumber INTEGER;
    BEGIN
        SELECT 1 INTO SampleNumber;
        RETURN FOUND;
    END;
$$
LANGUAGE plpgsql;
Copy
 -- Found property used with SELECT INTO statement.
!!!RESOLVE EWI!!! /*** SSC-EWI-GP0003 - RETURNING FUNCTION TRANSLATED TO STORED PROCEDURE ***/!!!
CREATE OR REPLACE PROCEDURE FoundUsingSelectIntoFunction ()
RETURNS BOOLEAN
LANGUAGE SQL
AS
$$
    DECLARE
        SampleNumber INTEGER;
    BEGIN
        SELECT 1 INTO
            : SampleNumber;
        RETURN FOUND_UDF() /*** SSC-FDM-PG0001 - FOUND COULD HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE IN SOME SCENARIOS. ***/;
    END;
$$;
Copy
Instruction Execute :
 -- Found property used with PERFORM statement.
CREATE OR REPLACE FUNCTION FoundUsingPerformFunction()
RETURNS BOOLEAN
AS
$$
    BEGIN
        PERFORM 1;
        RETURN FOUND;
    END;
$$
LANGUAGE plpgsql;
Copy
 -- Found property used with PERFORM statement.
!!!RESOLVE EWI!!! /*** SSC-EWI-GP0003 - RETURNING FUNCTION TRANSLATED TO STORED PROCEDURE ***/!!!
CREATE OR REPLACE PROCEDURE FoundUsingPerformFunction ()
RETURNS BOOLEAN
LANGUAGE SQL
AS
$$
    BEGIN
        SELECT
            1;
        RETURN FOUND_UDF() /*** SSC-FDM-PG0001 - FOUND COULD HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE IN SOME SCENARIOS. ***/;
    END;
$$;
Copy
Instruction Fetch :
 -- Found property used with FETCH statement.
CREATE OR REPLACE FUNCTION FoundUsingFetchFunction ()
RETURNS BOOLEAN
AS
$$
    DECLARE
        SampleRow VARCHAR;
        SampleCursor CURSOR FOR SELECT EmptyColumn FROM EmptyTable;
    BEGIN
        OPEN SampleCursor;
        FETCH SampleCursor;
        CLOSE SampleCursor;
        RETURN FOUND;
    END;
$$
LANGUAGE plpgsql;
Copy
 -- Found property used with FETCH statement.
!!!RESOLVE EWI!!! /*** SSC-EWI-GP0003 - RETURNING FUNCTION TRANSLATED TO STORED PROCEDURE ***/!!!
CREATE OR REPLACE PROCEDURE FoundUsingFetchFunction ()
RETURNS BOOLEAN
LANGUAGE SQL
AS
$$
   DECLARE
       SampleRow VARCHAR;
       SampleCursor CURSOR FOR SELECT EmptyColumn FROM
           EmptyTable;
   BEGIN
       OPEN SampleCursor;
       !!!RESOLVE EWI!!! /*** SSC-EWI-PG0015 - FETCH CURSOR WITHOUT TARGET VARIABLES IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
       FETCH SampleCursor;
       CLOSE SampleCursor;
       RETURN FOUND_UDF() /*** SSC-FDM-PG0001 - FOUND COULD HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE IN SOME SCENARIOS. ***/;
   END;
$$;
Copy

Meilleures pratiques

SSC-FDM-PG0002

Description

Cet avertissement apparaît parce que le type de données bpchar (blank-padded char) peut se comporter différemment de varchar dans Snowflake. Bien que les deux types de données puissent stocker jusqu’à « n » caractères et utiliser l’espace de stockage en fonction de la longueur réelle des données, ils traitent différemment les espaces de fin. Dans bpchar, les espaces de fin ne sont pas stockés, alors que varchar de Snowflake les préserve.

Pour éviter de stocker des espaces vides inutiles, vous pouvez utiliser la fonction RTRIM. Toutefois, sachez que dans certains cas, cela peut ne pas fournir exactement la même fonctionnalité que le code d’origine.

Exemple de code

Code d’entrée :
 CREATE TABLE table1 (
    col1 BPCHAR, 
    col2 BPCHAR(20)
);
Copy
SELECT 'Y'::BPCHAR;

SELECT 'Y   '::BPCHAR(20);
SELECT COL1::BPCHAR(20) FROM tbl;
Copy
Code généré :
 CREATE TABLE table1 (
    col1 VARCHAR /*** SSC-FDM-PG0002 - BPCHAR CONVERTED TO VARCHAR. THESE TYPES MAY HAVE SOME FUNCTIONAL DIFFERENCES. ***/,
    col2 VARCHAR(20) /*** SSC-FDM-PG0002 - BPCHAR CONVERTED TO VARCHAR. THESE TYPES MAY HAVE SOME FUNCTIONAL DIFFERENCES. ***/
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "postgresql",  "convertedOn": "09/17/2024" }}';
Copy
 SELECT 'Y':: VARCHAR /*** SSC-FDM-PG0002 - BPCHAR CONVERTED TO VARCHAR. THESE TYPES MAY HAVE SOME FUNCTIONAL DIFFERENCES. ***/;

SELECT
    RTRIM( 'Y   ') :: VARCHAR(20) /*** SSC-FDM-PG0002 - BPCHAR CONVERTED TO VARCHAR. THESE TYPES MAY HAVE SOME FUNCTIONAL DIFFERENCES. ***/;

SELECT
    RTRIM( COL1) :: VARCHAR(20) /*** SSC-FDM-PG0002 - BPCHAR CONVERTED TO VARCHAR. THESE TYPES MAY HAVE SOME FUNCTIONAL DIFFERENCES. ***/
FROM
    tbl;
Copy

Meilleures pratiques

  • La fonction rtrim supprime les espaces de fin, ce qui peut aider à résoudre les différences de stockage. Bien que la conversion explicite s’en charge automatiquement, vous devrez peut-être utiliser rtrim manuellement dans d’autres situations. Pour en savoir plus sur rtrim, consultez la documentation de Snowflake RTRIM.

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

SSC-FDM-PG0003

Description

Cet avertissement indique que la conversion des données du format bytea au format binaire réduit considérablement la limite de taille maximale, qui passe de 1 gigaoctet (GB) à 8 mégaoctets (MB).

Exemple de code

Code d’entrée :
CREATE TABLE tbl(
    col BYTEA
);
Copy
Code généré :
 CREATE TABLE tbl (
    col BINARY /*** SSC-FDM-PG0003 - BYTEA CONVERTED TO BINARY. SIZE LIMIT REDUCED FROM 1GB TO 8MB ***/
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "postgresql",  "convertedOn": "09/17/2024" }}';
Copy

Meilleures pratiques

SSC-FDM-PG0004

Description

Le format de sortie de la date dépend de deux facteurs : le type d’horodatage et le paramètre timestamp_output_format. Pour plus de références, veuillez vous référer à la documentation de Snowflake.

Exemple de code

Code d’entrée :
 CREATE TABLE table1 (
    dt_update timestamp without time zone DEFAULT clock_timestamp()
);
Copy
Code généré :
 CREATE TABLE table1 (
    dt_update TIMESTAMP_NTZ DEFAULT CAST(
    --** SSC-FDM-PG0004 - THE DATE OUTPUT FORMAT MAY VARY DEPENDING ON THE TIMESTAMP TYPE AND THE TIMESTAMP_OUTPUT_FORMAT BEING USED. **
    CURRENT_TIMESTAMP() AS TIMESTAMP_NTZ)
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "postgresql",  "convertedOn": "09/17/2024" }}';
Copy

Exemples

Création de tables : un exemple de base

Cet exemple montre comment créer une table dans votre base de données.

Code d’entrée :

 CREATE TABLE sample2 (
    platform_id integer NOT NULL,
    dt_update timestamp with time zone DEFAULT clock_timestamp()
);
    
insert into postgres.public.sample2 (platform_id) values (1);
   
select *, clock_timestamp() from postgres.public.sample2;
Copy
 platform_id|dt_update                    |clock_timestamp              |
-----------+-----------------------------+-----------------------------+
          1|2023-02-05 22:47:34.275 -0600|2023-02-05 23:16:15.754 -0600|
Copy
Code généré :
 CREATE TABLE sample2 (
    platform_id integer NOT NULL,
    dt_update TIMESTAMP_TZ DEFAULT CAST(
--** SSC-FDM-PG0004 - THE DATE OUTPUT FORMAT MAY VARY DEPENDING ON THE TIMESTAMP TYPE AND THE TIMESTAMP_OUTPUT_FORMAT BEING USED. **
CURRENT_TIMESTAMP() AS TIMESTAMP_TZ)
);

insert into postgres.public.sample2 (platform_id) values (1);
ALTER SESSION SET timestamp_output_format = 'YYYY-MM-DD HH24:MI:SS.FF';

select *,
CURRENT_TIMESTAMP(3)
from
postgres.public.sample2;
Copy
 PLATFORM_ID   DT_UPDATE	                        CURRENT_TIMESTAMP(3)
1	      2023-02-05 20:52:30.082000000	2023-02-05 21:20:31.593
Copy

Utilisation de SELECT avec clock_timestamp() - Exemple

Code d’entrée
 select clock_timestamp();
Copy
 clock_timestamp        |
-----------------------+
2023-02-05 23:24:13.740|
Copy
Code de sortie
 ALTER SESSION SET timestamp_output_format = 'YYYY-MM-DD HH24:MI:SS.FF';
select
    CURRENT_TIMESTAMP(3);
Copy
 CURRENT_TIMESTAMP(3)
2023-02-05 21:29:24.258
Copy

Meilleures pratiques

SSC-FDM-PG0006

Description

Le fait de paramétrer plusieurs schémas dans un chemin de recherche n’est pas pris en charge dans Snowflake. Pour plus d’informations sur l’utilisation des schémas, veuillez vous référer à la documentation de Snowflake.

Exemple de code

Code d’entrée :
 SET SEARCH_PATH TO schema1, schema2, schema3;
Copy
Code généré :
 --** SSC-FDM-PG0006 - SET SEARCH PATH WITH MULTIPLE SCHEMAS IS NOT SUPPORTED IN SNOWFLAKE **
USE SCHEMA schema1 /*, schema2, schema3*/;
Copy

Meilleures pratiques

SSC-FDM-PG0007

Gravité

Faible

Description

Pour supprimer un commentaire dans PostgreSQL, vous utilisez NULL. Cependant, dans Snowflake, vous devez utiliser une chaîne vide ('') à la place. Les deux méthodes aboutissent au même résultat, à savoir la suppression du commentaire.

Exemple de code

Code d’entrée :
 COMMENT ON TABLE mytable IS NULL;
Copy
Code généré :
 COMMENT ON TABLE mytable IS '' /*** SSC-FDM-PG0007 - NULL IS CONVERTED TO '' AND MAY HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE. ***/;
Copy

Meilleures pratiques

SSC-FDM-PG0008

Description

L’instruction SELECT INTO n’est pas disponible dans Snowflake. Au lieu de cela, vous pouvez utiliser CREATE TABLE AS pour obtenir une fonctionnalité similaire. En outre, Snowflake maintient automatiquement des connecteurs de transaction pour toutes les tables afin de garantir l’intégrité des données et les capacités de récupération. Par conséquent, les tables comportant l’option UNLOGGED ne sont pas prises en charge par Snowflake.

Exemple de code

Code d’entrée :
 select column1
      into UNLOGGED NewTable
      from oldTable;
Copy
Code de sortie :
 CREATE TABLE IF NOT EXISTS NewTable AS
      select column1
--      --** SSC-FDM-PG0008 - SELECT INTO UNLOGGED TABLES ARE NOT SUPPORTED BY SNOWFLAKE. **
--            into UNLOGGED NewTable
            from
            oldTable;
Copy

Meilleures pratiques

SSC-FDM-PG0009

Description

Les numéros de séquence de Snowflake peuvent être séparés par des espaces. Bien que les nombres augmentent toujours (ou diminuent si vous utilisez une taille de pas négative), ils peuvent ne pas être consécutifs.

Exemple de code

Code d’entrée :
 SELECT nextval('seq1');
Copy
Code de sortie :
 SELECT seq1.nextval /*** SSC-FDM-PG0009 - THE SEQUENCE NEXTVAL PROPERTY SNOWFLAKE DOES NOT GUARANTEE GENERATING SEQUENCE NUMBERS WITHOUT GAPS. ***/;
Copy

Recommandations

SSC-FDM-PG0010

Description

Les opérateurs de changement au niveau du bit PostgreSQL << et >> sont traduits en fonctions de Snowflake BITSHIFTLEFT et BITSHIFTRIGHT. Veuillez noter que ces fonctions peuvent produire des résultats différents dans Snowflake par rapport à PostgreSQL en raison de différences dans le traitement des expressions.

Exemple de code

Code d’entrée :
 SELECT 1 << 127 AS resultShiftedLeft, 16 >> 32 AS resultShiftedRight;
Copy

resultShiftedLeft

resultShiftedRight

-2147483648

16

Code de sortie :
 SELECT
--** SSC-FDM-PG0010 - RESULTS MAY VARY DUE TO THE BEHAVIOR OF SNOWFLAKE'S BITSHIFTLEFT BITWISE FUNCTION **
BITSHIFTLEFT( 1, 127) AS resultShiftedLeft,
--** SSC-FDM-PG0010 - RESULTS MAY VARY DUE TO THE BEHAVIOR OF SNOWFLAKE'S BITSHIFTRIGHT BITWISE FUNCTION **
BITSHIFTRIGHT( 16, 32) AS resultShiftedRight;
Copy

resultShiftedLeft

resultShiftedRight

-170141183460469231731687303715884105728

0

Recommandations

SSC-FDM-PG0011

Description

Ce message apparaît lorsque la recherche de modèles inclut des spécifications COLLATE dans ses arguments. Étant donné que la fonction d’expression régulière de Snowflake ne prend pas en charge les spécifications COLLATE, la clause COLLATE doit être supprimée. Veuillez noter que la suppression de cette clause peut entraîner des résultats différents par rapport à la base de données source.

Exemple de code

Code d’entrée :
 CREATE TABLE collateTable (
col1 VARCHAR(20) COLLATE CASE_INSENSITIVE,
col2 VARCHAR(30) COLLATE CASE_SENSITIVE);

INSERT INTO collateTable values ('HELLO WORLD!', 'HELLO WORLD!');

SELECT
col1 SIMILAR TO 'Hello%' as ci,
col2 SIMILAR TO 'Hello%' as cs
FROM collateTable;
Copy

CI

CS

TRUE

FALSE

Code de sortie :

 CREATE TABLE collateTable (
col1 VARCHAR(20) COLLATE 'en-ci',
col2 VARCHAR(30) COLLATE 'en-cs'
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "redshift",  "convertedOn": "01/16/2025",  "domain": "test" }}';

INSERT INTO collateTable
values ('HELLO WORLD!', 'HELLO WORLD!');

SELECT
RLIKE(COLLATE(
--** SSC-FDM-PG0011 - THE USE OF THE COLLATE COLUMN CONSTRAINT HAS BEEN DISABLED FOR THIS PATTERN-MATCHING CONDITION. **
col1, ''), 'Hello.*', 's') as ci,
RLIKE(COLLATE(
--** SSC-FDM-PG0011 - THE USE OF THE COLLATE COLUMN CONSTRAINT HAS BEEN DISABLED FOR THIS PATTERN-MATCHING CONDITION. **
col2, ''), 'Hello.*', 's') as cs
FROM
collateTable;
Copy

CI

CS

FALSE

FALSE

Recommandations

  • Pour obtenir une équivalence fonctionnelle dans ces scénarios, vous pouvez ajouter manuellement ces paramètres à la fonction :

| Parameter | Description | | ——— | ————————- | | c | Correspondance sensible à la casse | | i | Case-insensitive matching |

SSC-FDM-PG0012

Description

Dans Redshift, lorsqu’une variable est marquée par NOT NULL, toute tentative d’affectation d’une valeur nulle entraîne une erreur d’environnement d’exécution. Cependant, Snowflake ne prend pas en charge cette contrainte. Au cours du processus de migration, la clause NOT NULL est supprimée, ce qui signifie que l’affectation de valeurs NULL à des variables sera autorisée et ne générera pas d’erreurs au cours de l’exécution.

Exemple de code

Code d’entrée :
 CREATE OR REPLACE PROCEDURE variable_Not_Null()
LANGUAGE plpgsql
AS $$
DECLARE
    v_notnull VARCHAR NOT NULL DEFAULT 'Test default';
BEGIN
    v_notnull := NULL;
    -- Procedure logic
END;
$$;
Copy

[22004] ERROR : Une valeur NULL ne peut pas être assignée à la variable « v_notnull » car elle a été déclarée avec une contrainte NOT NULL.

Code de sortie :
 CREATE OR REPLACE PROCEDURE variable_Not_Null ()
RETURNS VARCHAR
LANGUAGE SQL
AS $$
DECLARE
    --** SSC-FDM-PG0012 - NOT NULL CONSTRAINT HAS BEEN REMOVED. ASSIGNING NULL TO THIS VARIABLE WILL NO LONGER CAUSE A FAILURE. **
    v_notnull VARCHAR DEFAULT 'Test default';
BEGIN
    v_notnull := NULL;
    -- Procedure logic
END;
$$;
Copy

Cette opération s’exécutera avec succès dans Snowflake.

Recommendations

  • Vérifiez si la logique de la procédure empêche l’attribution d’une valeur NULL à cette variable.

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