SnowConvert: Diferenças funcionais do PostgreSQL

SSC-FDM-PG0001

Gravidade

Low

Descrição

A propriedade FOUND no PostgreSQL indica se a consulta mais recente retornou algum resultado. Essa propriedade pode ser modificada por vários comandos SQL, incluindo INSERT, UPDATE, DELETE, MERGE, SELECT INTO, PERFORM, FETCH e loops FOR. Para obter mais informações, consulte a documentação do PostgreSQL.

No Snowflake, não há equivalente direto para essa propriedade em nenhum cenário.

  • INSERT

  • UPDATE

  • DELETE

  • MERGE

O código será convertido para a propriedade SQLFOUND do Snowflake (aqui está a documentação), que funciona de forma semelhante à propriedade FOUND do PostgreSQL).

  • SELECT INTO - Recupera dados de uma consulta e os armazena em variáveis

  • PERFORM - Executa uma consulta e descarta os resultados

  • FETCH - Recupera linhas de um cursor em variáveis

O código criará uma função personalizada definida pelo usuário (UDF) chamada IS_FOUND_UDF que replica a funcionalidade da propriedade FOUND de PostgreSQL.

A variável SQLFOUND só atualiza seu valor quando uma consulta modifica pelo menos uma linha no banco de dados. Se a consulta mais recente não modificar nenhuma linha, o valor de SQLFOUND permanecerá inalterado.

A função IS_FOUND_UDF retorna TRUE somente quando a instrução retorna uma ou mais linhas. Se a instrução não retornar nenhuma linha, a função retornará FALSE.

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

Como essa consulta modifica uma tabela, SQLFOUND oferece a funcionalidade que mais se aproxima do comportamento do PostgreSQL.

Exemplo UDF IS_FOUND_
 SELECT SampleColumn FROM SampleTable;
Copy

A função IS_FOUND_UDF() é a que mais se aproxima do comportamento do PostgreSQL, pois retorna uma linha sem fazer nenhuma alteração nos dados.

Código-fonte UDF IS_FOUND_
 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

Exemplo de código

Instrução 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
Instrução de atualização
 -- 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
Excluir instrução
 -- 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
Instrução 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
Instrução 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
Instrução 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
Instrução 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

Práticas recomendadas

SSC-FDM-PG0002

Descrição

Esse aviso aparece porque o tipo de dados bpchar (blank-padded char) pode se comportar de forma diferente do varchar no Snowflake. Embora ambos os tipos de dados possam armazenar até «n» caracteres e usar o espaço de armazenamento com base no comprimento real dos dados, eles tratam os espaços finais de forma diferente. No bpchar, os espaços finais não são armazenados, enquanto o varchar do Snowflake os preserva.

Para evitar o armazenamento de espaços em branco desnecessários, você pode usar a função RTRIM. No entanto, esteja ciente de que, em alguns casos, isso pode não fornecer exatamente a mesma funcionalidade do código original.

Exemplo de código

Código de entrada:
 CREATE TABLE table1 (
    col1 BPCHAR, 
    col2 BPCHAR(20)
);
Copy
SELECT 'Y'::BPCHAR;

SELECT 'Y   '::BPCHAR(20);
SELECT COL1::BPCHAR(20) FROM tbl;
Copy
Código gerado:
 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

Práticas recomendadas

  • A função rtrim remove os espaços finais, o que pode ajudar a resolver as diferenças de armazenamento. Embora a conversão explícita trate disso automaticamente, talvez seja necessário usar rtrim manualmente em outras situações. Saiba mais sobre rtrim na documentação do Snowflake RTRIM.

  • Para obter assistência adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com

SSC-FDM-PG0003

Descrição

Esse aviso indica que a conversão de dados do formato bytea para binário reduz significativamente o limite máximo de tamanho, de 1 gigabyte (GB) para 8 megabytes (MB).

Exemplo de código

Código de entrada:
CREATE TABLE tbl(
    col BYTEA
);
Copy
Código gerado:
 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

Práticas recomendadas

SSC-FDM-PG0004

Descrição

O formato da saída de data depende de dois fatores: o tipo de Timestamp e a configuração timestamp_output_format. Para obter mais detalhes, consulte a documentação do Snowflake.

Exemplo de código

Código de entrada:
 CREATE TABLE table1 (
    dt_update timestamp without time zone DEFAULT clock_timestamp()
);
Copy
Código gerado:
 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

Exemplos

Criando tabelas: Um exemplo básico

Este exemplo demonstra como criar uma tabela em seu banco de dados.

Código de entrada:

 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
Código gerado:
 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

Usando SELECT com clock_timestamp() - Exemplo

Código de entrada
 select clock_timestamp();
