SnowConvert: PostgreSQL 기능 차이¶
SSC-FDM-PG0001¶
심각도¶
낮음
설명¶
PostgreSQL 의 FOUND 속성은 가장 최근 쿼리에서 결과가 반환되었는지 여부를 나타냅니다. 이 속성은 INSERT
, UPDATE
, DELETE
, MERGE
, SELECT INTO
, PERFORM
, FETCH
및 FOR
루프를 포함한 여러 SQL 명령으로 수정할 수 있습니다. 자세한 내용은 PostgreSQL 설명서 를 참조하십시오.
Snowflake에서는 어떤 시나리오에서도 이 속성에 대한 직접적인 상응하는 속성이 없습니다.
INSERT
UPDATE
DELETE
MERGE
코드는 Snowflake SQLFOUND
속성으로 변환됩니다(설명서), 이 속성은 PostgreSQL 의 FOUND
속성과 유사한 기능을 함).
SELECT INTO
- 쿼리에서 데이터를 검색하여 변수에 저장합니다PERFORM
- 쿼리를 실행하고 결과를 삭제합니다FETCH
- 커서에서 행을 변수로 검색합니다
이 코드는 PostgreSQL 에서 FOUND
속성의 기능을 복제하는 IS_FOUND_UDF
라는 사용자 정의 함수(UDF)를 생성합니다.
SQLFOUND
변수는 쿼리가 데이터베이스에서 행을 1개 이상 수정할 때만 값을 업데이트합니다. 가장 최근 쿼리가 행을 수정하지 않으면 SQLFOUND
값은 변경되지 않습니다.
IS_FOUND_UDF
함수는 문이 1개 이상의 행을 반환하는 경우에만 TRUE
를 반환합니다. 문이 행을 반환하지 않으면 함수는 FALSE
를 반환합니다.
SQLFOUND의 예¶
INSERT INTO SampleTable (SampleColumn1)
VALUES ('SampleValue0.1');
이 쿼리는 테이블을 수정하므로 SQLFOUND
는 PostgreSQL 의 동작과 가장 유사한 기능을 제공합니다.
IS_FOUND_UDF 예제¶
SELECT SampleColumn FROM SampleTable;
IS_FOUND_UDF()
함수는 데이터를 변경하지 않고 행을 반환하므로 PostgreSQL 의 동작과 가장 유사합니다.
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()))
$$;
코드 예제¶
문 삽입:¶
-- 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;
$$;
Update 문¶
-- 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;
$$;
Delete 문¶
-- 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;
$$;
문 병합¶
-- 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;
$$;
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;
$$;
문 실행:¶
-- 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;
$$;
문 가져오기:¶
-- 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;
$$;
모범 사례¶
추가 지원이 필요하면 snowconvert-support@Snowflake.com으로 문의해 주십시오.
SSC-FDM-PG0002¶
설명¶
이 경고는 Snowflake에서 bpchar(빈칸으로 채워진 문자) 데이터 타입이 varchar와 다르게 작동할 수 있기 때문에 제공됩니다. 두 데이터 타입 모두 최대 “n”개의 문자를 저장할 수 있고 실제 데이터 길이에 따라 저장 공간을 사용할 수 있지만, 후행 공백은 다르게 처리합니다. bpchar에서는 후행 공백이 저장되지 않지만, Snowflake의 varchar는 후행 공백을 보존합니다.
불필요한 공백을 저장하지 않으려면 RTRIM 함수를 사용하면 됩니다. 그러나 경우에 따라 원본 코드와 정확히 동일한 기능을 제공하지 못할 수도 있습니다.
코드 예제¶
입력 코드:¶
CREATE TABLE table1 (
col1 BPCHAR,
col2 BPCHAR(20)
);
SELECT 'Y'::BPCHAR;
SELECT 'Y '::BPCHAR(20);
SELECT COL1::BPCHAR(20) FROM tbl;
생성된 코드:¶
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;
모범 사례¶
rtrim
함수는 후행 공백을 제거하여 저장소 차이를 해결하는 데 도움이 될 수 있습니다. 명시적 형변환 은 이 작업을 자동으로 처리하지만, 다른 상황에서는rtrim
을 수동으로 사용해야 할 수도 있습니다. 자세한 내용은 Snowflake RTRIM 설명서의rtrim
섹션을 참조하십시오.추가 지원이 필요하면 snowconvert-support@Snowflake.com으로 문의해 주십시오.
SSC-FDM-PG0003¶
설명¶
이 경고는 데이터를 바이트 형식에서 이진 형식으로 변환하면 최대 크기 제한이 1기가바이트(GB)에서 8메가바이트(MB)로 크게 줄어든다는 것을 나타냅니다.
코드 예제¶
입력 코드:¶
CREATE TABLE tbl(
col BYTEA
);
생성된 코드:¶
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" }}';
모범 사례¶
자세한 내용은 이진 데이터 타입 에 대한 Snowflake 설명서를 참조하십시오.
지원이 필요하면 snowconvert-support@Snowflake.com으로 문의해 주십시오.
SSC-FDM-PG0004¶
설명¶
날짜 출력 형식은 타임스탬프 유형과 timestamp_output_format 설정이라는 두 가지 요소에 따라 달라집니다. 자세한 내용은 Snowflake 설명서 를 참조하십시오.
코드 예제¶
입력 코드:¶
CREATE TABLE table1 (
dt_update timestamp without time zone DEFAULT clock_timestamp()
);
생성된 코드:¶
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" }}';
예¶
테이블 생성하기: 기본 예제
이 예는 데이터베이스에서 테이블을 생성하는 방법을 보여줍니다.
입력 코드:¶
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|
생성된 코드:¶
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
clock_timestamp()와 함께 SELECT 사용 - 예제
입력 코드¶
select clock_timestamp();
clock_timestamp |
-----------------------+
2023-02-05 23:24:13.740|
출력 코드¶
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
모범 사례¶
추가 지원이 필요하면 snowconvert-support@Snowflake.com으로 문의해 주십시오.
SSC-FDM-PG0006¶
설명¶
검색 경로에 여러 스키마를 설정하는 것은 Snowflake에서 지원되지 않습니다. 스키마 사용법에 대한 자세한 내용은 Snowflake 설명서 를 참조하십시오.
코드 예제¶
입력 코드:¶
SET SEARCH_PATH TO schema1, schema2, schema3;
생성된 코드:¶
--** SSC-FDM-PG0006 - SET SEARCH PATH WITH MULTIPLE SCHEMAS IS NOT SUPPORTED IN SNOWFLAKE **
USE SCHEMA schema1 /*, schema2, schema3*/;
모범 사례¶
추가 지원이 필요하면 snowconvert-support@Snowflake.com으로 문의해 주십시오.
SSC-FDM-PG0007¶
심각도¶
낮음
설명¶
PostgreSQL 에서 설명을 제거하려면 NULL
을 사용합니다. 그러나 Snowflake에서는 빈 문자열(''
)을 대신 사용해야 합니다. 두 방법 모두 설명을 제거한다는 동일한 결과를 얻을 수 있습니다.
코드 예제¶
입력 코드:¶
COMMENT ON TABLE mytable IS NULL;
생성된 코드:¶
COMMENT ON TABLE mytable IS '' /*** SSC-FDM-PG0007 - NULL IS CONVERTED TO '' AND MAY HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE. ***/;
모범 사례¶
추가 지원이 필요하면 snowconvert-support@Snowflake.com으로 문의해 주십시오.
SSC-FDM-PG0008¶
설명¶
SELECT INTO
문은 Snowflake에서 사용할 수 없습니다. 대신 CREATE TABLE AS
를 사용하여 유사한 기능을 구현할 수 있습니다. 또한 Snowflake는 모든 테이블의 트랜잭션 로그를 자동으로 유지 관리하여 데이터 무결성 및 복구 기능을 보장합니다. 따라서 UNLOGGED
옵션이 있는 테이블은 Snowflake에서 지원되지 않습니다.
코드 예제¶
입력 코드:¶
select column1
into UNLOGGED NewTable
from oldTable;
출력 코드:¶
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;
모범 사례¶
추가 지원이 필요하면 snowconvert-support@Snowflake.com으로 문의해 주십시오.
SSC-FDM-PG0009¶
설명¶
Snowflake의 시퀀스 번호 사이에 공백이 있을 수 있습니다. 숫자는 항상 증가하지만(음수 스텝 크기를 사용하는 경우 감소) 연속적이지 않을 수 있습니다.
코드 예제¶
입력 코드:¶
SELECT nextval('seq1');
출력 코드:¶
SELECT seq1.nextval /*** SSC-FDM-PG0009 - THE SEQUENCE NEXTVAL PROPERTY SNOWFLAKE DOES NOT GUARANTEE GENERATING SEQUENCE NUMBERS WITHOUT GAPS. ***/;
권장 사항¶
추가 지원이 필요하면 snowconvert-support@Snowflake.com으로 문의해 주십시오.
SSC-FDM-PG0010¶
설명¶
PostgreSQL 비트 단위 시프트 연산자 <<
and >>
는 Snowflake의 BITSHIFTLEFT
및 BITSHIFTRIGHT
함수로 변환됩니다. 이러한 함수는 식 처리의 차이로 인해 PostgreSQL 과 비교하여 Snowflake에서 다른 결과를 생성할 수 있습니다.
코드 예제¶
입력 코드:¶
SELECT 1 << 127 AS resultShiftedLeft, 16 >> 32 AS resultShiftedRight;
resultShiftedLeft |
resultShiftedRight |
---|---|
-2147483648 |
16 |
출력 코드:¶
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 |
권장 사항¶
추가 지원이 필요하면 snowconvert-support@Snowflake.com으로 문의해 주십시오.
SSC-FDM-PG0011¶
설명¶
이 메시지는 패턴 일치에 COLLATE 사양이 인자에 포함된 경우에 표시됩니다. Snowflake의 정규식 함수는 COLLATE 사양을 지원하지 않으므로 COLLATE 절을 제거해야 합니다. 이 절을 제거하면 소스 데이터베이스와 다른 결과가 나올 수 있습니다.
코드 예제¶
입력 코드:¶
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 |
출력 코드:
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 |
권장 사항¶
이러한 시나리오에서 기능적 동등성을 달성하려면 이러한 매개 변수를 함수에 수동으로 추가할 수 있습니다.
| Parameter | 설명 | | ——— | ————————- | | c
| 대/소문자를 구분하는 일치 | | i
| Case-insensitive matching |
자세한 내용은 이 링크 를 참조하십시오.
지원이 필요하면 snowconvert-support@Snowflake.com으로 문의해 주십시오.
SSC-FDM-PG0012¶
설명¶
Redshift에서 변수가 NOT NULL 로 표시된 경우 null 값을 할당하려고 하면 런타임 오류가 발생합니다. 그러나 Snowflake는 이 제약 조건을 지원하지 않습니다. 마이그레이션 프로세스 중에 NOT NULL 절이 제거되므로 NULL 값을 변수에 할당하는 것이 허용되며 실행 중에 오류가 발생하지 않습니다.
코드 예제¶
입력 코드:¶
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: NULL 값이 NOT NULL 제약 조건으로 선언되었으므로 변수 “v_notnull”에 할당할 수 없습니다.
출력 코드:¶
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;
$$;
이 작업은 Snowflake에서 성공적으로 실행됩니다.
Recommendations
프로시저의 논리로 인해 이 변수에
NULL
값이 할당되지 않는지 확인합니다.추가 지원이 필요하면 snowconvert-support@Snowflake.com으로 문의해 주십시오.