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 variablesPERFORM
- Exécute une requête et rejette les résultatsFETCH
- 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');
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;
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()))
$$;
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;
-- 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;
$$;
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;
-- 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;
$$;
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;
-- 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;
$$;
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;
-- 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;
$$;
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;
-- 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;
$$;
Instruction Execute :¶
-- Found property used with PERFORM statement.
CREATE OR REPLACE FUNCTION FoundUsingPerformFunction()
RETURNS BOOLEAN
AS
$$
BEGIN
PERFORM 1;
RETURN FOUND;
END;
$$
LANGUAGE plpgsql;
-- 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;
$$;
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;
-- 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;
$$;
Meilleures pratiques¶
Pour une assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com
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)
);
SELECT 'Y'::BPCHAR;
SELECT 'Y '::BPCHAR(20);
SELECT COL1::BPCHAR(20) FROM tbl;
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" }}';
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;
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 utiliserrtrim
manuellement dans d’autres situations. Pour en savoir plus surrtrim
, 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
);
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" }}';
Meilleures pratiques¶
Pour plus de données, veuillez consulter la documentation de Snowflake sur le type de données binaire.
Si vous avez besoin d’aide, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com
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()
);
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" }}';
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;
platform_id|dt_update |clock_timestamp |
-----------+-----------------------------+-----------------------------+
1|2023-02-05 22:47:34.275 -0600|2023-02-05 23:16:15.754 -0600|
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;
PLATFORM_ID DT_UPDATE CURRENT_TIMESTAMP(3)
1 2023-02-05 20:52:30.082000000 2023-02-05 21:20:31.593
Utilisation de SELECT avec clock_timestamp() - Exemple
Code d’entrée¶
select clock_timestamp();
clock_timestamp |
-----------------------+
2023-02-05 23:24:13.740|
Code de sortie¶
ALTER SESSION SET timestamp_output_format = 'YYYY-MM-DD HH24:MI:SS.FF';
select
CURRENT_TIMESTAMP(3);
CURRENT_TIMESTAMP(3)
2023-02-05 21:29:24.258
Meilleures pratiques¶
Pour une assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com
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;
Code généré :¶
--** SSC-FDM-PG0006 - SET SEARCH PATH WITH MULTIPLE SCHEMAS IS NOT SUPPORTED IN SNOWFLAKE **
USE SCHEMA schema1 /*, schema2, schema3*/;
Meilleures pratiques¶
Pour une assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com
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;
Code généré :¶
COMMENT ON TABLE mytable IS '' /*** SSC-FDM-PG0007 - NULL IS CONVERTED TO '' AND MAY HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE. ***/;
Meilleures pratiques¶
Pour une assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com
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;
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;
Meilleures pratiques¶
Pour une assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com
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');
Code de sortie :¶
SELECT seq1.nextval /*** SSC-FDM-PG0009 - THE SEQUENCE NEXTVAL PROPERTY SNOWFLAKE DOES NOT GUARANTEE GENERATING SEQUENCE NUMBERS WITHOUT GAPS. ***/;
Recommandations¶
Pour une assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com
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;
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;
resultShiftedLeft |
resultShiftedRight |
---|---|
-170141183460469231731687303715884105728 |
0 |
Recommandations¶
Pour une assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com
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;
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;
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 |
Pour plus de détails, veuillez consulter ce lien.
Pour obtenir une assistance, contactez-nous à l’adresse suivante : snowconvert-support@snowflake.com
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;
$$;
[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;
$$;
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