Copy
 clock_timestamp        |
-----------------------+
2023-02-05 23:24:13.740|
Copy
Código de saída
 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

Práticas recomendadas

SSC-FDM-PG0006

Descrição

A definição de vários esquemas em um caminho de pesquisa não é compatível com o Snowflake. Para obter mais informações sobre o uso do esquema, consulte a documentação do Snowflake.

Exemplo de código

Código de entrada:
 SET SEARCH_PATH TO schema1, schema2, schema3;
Copy
Código gerado:
 --** SSC-FDM-PG0006 - SET SEARCH PATH WITH MULTIPLE SCHEMAS IS NOT SUPPORTED IN SNOWFLAKE **
USE SCHEMA schema1 /*, schema2, schema3*/;
Copy

Práticas recomendadas

SSC-FDM-PG0007

Gravidade

Low

Descrição

Para remover um comentário em PostgreSQL, você usa NULL. No entanto, no Snowflake, você deve usar uma cadeia de caracteres vazia (''). Ambos os métodos alcançam o mesmo resultado de remover o comentário.

Exemplo de código

Código de entrada:
 COMMENT ON TABLE mytable IS NULL;
Copy
Código gerado:
 COMMENT ON TABLE mytable IS '' /*** SSC-FDM-PG0007 - NULL IS CONVERTED TO '' AND MAY HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE. ***/;
Copy

Práticas recomendadas

SSC-FDM-PG0008

Descrição

A instrução SELECT INTO não está disponível no Snowflake. Em vez disso, você pode usar CREATE TABLE AS para obter funcionalidade semelhante. Além disso, o Snowflake mantém automaticamente os logs de transação de todas as tabelas para garantir a integridade dos dados e os recursos de recuperação. Como resultado, as tabelas com a opção UNLOGGED não são compatíveis com o Snowflake.

Exemplo de código

Código de entrada:
 select column1
      into UNLOGGED NewTable
      from oldTable;
Copy
Código de saída:
 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

Práticas recomendadas

SSC-FDM-PG0009

Descrição

Os números de sequência do Snowflake podem ter intervalos entre eles. Embora os números sempre aumentem (ou diminuam se estiver usando um tamanho de passo negativo), eles podem não ser consecutivos.

Exemplo de código

Código de entrada:
 SELECT nextval('seq1');
Copy
Código de saída:
 SELECT seq1.nextval /*** SSC-FDM-PG0009 - THE SEQUENCE NEXTVAL PROPERTY SNOWFLAKE DOES NOT GUARANTEE GENERATING SEQUENCE NUMBERS WITHOUT GAPS. ***/;
Copy

Recomendações

SSC-FDM-PG0010

Descrição

Os operadores de deslocamento bit a bit PostgreSQL << e >> são convertidos nas funções BITSHIFTLEFT e BITSHIFTRIGHT do Snowflake. Observe que essas funções podem produzir resultados diferentes no Snowflake em comparação com o PostgreSQL devido a diferenças no tratamento de expressões.

Exemplo de código

Código de entrada:
 SELECT 1 << 127 AS resultShiftedLeft, 16 >> 32 AS resultShiftedRight;
Copy

resultShiftedLeft

resultShiftedRight

-2147483648

16

Código de saída:
 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

Recomendações

SSC-FDM-PG0011

Descrição

Essa mensagem aparece quando a correspondência de padrões inclui especificações COLLATE em seus argumentos. Como a função de expressão regular do Snowflake não é compatível com as especificações de COLLATE, a cláusula COLLATE deve ser removida. Observe que a remoção dessa cláusula pode levar a resultados diferentes em comparação com o banco de dados de origem.

Exemplo de código

Código de entrada:
 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

Código de saída:

 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

Recomendações

  • Para obter equivalência funcional nesses cenários, você pode adicionar manualmente esses parâmetros à função:

| Parameter | Description | | ——— | ————————- | | c | Case-sensitive matching | | i | Case-insensitive matching |

SSC-FDM-PG0012

Descrição

No Redshift, quando uma variável é marcada com NOT NULL, a tentativa de atribuir um valor nulo causará um erro de tempo de execução. No entanto, o Snowflake não oferece suporte a essa restrição. Durante o processo de migração, a cláusula NOT NULL é removida, o que significa que a atribuição de valores NULL a variáveis será permitida e não gerará erros durante a execução.

Exemplo de código

Código de entrada:
 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: A NULL value cannot be assigned to the variable «v_notnull» because it was declared with a NOT NULL constraint.

Código de saída:
 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

Essa operação será executada com êxito no Snowflake.

Recommendations

  • Verifique se a lógica do procedimento impede que seja atribuído a essa variável um valor NULL.

  • Para obter assistência adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com