SnowConvert: Transact-SQL 기능적 차이점¶
Supported Environments
[x] Microsoft SQL Server
[x] Microsoft Azure Synapse Analytics
SSC-FDM-TS0001¶
참고
이 FDM 은 더 이상 사용되지 않습니다. 자세한 내용은 SSC-EWI-TS0077 섹션을 참조하십시오.
설명¶
이 오류는 Snowflake가 지원하지 않는 데이터 정렬 절을 사용하려고 할 때 표시됩니다.
코드 예제¶
입력 코드:¶
SELECT 'a' COLLATE Albanian_BIN;
SELECT 'a' COLLATE Albanian_CI_AI;
CREATE TABLE ExampleTable (
ID INT,
Name VARCHAR(50) COLLATE collateName
);
생성된 코드:¶
SELECT 'a'
-- --** SSC-FDM-TS0001 - COLLATION Albanian_BIN NOT SUPPORTED **
-- COLLATE Albanian_BIN
;
SELECT 'a'
-- --** SSC-FDM-TS0001 - COLLATION Albanian_CI_AI NOT SUPPORTED **
-- COLLATE Albanian_CI_AI
;
CREATE OR REPLACE TABLE ExampleTable (
ID INT,
Name VARCHAR(50)
-- --** SSC-FDM-TS0001 - COLLATION collateName NOT SUPPORTED **
-- COLLATE collateName
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
;
모범 사례¶
사용자 측의 작업은 필요하지 않습니다.
추가 지원이 필요하면 snowconvert-support@Snowflake.com으로 문의해 주십시오.
SSC-FDM-TS0002¶
설명¶
이 오류는 Snowflake가 지원하지 않는 데이터 정렬 절을 사용할 때 표시됩니다.
코드 예제¶
입력 코드:¶
SELECT 'a' COLLATE Latin1_General_CI_AS_WS;
생성된 코드:¶
SELECT 'a' COLLATE 'EN-CI-AS' /*** SSC-FDM-TS0002 - COLLATION FOR VALUE WS NOT SUPPORTED ***/;
모범 사례¶
사용자 측의 작업은 필요하지 않습니다.
추가 지원이 필요하면 snowconvert-support@Snowflake.com으로 문의해 주십시오.
SSC-FDM-TS0003¶
설명¶
이 메시지는 특정 열 세트를 반환하는 XP_LOGININFO 프로시저를 실행할 때 표시됩니다. 이러한 열에 대한 자세한 내용은 SQL 서버 설명서 를 참조하십시오.
account name | type | privilege | mapped login name | permission path |
사용 가능한 역할을 파악하려면 Snowflake에서 APPLICABLE_ROLES 뷰를 쿼리할 수 있습니다. 이 뷰는 역할 정보가 포함된 열 세트를 제공합니다. 자세한 내용은 Snowflake 설명서 를 참조하십시오.
GRANTEE |
ROLE_NAME |
ROLE_OWNER |
IS_GRANTABLE |
---|
SQL 서버 소스 열은 다음 테이블에 표시된 대로 Snowflake 열에 매핑됩니다. 이러한 매핑은 정확한 등가물이 아닐 수 있다는 점에 유의하십시오.
SQL Server | SnowFlake | |
---|---|---|
account name | GRANTEE | |
type | ROLE_OWNER | |
privilege | ROLE_NAME | |
mapped login name | GRANTEE | |
permission path | NULL |
코드 예시¶
입력 코드:¶
EXEC xp_logininfo
EXEC xp_logininfo 'USERNAME'
생성된 코드:¶
--** SSC-FDM-TS0003 - XP_LOGININFO MAPPED TO CUSTOM UDF XP_LOGININFO_UDF AND MIGHT HAVE DIFFERENT BEHAVIOR **
SELECT
*
FROM
TABLE(XP_LOGININFO_UDF());
--** SSC-FDM-TS0003 - XP_LOGININFO MAPPED TO CUSTOM UDF XP_LOGININFO_UDF AND MIGHT HAVE DIFFERENT BEHAVIOR **
SELECT
*
FROM
TABLE(XP_LOGININFO_UDF('USERNAME'));
모범 사례¶
추가 지원이 필요하면 snowconvert-support@Snowflake.com으로 문의해 주십시오.
SSC-FDM-TS0004¶
설명¶
이 메시지는 BULK INSERT
작업이 변환되고 PUT
명령이 출력 코드에 포함된 경우에 표시됩니다. PUT
명령은 SnowSQL 웹 UI 를 통해 실행할 수 없으므로 사용자는 이 명령을 실행하기 전에 시스템에 Snowflake 명령줄 인터페이스(SnowCLI)가 설치되어 있어야 합니다.
코드 예제¶
입력 코드:¶
BULK INSERT #temptable FROM 'path/to/file.txt'
WITH
(
FIELDTERMINATOR ='\t',
ROWTERMINATOR ='\n'
);
생성된 코드:¶
CREATE OR REPLACE FILE FORMAT FILE_FORMAT_638466175888203490
FIELD_DELIMITER = '\t'
RECORD_DELIMITER = '\n';
CREATE OR REPLACE STAGE STAGE_638466175888203490
FILE_FORMAT = FILE_FORMAT_638466175888203490;
--** SSC-FDM-TS0004 - PUT STATEMENT IS NOT SUPPORTED ON WEB UI. YOU SHOULD EXECUTE THE CODE THROUGH THE SNOWFLAKE CLI **
PUT file://path/to/file.txt @STAGE_638466175888203490 AUTO_COMPRESS = FALSE;
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "#temptable" **
COPY INTO T_temptable FROM @STAGE_638466175888203490/file.txt;
모범 사례¶
Snowflake 명령줄 인터페이스(SnowCLI)를 설치합니다.
추가 지원이 필요하면 snowconvert-support@Snowflake.com으로 문의해 주십시오.
SSC-FDM-TS0005¶
설명¶
이 함수 마이그레이션 세부 정보(FMD)는 소스 데이터베이스의 TRY_CONVERT 또는 TRY_CAST 작업을 Snowflake의 TRY_CAST 함수로 직접 변환할 수 없을 때 추가됩니다.
Snowflake의 TRY_CAST 함수는 문자열 식만 변환하는 것으로 제한되어 있는 반면, SQL 서버의 TRY_CONVERT
, TRY_CAST
함수는 좀 더 유연하여 모든 데이터 타입의 식을 변환할 수 있습니다.
Snowflake TRY_CAST
함수로의 변환은 현재 문자열 표현식 또는 컨텍스트에 따라 문자열로 식별할 수 있는 표현식으로 제한됩니다.
코드 예제¶
입력 코드:¶
SELECT TRY_CAST(14.85 AS INT);
SELECT TRY_CONVERT(VARCHAR, 1234);
SELECT TRY_CONVERT(CHAR, 1);
SELECT TRY_CONVERT(SQL_VARIANT, '2017-01-01 12:00:00');
SELECT TRY_CONVERT(GEOGRAPHY, 'LINESTRING(-122.360 47.656, -122.343 47.656 )');
생성된 코드:¶
SELECT
CAST(14.85 AS INT) /*** SSC-FDM-TS0005 - TRY_CONVERT/TRY_CAST COULD NOT BE CONVERTED TO TRY_CAST ***/;
SELECT
TO_VARCHAR(1234);
SELECT
TO_CHAR(1);
SELECT
TO_VARIANT('2017-01-01 12:00:00');
SELECT
TO_GEOGRAPHY('LINESTRING(-122.360 47.656, -122.343 47.656 )');
모범 사례¶
사용자 측의 작업은 필요하지 않습니다.
추가 지원이 필요하면 snowconvert-support@Snowflake.com으로 문의해 주십시오.
SSC-FDM-TS0006¶
설명¶
이 메시지는 EXECUTE AS 'user_name'
절이 포함된 프로시저를 SnowConvert 가 감지할 때 표시됩니다. Snowflake는 이 기능을 지원하지 않으므로 EXECUTE AS CALLER
로 자동 변환됩니다.
이 매개 변수는 프로시저 실행 방식을 제어하는 보안 권한을 정의합니다.
참고
절 기능에 대한 자세한 내용은 설명서 를 참조하십시오.
코드 예제¶
입력 코드:¶
CREATE PROCEDURE SelectAllCustomers
WITH EXECUTE AS 'user_name'
AS
BEGIN
SELECT * FROM Customers;
END;
생성된 코드:¶
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "Customers" **
CREATE OR REPLACE PROCEDURE SelectAllCustomers ()
RETURNS TABLE()
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
EXECUTE AS CALLER
--** SSC-FDM-TS0006 - EXECUTE AS 'user_name' CLAUSE DOES NOT EXIST IN SNOWFLAKE AND THE USER CALLING THE PROCEDURE SHOULD HAVE ALL THE REQUIRED PRIVILEGES **
AS
$$
DECLARE
ProcedureResultSet RESULTSET;
BEGIN
ProcedureResultSet := (
SELECT
*
FROM
Customers);
RETURN TABLE(ProcedureResultSet);
END;
$$;
모범 사례¶
사용자 측의 작업은 필요하지 않습니다.
추가 지원이 필요하면 snowconvert-support@Snowflake.com으로 문의해 주십시오.
SSC-FDM-TS0007¶
설명¶
SnowConvert 가 FOR REPLICATION
절이 포함된 프로시저를 감지하면 이 메시지가 표시됩니다. Snowflake는 이 기능을 지원하지 않으므로 변환 중에 절이 자동으로 제거됩니다.
이 프로시저는 복제를 위해 특별히 설계되었으며 구리더 측에서는 실행할 수 없습니다.
참고
이 절의 기능에 대한 자세한 내용은 설명서 를 참조하십시오.
코드 예제¶
입력 코드:¶
CREATE PROCEDURE SelectAllCustomers
WITH FOR REPLICATION
AS
BEGIN
SELECT * FROM Customers;
END;
생성된 코드:¶
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "Customers" **
CREATE OR REPLACE PROCEDURE SelectAllCustomers ()
RETURNS TABLE()
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
EXECUTE AS CALLER
--** SSC-FDM-TS0007 - FOR REPLICATION CLAUSE DOES NOT EXIST IN SNOWFLAKE **
AS
$$
DECLARE
ProcedureResultSet RESULTSET;
BEGIN
ProcedureResultSet := (
SELECT
*
FROM
Customers);
RETURN TABLE(ProcedureResultSet);
END;
$$;
모범 사례¶
사용자 측의 작업은 필요하지 않습니다.
추가 지원이 필요하면 snowconvert-support@Snowflake.com으로 문의해 주십시오.
SSC-FDM-TS0008¶
설명¶
FORMATMESSAGE
함수가 FORMATMESSAGE_UDF
로 대체되었기 때문에 감지되면 경고가 표시됩니다. FORMATMESSAGE_UDF
는 모든 형식 유형을 올바르게 처리하지 못할 수 있으며 특정 상황에서 오류가 발생할 수 있습니다.
음수 값은 변환되지 않고 음수 부호가 그대로 유지됩니다. 형식 지정자 %I64d
는 UDFs 와 호환되지 않으며 사용 시 오류가 발생합니다.
FORMATMESSAGE_UDF 함수에서 제공된 인자 수가 메시지 템플릿의 자리 표시자 수와 일치하지 않으면 오류가 발생합니다.
이 사용자 정의 함수(UDF)는 메시지 번호 식별자를 처리할 수 없습니다.
코드 예제¶
입력 코드:¶
SELECT FORMATMESSAGE('Unsigned int %u, %u', 50, -50); -- Unsigned int 50, 4294967246
SELECT FORMATMESSAGE('Unsigned octal %o, %o', 50, -50); -- Unsigned octal 62, 37777777716
SELECT FORMATMESSAGE('Unsigned hexadecimal %X, %x', -11, -50); -- Unsigned hexadecimal FFFFFFF5, ffffffce
SELECT FORMATMESSAGE('Unsigned octal with prefix: %#o', -50); -- Unsigned octal with prefix: 037777777716
SELECT FORMATMESSAGE('Unsigned hexadecimal with prefix: %#X, %x', -11,-50); -- Unsigned hexadecimal with prefix: 0XFFFFFFF5, ffffffce
SELECT FORMATMESSAGE('Bigint %I64d', 3000000000); -- Bigint 3000000000
SELECT FORMATMESSAGE('My message: %s %s %s', 'Hello', 'World'); -- My message: Hello World (null)
생성된 코드:¶
SELECT
--** SSC-FDM-TS0008 - FORMATMESSAGE WAS CONVERTED TO CUSTOM UDF FORMATMESSAGE_UDF AND IT MIGHT HAVE A DIFFERENT BEHAVIOR. **
FORMATMESSAGE_UDF('Unsigned int %u, %u', ARRAY_CONSTRUCT(50, -50)); -- Unsigned int 50, 4294967246
SELECT
--** SSC-FDM-TS0008 - FORMATMESSAGE WAS CONVERTED TO CUSTOM UDF FORMATMESSAGE_UDF AND IT MIGHT HAVE A DIFFERENT BEHAVIOR. **
FORMATMESSAGE_UDF('Unsigned octal %o, %o', ARRAY_CONSTRUCT(50, -50)); -- Unsigned octal 62, 37777777716
SELECT
--** SSC-FDM-TS0008 - FORMATMESSAGE WAS CONVERTED TO CUSTOM UDF FORMATMESSAGE_UDF AND IT MIGHT HAVE A DIFFERENT BEHAVIOR. **
FORMATMESSAGE_UDF('Unsigned hexadecimal %X, %x', ARRAY_CONSTRUCT(-11, -50)); -- Unsigned hexadecimal FFFFFFF5, ffffffce
SELECT
--** SSC-FDM-TS0008 - FORMATMESSAGE WAS CONVERTED TO CUSTOM UDF FORMATMESSAGE_UDF AND IT MIGHT HAVE A DIFFERENT BEHAVIOR. **
FORMATMESSAGE_UDF('Unsigned octal with prefix: %#o', ARRAY_CONSTRUCT(-50)); -- Unsigned octal with prefix: 037777777716
SELECT
--** SSC-FDM-TS0008 - FORMATMESSAGE WAS CONVERTED TO CUSTOM UDF FORMATMESSAGE_UDF AND IT MIGHT HAVE A DIFFERENT BEHAVIOR. **
FORMATMESSAGE_UDF('Unsigned hexadecimal with prefix: %#X, %x', ARRAY_CONSTRUCT(-11, -50)); -- Unsigned hexadecimal with prefix: 0XFFFFFFF5, ffffffce
SELECT
--** SSC-FDM-TS0008 - FORMATMESSAGE WAS CONVERTED TO CUSTOM UDF FORMATMESSAGE_UDF AND IT MIGHT HAVE A DIFFERENT BEHAVIOR. **
FORMATMESSAGE_UDF('Bigint %I64d', ARRAY_CONSTRUCT(3000000000)); -- Bigint 3000000000
SELECT
--** SSC-FDM-TS0008 - FORMATMESSAGE WAS CONVERTED TO CUSTOM UDF FORMATMESSAGE_UDF AND IT MIGHT HAVE A DIFFERENT BEHAVIOR. **
FORMATMESSAGE_UDF('My message: %s %s %s', ARRAY_CONSTRUCT('Hello', 'World')); -- My message: Hello World (null)
모범 사례¶
메시지에
%I64d
자리 표시자를 사용하지 마십시오.첫 번째 인자로 메시지 ID 대신 직접 문자열 메시지를 사용합니다.
자리 표시자 수가 메시지 뒤에 오는 인자 수와 일치하는지 확인합니다.
추가 지원이 필요하면 snowconvert-support@Snowflake.com으로 문의해 주십시오.
SSC-FDM-TS0009¶
설명¶
이 경고는 열이 ENCRYPTED WITH
옵션으로 정의된 경우 표시됩니다. Snowflake는 열 수준 암호화를 지원하지 않으므로 변환 프로세스 중에 이 옵션이 제거되고 경고 메시지가 생성됩니다.
코드 예제¶
입력 코드:¶
CREATE TABLE [SCHEMA1].[TABLE1] (
[COL1] NVARCHAR(60)
ENCRYPTED WITH (
COLUMN_ENCRYPTION_KEY = MyCEK,
ENCRYPTION_TYPE = RANDOMIZED,
ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256'
)
);
생성된 코드:¶
CREATE OR REPLACE TABLE SCHEMA1.TABLE1 (
COL1 VARCHAR(60)
-- --** SSC-FDM-TS0009 - ENCRYPTED WITH NOT SUPPORTED IN SNOWFLAKE **
-- ENCRYPTED WITH (
-- COLUMN_ENCRYPTION_KEY = MyCEK,
-- ENCRYPTION_TYPE = RANDOMIZED,
-- ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256'
-- )
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"transact"}}'
;
모범 사례¶
사용자 측의 작업은 필요하지 않습니다.
추가 지원이 필요하면 snowconvert-support@Snowflake.com으로 문의해 주십시오.
SSC-FDM-TS0010¶
설명¶
이 경고는 SQL 서버 함수 DB_NAME 이 Snowflake의 CURRENT_DATABASE 함수로 변환될 때 표시됩니다. Snowflake의 CURRENT_DATABASE 함수는 데이터베이스 IDs 를 매개 변수로 지원하지 않고 현재 데이터베이스의 이름만 반환하므로 이 변환은 코드의 동작에 영향을 줄 수 있습니다.
코드 예제¶
입력 코드:¶
SELECT DB_NAME(someId);
생성된 코드:¶
SELECT
CURRENT_DATABASE() /*** SSC-FDM-TS0010 - CURRENT_DATABASE function has different behavior in certain cases ***/;
모범 사례¶
사용자 측의 작업은 필요하지 않습니다.
추가 지원이 필요하면 snowconvert-support@Snowflake.com으로 문의해 주십시오.
SSC-FDM-TS0011¶
참고
이 FDM 는 더 이상 지원되지 않습니다. 자세한 내용은 SSC-EWI-TS0078 섹션을 참조하십시오.
설명¶
이 오류는 함수 호출, 변수 이름 또는 명명된 상수와 같은 식이 스위치 문에서 기본 대소문 뒤에 위치할 때 발생합니다.
Snowflake는 숫자나 문자열과 같은 명시적 상수 값만 직접 입력으로 허용합니다.
코드 예제¶
입력 코드:¶
ALTER TABLE
T_ALTERTABLETEST
ADD
COLUMN COL10 INTEGER DEFAULT RANDOM(10);
생성된 코드:¶
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECTS "T_ALTERTABLETEST", "RANDOM" **
ALTER TABLE IF EXISTS T_ALTERTABLETEST
ADD
COLUMN COL10 INTEGER
-- --** SSC-FDM-TS0011 - DEFAULT OPTION NOT ALLOWED IN SNOWFLAKE **
-- DEFAULT RANDOM(10)
;
Document headings start at H4, not H1 [myst.header]¶
추가 지원이 필요하면 snowconvert-support@Snowflake.com으로 문의해 주십시오.
SSC-FDM-TS0012¶
설명¶
이 경고는 변환 중에 시스템이 열의 반환 유형을 확인할 수 없는 경우 테이블 값 사용자 정의 함수에 표시됩니다. 이러한 경우 SELECT
문의 CAST
연산과 일치하도록 STRING
이 기본 유형으로 자동 사용됩니다.
코드 예제¶
입력 코드:¶
CREATE FUNCTION GetDepartmentInfo()
RETURNS TABLE
AS
RETURN
(
SELECT DepartmentID, Name, GroupName
FROM HumanResources.Department
);
생성된 코드:¶
CREATE OR REPLACE FUNCTION GetDepartmentInfo ()
RETURNS TABLE(
DepartmentID STRING /*** SSC-FDM-TS0012 - INFORMATION FOR THE COLUMN DepartmentID WAS NOT FOUND. STRING DATATYPE USED TO MATCH CAST AS STRING OPERATION ***/,
Name STRING /*** SSC-FDM-TS0012 - INFORMATION FOR THE COLUMN Name WAS NOT FOUND. STRING DATATYPE USED TO MATCH CAST AS STRING OPERATION ***/,
GroupName STRING /*** SSC-FDM-TS0012 - INFORMATION FOR THE COLUMN GroupName WAS NOT FOUND. STRING DATATYPE USED TO MATCH CAST AS STRING OPERATION ***/
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
AS
$$
SELECT
CAST(DepartmentID AS STRING),
CAST(Name AS STRING),
CAST(GroupName AS STRING)
FROM
HumanResources.Department
$$;
모범 사례¶
찾을 수 없는 데이터 타입을 확인하고
RETURNS TABLE
문에서 업데이트하십시오.추가 지원이 필요하면 snowconvert-support@Snowflake.com으로 문의해 주십시오.
SSC-FDM-TS0013¶
설명¶
이 경고는 소스 코드에 수정할 수 있는 커서가 포함되어 있을 때 표시됩니다. Snowflake Scripting에서 커서 행은 읽기 전용이며 수정할 수 없습니다.
코드 예시:¶
입력 코드:¶
CREATE OR ALTER PROCEDURE modifiablecursorTest
AS
BEGIN
-- Should be marked with SSC-FDM-TS0013
DECLARE CursorVar CURSOR
FOR
SELECT FirstName
FROM vEmployee;
DECLARE CursorVar2 INSENSITIVE CURSOR
FOR
SELECT FirstName
FROM vEmployee;
DECLARE CursorVar3 CURSOR KEYSET SCROLL_LOCKS
FOR
SELECT FirstName
FROM vEmployee;
DECLARE CursorVar4 CURSOR DYNAMIC OPTIMISTIC
FOR
SELECT FirstName
FROM vEmployee;
DECLARE CursorVar6 CURSOR STATIC
FOR
SELECT FirstName
FROM vEmployee;
DECLARE CursorVar7 CURSOR READ_ONLY
FOR
SELECT FirstName
FROM vEmployee;
-- Shouid not be marked
DECLARE CursorVar5 CURSOR STATIC READ_ONLY
FOR
SELECT FirstName
FROM vEmployee;
RETURN 'DONE';
END;
생성된 코드:¶
CREATE OR REPLACE PROCEDURE modifiablecursorTest ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
EXECUTE AS CALLER
AS
$$
DECLARE
-- Should be marked with SSC-FDM-TS0013
--** SSC-FDM-TS0013 - SNOWFLAKE SCRIPTING CURSOR ROWS ARE NOT MODIFIABLE **
CursorVar CURSOR
FOR
SELECT
FirstName
FROM
vEmployee;
--** SSC-FDM-TS0013 - SNOWFLAKE SCRIPTING CURSOR ROWS ARE NOT MODIFIABLE **
CursorVar2 CURSOR
FOR
SELECT
FirstName
FROM
vEmployee;
--** SSC-FDM-TS0013 - SNOWFLAKE SCRIPTING CURSOR ROWS ARE NOT MODIFIABLE **
CursorVar3 CURSOR
FOR
SELECT
FirstName
FROM
vEmployee;
--** SSC-FDM-TS0013 - SNOWFLAKE SCRIPTING CURSOR ROWS ARE NOT MODIFIABLE **
CursorVar4 CURSOR
FOR
SELECT
FirstName
FROM
vEmployee;
--** SSC-FDM-TS0013 - SNOWFLAKE SCRIPTING CURSOR ROWS ARE NOT MODIFIABLE **
CursorVar6 CURSOR
FOR
SELECT
FirstName
FROM
vEmployee;
--** SSC-FDM-TS0013 - SNOWFLAKE SCRIPTING CURSOR ROWS ARE NOT MODIFIABLE **
CursorVar7 CURSOR
FOR
SELECT
FirstName
FROM
vEmployee;
-- Shouid not be marked
CursorVar5 CURSOR
FOR
SELECT
FirstName
FROM
vEmployee;
BEGIN
RETURN 'DONE';
END;
$$;
모범 사례¶
추가 지원이 필요하면 snowconvert-support@Snowflake.com으로 문의해 주십시오.
SSC-FDM-TS0014¶
설명¶
SQL Server computed 열을 Snowflake로 변환할 때 경고가 표시됩니다. 이 경고는 기능이 SQL 서버에서와 Snowflake에서 정확히 동일하지 않을 수 있음을 나타냅니다.
코드 예제¶
입력 코드:¶
CREATE TABLE [TestTable](
[Col1] AS (CONVERT ([REAL], ExpressionValue))
);
생성된 코드:¶
CREATE OR REPLACE TABLE TestTable (
Col1 REAL AS (CAST(ExpressionValue AS REAL)) /*** SSC-FDM-TS0014 - COMPUTED COLUMN WAS TRANSFORMED TO ITS SNOWFLAKE EQUIVALENT, FUNCTIONAL EQUIVALENCE VERIFICATION PENDING. ***/
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
;
모범 사례¶
이 메시지는 정보 제공만을 위한 것입니다. 별도의 작업이 필요하지 않습니다.
자동으로 변환되지 않은 식을 수동으로 조정합니다.
추가 지원이 필요하면 snowconvert-support@Snowflake.com으로 문의해 주십시오.
SSC-FDM-TS0015¶
설명¶
이 경고는 SQL 서버 열의 데이터 타입이 Snowflake에서 지원되지 않을 때 표시됩니다.
코드 예제¶
입력 코드:¶
CREATE TABLE table1
(
column1 type1
);
생성된 코드:¶
CREATE OR REPLACE TABLE table1
(
column1 VARIANT /*** SSC-FDM-TS0015 - DATA TYPE TYPE1 IS NOT SUPPORTED IN SNOWFLAKE ***/
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"transact"}}'
;
모범 사례¶
필요에 맞는 데이터 타입을 찾으려면 Snowflake 데이터 타입 설명서 를 검토하십시오.
추가 지원이 필요하면 snowconvert-support@Snowflake.com으로 문의해 주십시오.
SSC-FDM-TS0016¶
설명¶
이 경고는 SQL 서버 FOR XML 절을 Snowflake로 변환할 때 표시됩니다. 이는 결과 XML 출력의 열 순서가 두 플랫폼 간에 다를 수 있음을 나타냅니다.
코드 예제¶
아래와 같이 employee
라는 샘플 테이블이 주어집니다.
Id |
이름 |
Hint |
---|---|---|
1 |
Kinslee Park |
개발자 |
2 |
Ezra Mata |
개발자 |
3 |
Aliana Quinn |
Manager |
입력 코드:¶
SELECT
e.id,
e.name as full_name,
e.hint
FROM
employee e
FOR XML PATH;
<row>
<id>1</id>
<full_name>Kinslee Park</full_name>
<hint>Developer</hint>
</row>
<row>
<id>2</id>
<full_name>Ezra Mata</full_name>
<hint>Developer</hint>
</row>
<row>
<id>3</id>
<full_name>Aliana Quinn</full_name>
<hint>Manager</hint>
</row>
생성된 코드:¶
SELECT
--** SSC-FDM-TS0016 - XML COLUMNS IN SNOWFLAKE MIGHT HAVE A DIFFERENT FORMAT **
FOR_XML_UDF(OBJECT_CONSTRUCT('id', e.id, 'full_name', e.name, 'hint', e.hint), 'row')
FROM
employee e;
<row type="OBJECT">
<full_name type="VARCHAR">Kinslee Park</full_name>
<hint type="VARCHAR">Developer</hint>
<id type="INTEGER">1</id>
</row>
<row type="OBJECT">
<full_name type="VARCHAR">Ezra Mata</full_name>
<hint type="VARCHAR">Developer</hint>
<id type="INTEGER">2</id>
</row>
<row type="OBJECT">
<full_name type="VARCHAR">Aliana Quinn</full_name>
<hint type="VARCHAR">Manager</hint>
<id type="INTEGER">3</id>
</row>
모범 사례¶
정보 제공 메시지입니다. 작업이 필요하지 않습니다.
추가 지원이 필요하면 snowconvert-support@Snowflake.com으로 문의해 주십시오.
SSC-FDM-TS0017¶
설명¶
이 경고는 SUSER_NAME
또는 SUSER_SNAME
같은 함수에 사용자 식별자 매개 변수가 포함된 경우 표시되는데, Snowflake의 CURRENT_USER 함수는 사용자 매개 변수를 지원하지 않기 때문입니다.
입력 코드:¶
SELECT SUSER_NAME(0x010500000000000515000000a065cf7e784b9b5fe77c87705a2e0000);
생성된 코드:¶
SELECT
CURRENT_USER() /*** SSC-FDM-TS0017 - User ID parameter used in SUSER_NAME function is not supported in CURRENT_USER function and it was removed. ***/;
모범 사례¶
사용자 측의 작업은 필요하지 않습니다.
추가 지원이 필요하면 snowconvert-support@Snowflake.com으로 문의해 주십시오.
SSC-FDM-TS0018¶
참고
이 FDM 는 더 이상 지원되지 않습니다. 자세한 내용은 SSC-EWI-TS0079 섹션을 참조하십시오.
설명¶
이 기능 마이그레이션 세부 정보(FMD)는 SnowConvert 가 소스 코드에서 DBCC (데이터베이스 콘솔 명령) 문을 감지하면 표시됩니다. Snowflake는 대부분의 DBCC 문을 지원하지 않습니다.
코드 예제¶
입력 코드:¶
DBCC CHECKIDENT(@a, RESEED, @b) WITH NO_INFOMSGS
생성된 코드:¶
----** SSC-FDM-TS0018 - DATABASE CONSOLE COMMAND 'CHECKIDENT' IS NOT SUPPORTED. **
--DBCC CHECKIDENT(@a, RESEED, @b) WITH NO_INFOMSGS
권장 사항¶
정보 제공 메시지입니다. 작업이 필요하지 않습니다.
추가 지원이 필요하면 snowconvert-support@Snowflake.com으로 문의해 주십시오.
SSC-FDM-TS0019¶
심각도¶
불량
설명¶
이 경고는 SQL 서버의 문자열 형식 규칙으로 인해 RAISERROR 오류 메시지가 다를 수 있음을 나타냅니다.
코드 예제¶
입력 코드:¶
CREATE PROCEDURE RAISERROR_PROCEDURE
AS
BEGIN
RAISERROR ('This is a sample error message with the first parameter %d and the second parameter %*.*s',
10,
1,
123,
7,
7,
'param2');
END
생성된 코드:¶
CREATE OR REPLACE PROCEDURE RAISERROR_PROCEDURE ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
EXECUTE AS CALLER
AS
$$
BEGIN
--** SSC-FDM-TS0019 - RAISERROR ERROR MESSAGE MAY DIFFER BECAUSE OF THE SQL SERVER STRING FORMAT **
SELECT
RAISERROR_UDF('This is a sample error message with the first parameter %d and the second parameter %*.*s',
10,
1, array_construct(
123,
7,
7,
'param2'));
END;
$$;
권장 사항¶
추가 지원이 필요하면 snowconvert-support@Snowflake.com으로 문의해 주십시오.
SSC-FDM-TS0020¶
설명¶
이 기능 감지 마커(FDM)는 테이블 변경 문에서 기본 제약 조건이 발견되면 트리거됩니다.
현재 이 제약 조건 유형은 지원되지 않습니다. 이 제한을 해결하려면 테이블 변경 명령을 사용하기 전에 테이블을 정의해야 합니다. 이 접근법은 SnowConvert 참조를 식별하는 데 도움이 되며 기본 제약 조건이 테이블 정의에 포함됩니다. 이 접근법을 따르지 않으면 제약 조건이 코드에 설명으로만 표시됩니다.
코드 예제¶
입력 코드:¶
CREATE TABLE table1(
col1 integer,
col2 varchar collate Latin1_General_CS,
col3 date
);
ALTER TABLE table1
ADD col4 integer,
CONSTRAINT col1_constraint DEFAULT 50 FOR col1,
CONSTRAINT col1_constraint DEFAULT (getdate()) FOR col1;
출력 코드:¶
CREATE OR REPLACE TABLE table1 (
col1 INTEGER DEFAULT 50,
col2 VARCHAR COLLATE 'EN-CS',
col3 DATE
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"transact"}}'
;
ALTER TABLE table1
ADD col4 INTEGER;
----** SSC-FDM-TS0020 - DEFAULT CONSTRAINT MAY HAVE BEEN ADDED TO TABLE DEFINITION **
--ALTER TABLE table1
--ADD
--CONSTRAINT col1_constraint DEFAULT 50 FOR col1
;
----** SSC-FDM-TS0020 - DEFAULT CONSTRAINT MAY HAVE BEEN ADDED TO TABLE DEFINITION **
--ALTER TABLE table1
--ADD
--CONSTRAINT col1_constraint DEFAULT (CURRENT_TIMESTAMP() :: TIMESTAMP) FOR col1
;
Known Issues¶
동일한 열에 대해 여러 기본 제약 조건이 정의된 경우 Create Table 문에 첫 번째 제약 조건만 표시됩니다.
기본 제약 조건이 존재하지 않는 열을 참조하는 경우 필수 열이 누락되어 변환이 실패합니다.
권장 사항¶
추가 지원이 필요하면 snowconvert-support@Snowflake.com으로 문의해 주십시오.
SSC-FDM-TS0021¶
심각도¶
불량
참고
가독성을 높이기 위해 이 예제에서는 코드의 일부 섹션을 간소화했습니다.
설명¶
이 조기 경고 표시기(EWI)는 테이블 변경 문에 MASKED WITH 절이 포함된 경우에 표시됩니다. 이는 시스템이 MASKED WITH 함수를 대체하기 위해 대략적인 MASKING POLICY 를 생성했음을 나타냅니다.
코드 예제¶
입력 코드:¶
ALTER TABLE table_name
ALTER COLUMN column_name
ADD MASKED WITH (FUNCTION = 'default()');
출력 코드:¶
--** SSC-FDM-TS0022 - MASKING ROLE MUST BE DEFINED PREVIOUSLY BY THE USER **
CREATE OR REPLACE MASKING POLICY "default" AS
(val STRING)
RETURNS STRING ->
CASE
WHEN current_role() IN ('YOUR_DEFINED_ROLE_HERE')
THEN val
ELSE 'xxxxx'
END;
ALTER TABLE IF EXISTS table_name MODIFY COLUMN column_name/*** SSC-FDM-TS0021 - A MASKING POLICY WAS CREATED AS SUBSTITUTE FOR MASKED WITH ***/ SET MASKING POLICY "default";
참고
ALTER TABLE 문을 실행하기 전에 MASKING POLICY 를 생성해야 합니다. 동작이 소스 시스템과 정확히 동일하지 않을 수 있으며, 그에 따라 역할과 사용자 권한을 조정해야 할 수도 있습니다.
권장 사항¶
추가 지원이 필요하면 snowconvert-support@Snowflake.com으로 문의해 주십시오.
SSC-FDM-TS0022¶
심각도¶
불량
참고
가독성을 높이기 위해 이 예제에서는 코드의 일부 섹션을 간소화했습니다.
설명¶
이 오류는 데이터 마스킹이 올바르게 기능하려면 MASKING POLICY 에 특정 역할이나 권한이 할당되어야 할 때 발생합니다.
코드 예제¶
입력 코드¶
ALTER TABLE tableName
ALTER COLUMN columnName
ADD MASKED WITH (FUNCTION = 'partial(1, "xxxxx", 1)');
생성된 코드:¶
--** SSC-FDM-TS0022 - MASKING ROLE MUST BE DEFINED PREVIOUSLY BY THE USER **
CREATE OR REPLACE MASKING POLICY "partial_1_xxxxx_1" AS
(val STRING)
RETURNS STRING ->
CASE
WHEN current_role() IN ('YOUR_DEFINED_ROLE_HERE')
THEN val
ELSE LEFT(val, 1) || 'xxxxx' || RIGHT(val, 1)
END;
ALTER TABLE IF EXISTS tableName MODIFY COLUMN columnName/*** SSC-FDM-TS0021 - A MASKING POLICY WAS CREATED AS SUBSTITUTE FOR MASKED WITH ***/ SET MASKING POLICY "partial_1_xxxxx_1";
참고
6라인에 쉼표로 구분하여 1개 이상의 역할 값을 추가할 수 있습니다. 각 역할 값은 작은따옴표로 묶어야 합니다.
권장 사항¶
추가 지원이 필요하면 snowconvert-support@Snowflake.com으로 문의해 주십시오.
SSC-FDM-TS0023¶
심각도¶
불량
설명¶
이 경고는 ERROR_MESSAGE() 함수를 변환하는 동안 표시됩니다. 정확한 오류 메시지는 Snowflake에서 다를 수 있습니다.
입력 코드:¶
SET @varErrorMessage = ERROR_MESSAGE()
출력 코드¶
BEGIN
VARERRORMESSAGE := SQLERRM /*** SSC-FDM-TS0023 - ERROR MESSAGE COULD BE DIFFERENT IN SNOWFLAKE ***/;
END;
권장 사항¶
추가 지원이 필요한 경우 지원 팀에 snowconvert-support@Snowflake.com으로 문의해 주십시오.
SSC-FDM-TS0024¶
설명¶
이 함수 감지 메커니즘(FDM)은 At Time Zone
이 CURRENT_TIMESTAMP
과 함께 사용될 때 트리거됩니다. 이 검사는 특정 시나리오에서 결과가 달라질 수 있으므로 필요합니다.
SQL 서버와 Snowflake CURRENT_TIMESTAMP 함수의 핵심적인 차이점은 타임존 처리입니다.
SQL 서버: 서버: 서버의 현지 타임존을 기준으로 시스템 날짜 및 시간을 반환합니다
Snowflake: UTC (협정 세계시)의 날짜와 시간을 반환합니다
입력 코드:¶
SELECT current_timestamp at time zone 'Hawaiian Standard Time';
2024-02-08 16:52:55.317 -10:00
출력 코드:¶
SELECT
CONVERT_TIMEZONE('Pacific/Honolulu', CURRENT_TIMESTAMP() /*** SSC-FDM-TS0024 - CURRENT_TIMESTAMP in At Time Zone statement may have a different behavior in certain cases ***/);
2024-02-08 06:53:46.994 -1000
권장 사항¶
다음은 Snowflake에서 일관된 형식을 유지하는 방법의 예입니다.
SELECT current_timestamp at time zone 'Hawaiian Standard Time';
2024-02-08 16:33:49.143 -10:00
Snowflake에서는 ALTERSESSION 명령을 사용하여 기본 타임존을 수정할 수 있습니다. 예:
ALTER SESSION SET TIMEZONE = 'Pacific/Honolulu';
SELECT
CONVERT_TIMEZONE('Pacific/Honolulu', 'UTC', CURRENT_TIMESTAMP());
2024-02-08 16:33:49.143
추가 지원이 필요하면 snowconvert-support@Snowflake.com으로 문의해 주십시오.
SSC-FDM-TS0025¶
설명¶
이 함수 설계 메모(FDM)는 DB_ID_UDF 함수가 DB_ID SQL 서버 함수의 동작을 복제하는 것을 목표로 하는 방법을 설명합니다. SQL 서버는 재사용되지 않는 영구적인 고유 식별자를 데이터베이스에 할당하는 반면, Snowflake는 IDs 데이터베이스를 다르게 처리합니다. Snowflake에서 데이터베이스 IDs 는 생성 시 할당된 일련 번호입니다. 데이터베이스가 삭제되면 해당 데이터베이스의 ID 번호가 사용 가능해지며, 다음에 생성되는 새로운 데이터베이스에 할당됩니다.
입력 코드:¶
SELECT DB_ID('my_database');
6
출력 코드:¶
SELECT
DB_ID_UDF('my_database') /*** SSC-FDM-TS0025 - DB_ID_UDF MAY HAVE A DIFFERENT BEHAVIOR IN CERTAIN CASES ***/;
6
권장 사항¶
추가 지원이 필요하면 snowconvert-support@Snowflake.com으로 문의해 주십시오.
SSC-FDM-TS0026¶
설명¶
테이블 DML 인자를 포함하는 INSERT 문을 변환할 때는 임시 테이블을 생성해야 합니다. 이 기능 감지 메시지(FDM)는 DELETE 작업이 이 변환에 포함되지 않았음을 나타냅니다. 이 패턴에 대한 자세한 내용은 MERGE 를 DML 로 사용한 테이블 DML 요소가 있는 INSERT에서 확인할 수 있습니다.
입력 코드:¶
INSERT INTO T3
SELECT
col1,
col2
FROM (
MERGE T1 USING T2
ON T1.col1 = T2.col1
WHEN NOT MATCHED THEN
INSERT VALUES ( T2.col1, T2.col2 )
WHEN MATCHED THEN
UPDATE SET T1.col2 = t2.col2
OUTPUT
$action ACTION_OUT,
T2.col1,
T2.col2
) AS MERGE_OUT
WHERE ACTION_OUT='UPDATE';
출력 코드:¶
--** SSC-FDM-TS0026 - DELETE CASE IS NOT BEING CONSIDERED, PLEASE CHECK IF THE ORIGINAL MERGE PERFORMS IT **
CREATE OR REPLACE TEMPORARY TABLE MERGE_OUT AS
SELECT
CASE
WHEN T1.$1 IS NULL
THEN 'INSERT'
ELSE 'UPDATE'
END ACTION_OUT,
T2.col1,
T2.col2
FROM
T2
LEFT JOIN
T1
ON T1.col1 = T2.col1;
MERGE INTO T1
USING T2
ON T1.col1 = T2.col1
WHEN NOT MATCHED THEN
INSERT VALUES (T2.col1, T2.col2)
WHEN MATCHED THEN
UPDATE SET
T1.col2 = t2.col2
!!!RESOLVE EWI!!! /*** SSC-EWI-0021 - OUTPUT CLAUSE NOT SUPPORTED IN SNOWFLAKE ***/!!!
OUTPUT
$action ACTION_OUT,
T2.col1,
T2.col2 ;
INSERT INTO T3
SELECT
col1,
col2
FROM
MERGE_OUT
WHERE
ACTION_OUT ='UPDATE';
권장 사항¶
추가 지원이 필요하면 snowconvert-support@Snowflake.com으로 문의해 주십시오.
SSC-FDM-TS0027¶
설명¶
이 Finding During Migration(FDM)은 SET ANSI_NULLS ON
문이 소스 데이터베이스와 비교하여 Snowflake에서 다르게 작동할 수 있다고 경고합니다. 이 문에 대한 자세한 내용은 ANSI_NULLS 설명서를 참조하십시오.
입력 코드¶
SET ANSI_NULLS ON;
출력 코드¶
----** SSC-FDM-TS0027 - SET ANSI_NULLS ON STATEMENT MAY HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE **
--SET ANSI_NULLS ON
권장 사항¶
추가 지원이 필요하면 snowconvert-support@Snowflake.com으로 문의해 주십시오.
SSC-FDM-TS0028¶
설명¶
이 알림은 SP_EXECUTESQL 을 사용할 때 출력 매개 변수가 실행 중인 SQL 문자열에 표시되는 것과 동일한 시퀀스로 나열되어야 함을 나타냅니다. 순서가 다르면 출력 값이 잘못 할당됩니다.
코드 예제¶
올바른 케이스¶
@MaxAgeOUT
및 @MaxIdOUT
매개 변수의 순서는 SQL 쿼리 문자열과 출력 매개 변수 정의 모두에서 일치합니다.
코드를 변환할 때 SELECT $1, $2 INTO :MAXAGE, :MAXID FROM TABLE(RESULT_SCAN(LAST_QUERY_ID()))
문은 열 $1과 $2의 값을 각각 MAXAGE 및 MAXID 변수에 저장합니다.
Transact¶
CREATE PROCEDURE CORRECT_OUTPUT_PARAMS_ORDER
AS
BEGIN
DECLARE @MaxAge INT;
DECLARE @MaxId INT;
EXECUTE sp_executesql
N'SELECT @MaxAgeOUT = max(AGE), @MaxIdOut = max(ID) FROM PERSONS WHERE ID < @id AND AGE < @age;',
N'@age INT, @id INT, @MaxAgeOUT INT OUTPUT, @MaxIdOUT INT OUTPUT',
30,
100,
@MaxAgeOUT = @MaxAge OUTPUT,
@MaxIdOut = @MaxId OUTPUT;
SELECT @MaxAge, @MaxId;
END
Snowflake¶
CREATE OR REPLACE PROCEDURE CORRECT_OUTPUT_PARAMS_ORDER ()
RETURNS TABLE()
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "transact", "convertedOn": "10/07/2024" }}'
EXECUTE AS CALLER
AS
$$
DECLARE
MAXAGE INT;
MAXID INT;
ProcedureResultSet RESULTSET;
BEGIN
!!!RESOLVE EWI!!! /*** SSC-EWI-0030 - THE STATEMENT BELOW HAS USAGES OF DYNAMIC SQL. ***/!!!
EXECUTE IMMEDIATE TRANSFORM_SP_EXECUTE_SQL_STRING_UDF('SELECT
MAX(AGE),
MAX(ID) FROM
PERSONS
WHERE
ID < @id AND AGE < @age;', '@age INT, @id INT, @MaxAgeOUT INT OUTPUT, @MaxIdOUT INT OUTPUT', ARRAY_CONSTRUCT('', '', 'MAXAGEOUT', 'MAXIDOUT'), ARRAY_CONSTRUCT(
30,
100, :MAXAGE, :MAXID));
--** SSC-FDM-TS0028 - OUTPUT PARAMETERS MUST HAVE THE SAME ORDER AS THEY APPEAR IN THE EXECUTED CODE **
SELECT
$1,
$2
INTO
:MAXAGE,
:MAXID
FROM
TABLE(RESULT_SCAN(LAST_QUERY_ID()));
ProcedureResultSet := (
SELECT
:MAXAGE,
:MAXID);
RETURN TABLE(ProcedureResultSet);
END;
$$;
일반적인 문제¶
저장 프로시저 정의에서 출력 매개 변수 @MaxAgeOUT
및 @MaxIdOUT
의 순서가 SQL 쿼리 문자열의 순서와 다릅니다.
결과적으로 코드 변환 중에 SELECT $1, $2 INTO :MAXID, :MAXAGE FROM TABLE(RESULT_SCAN(LAST_QUERY_ID()))
문은 예기치 않은 순서로 값을 할당합니다. Max(AGE)
의 값은 :MAXID
에 할당되고, Max(ID)
는 :MAXAGE
에 할당되며, 이는 의도한 것과 반대입니다.
이 문제는 SELECT INTO 문에서 출력 매개 변수의 순서를 조정하거나 SQL 문자열의 순서를 일치하도록 수정하여 해결할 수 있습니다.
Transact¶
CREATE PROCEDURE INCORRECT_OUTPUT_PARAMS_ORDER
AS
BEGIN
DECLARE @MaxAge INT;
DECLARE @MaxId INT;
EXECUTE sp_executesql
N'SELECT @MaxAgeOUT = max(AGE), @MaxIdOut = max(ID) FROM PERSONS WHERE ID < @id AND AGE < @age;',
N'@age INT, @id INT, @MaxAgeOUT INT OUTPUT, @MaxIdOUT INT OUTPUT',
30,
100,
@MaxIdOut = @MaxId OUTPUT,
@MaxAgeOUT = @MaxAge OUTPUT;
SELECT @MaxAge, @MaxId;
END
Snowflake¶
CREATE OR REPLACE PROCEDURE INCORRECT_OUTPUT_PARAMS_ORDER ()
RETURNS TABLE()
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "transact", "convertedOn": "10/07/2024" }}'
EXECUTE AS CALLER
AS
$$
DECLARE
MAXAGE INT;
MAXID INT;
ProcedureResultSet RESULTSET;
BEGIN
!!!RESOLVE EWI!!! /*** SSC-EWI-0030 - THE STATEMENT BELOW HAS USAGES OF DYNAMIC SQL. ***/!!!
EXECUTE IMMEDIATE TRANSFORM_SP_EXECUTE_SQL_STRING_UDF('SELECT
MAX(AGE),
MAX(ID) FROM
PERSONS
WHERE
ID < @id AND AGE < @age;', '@age INT, @id INT, @MaxAgeOUT INT OUTPUT, @MaxIdOUT INT OUTPUT', ARRAY_CONSTRUCT('', '', 'MAXIDOUT', 'MAXAGEOUT'), ARRAY_CONSTRUCT(
30,
100, :MAXID, :MAXAGE));
--** SSC-FDM-TS0028 - OUTPUT PARAMETERS MUST HAVE THE SAME ORDER AS THEY APPEAR IN THE EXECUTED CODE **
SELECT
$1,
$2
INTO
:MAXID,
:MAXAGE
FROM
TABLE(RESULT_SCAN(LAST_QUERY_ID()));
ProcedureResultSet := (
SELECT
:MAXAGE,
:MAXID);
RETURN TABLE(ProcedureResultSet);
END;
$$;
권장 사항¶
OUTPUT 매개 변수가 SQL 문자열에 표시되는 순서와 일치하는지 확인합니다.
추가 지원이 필요하면 snowconvert-support@Snowflake.com으로 문의해 주십시오.