SnowConvert AI - Oracle 기능적 차이¶
SSC-FDM-OR0001¶
참고
이 FDM은 이전 버전의 Oracle SnowConvert AI에 추가되었습니다. 현재는 더 이상 사용되지 않습니다.
설명¶
이 오류는 평가 보고서 파일과 관련이 있습니다. 평가 세부 정보 보고서 파일 작성 중 오류가 발생하는 경우에 표시됩니다.
모범 사례¶
추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.
SSC-FDM-OR0002¶
시퀀스 시작 값이 Snowflake에서 허용하는 최대값을 초과합니다.
참고
이 FDM은 더 이상 사용되지 않습니다. SSC-EWI-OR0068 설명서를 참조하세요.
설명¶
이 오류는 START WITH 문 값이 Snowflake에서 허용하는 최대값을 초과하는 경우에 표시됩니다. Snowflake는 시작 값에 대해 다음과 같이 말합니다. 시퀀스에서 반환되는 첫 번째 값을 지정합니다. 64비트 2의 보수 정수로 나타낼 수 있는 모든 값이 지원됩니다(-2^63~2^63-1). 따라서 이전에 언급한 대로, 허용되는 최대 값은 양수의 경우 9223372036854775807 이고 음수의 경우 9223372036854775808 입니다.
코드 예시¶
입력 코드:¶
CREATE SEQUENCE SEQUENCE1
START WITH 9223372036854775808;
CREATE SEQUENCE SEQUENCE2
START WITH -9223372036854775809;
생성된 코드:¶
CREATE OR REPLACE SEQUENCE SEQUENCE1
--** SSC-FDM-OR0002 - SEQUENCE START VALUE EXCEEDS THE MAX VALUE ALLOWED BY SNOWFLAKE. **
START WITH 9223372036854775808
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}';
CREATE OR REPLACE SEQUENCE SEQUENCE2
--** SSC-FDM-OR0002 - SEQUENCE START VALUE EXCEEDS THE MAX VALUE ALLOWED BY SNOWFLAKE. **
START WITH -9223372036854775809
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}';
모범 사례¶
시퀀스를 재설정하고 사용법도 수정하는 것이 좋습니다. NOTE: 대상 열에는 이 값을 보유할 만큼 충분한 공간이 있어야 합니다.
추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.
SSC-FDM-OR0003¶
WITH 요소 문에서 Search 절이 제거되었습니다.
참고
이 FDM은 더 이상 사용되지 않습니다. [SSC-EWI-OR0038](../conversion-issues/oracleEWI.md#ssc-ewi-or0038 설명서를 참조하세요.
설명¶
search_clause는 SELECT 문에서 행이 처리되는 순서를 정의하는 데 사용됩니다. 이 기능을 사용하면 데이터를 사용자 지정하여 탐색할 수 있으므로 지정된 기준에 따라 특정 순서로 결과가 반환됩니다. 그러나 search_clause 특징을 보이는 이 동작은 Snowflake에서 지원되지 않습니다.
Oracle과 같은 데이터베이스에서 search_clause는 일반적으로 재귀 쿼리 또는 공통 테이블 식(CTEs)을 함께 사용하여 계층적 데이터를 탐색하는 시퀀스에 영향을 줍니다. search_clause에서 특정 열 또는 열 세트를 지정하여 계층 구조의 깊이 우선 또는 너비 우선 탐색을 제어해 행이 처리되는 순서에 영향을 줄 수 있습니다.
Snowflake에서 search_clause 메시지가 생성된 후 search_clause는 제거됩니다.
코드 예시¶
입력 코드:¶
WITH dup_hiredate(eid, emp_last, mgr_id, reportLevel, hire_date, job_id) AS
(SELECT aValue from atable) SEARCH DEPTH FIRST BY hire_date SET order1 SELECT aValue from atable;
생성된 코드:¶
WITH dup_hiredate(eid, emp_last, mgr_id, reportLevel, hire_date, job_id) AS
(
SELECT aValue from
atable
) /*** SSC-FDM-OR0003 - SEARCH CLAUSE REMOVED FROM THE WITH ELEMENT STATEMENT ***/
SELECT aValue from
atable;
권장 사항¶
추가 사용자 작업이 필요하지 않습니다.
추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.
SSC-FDM-OR0004¶
Snowflake에서 지원하지 않기 때문에 order by 절에서 Siblings 키워드가 제거되었습니다.
설명¶
Oracle에서는 ORDER SIBLINGS BY 절을 계층 구조 쿼리에서 사용하여 계층 구조에서 제공하는 데이터의 순서를 유지하면서 동일한 계층 구조의 형제 노드 값을 재정렬할 수 있습니다. Snowflake에서는 이 기능이 지원되지 않습니다.
코드 예시¶
입력 코드:¶
SELECT LEVEL,
LPAD(' ', 2 * (LEVEL - 1)) || NAME AS FORMATTED_NAME,
JOB_TITLE
FROM EMPLOYEES
START WITH MANAGER_ID IS NULL
CONNECT BY PRIOR EMPLOYEE_ID = MANAGER_ID
ORDER SIBLINGS BY NAME;
생성된 코드:¶
SELECT LEVEL,
NVL(
LPAD(' ', 2 * (
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0036 - TYPES RESOLUTION ISSUES, ARITHMETIC OPERATION '-' MAY NOT BEHAVE CORRECTLY BETWEEN unknown AND Number ***/!!!LEVEL - 1)) :: STRING, '') || NVL(NAME :: STRING, '') AS FORMATTED_NAME,
JOB_TITLE
FROM
EMPLOYEES
START WITH MANAGER_ID IS NULL
CONNECT BY
PRIOR EMPLOYEE_ID = MANAGER_ID
ORDER BY
NAME /*** SSC-FDM-OR0004 - SIBLINGS KEYWORD REMOVED FROM ORDER BY CLAUSE BECAUSE SNOWFLAKE DOES NOT SUPPORT IT ***/;
SIBLINGS 절로 정확히 동일한 순서를 달성하지 못할 수도 있지만, 유사한 결과를 얻을 수 있는 몇 가지 대안이 있습니다.
ORDER BY를 사용하여 원하는 정렬을 적용하는 외부 쿼리 내에 쿼리를 포함합니다.CONNECT BY를 사용하여 계층적 쿼리를 포함하는 CTE를 생성하고, 후속 쿼리에서 CTE를 참조하여 동위 요소 정렬(동일 수준의 행)에ORDER BY를 적용합니다.
추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.
SSC-FDM-OR0005¶
Snowflake에서는 동의어가 지원되지 않지만, 이 동의어에 대한 참조가 원래 오브젝트 이름으로 변경되었습니다.
설명¶
Snowflake에서는 동의어가 지원되지 않습니다. 동의어는 원래 이름으로 바뀝니다.
코드 예시¶
입력 코드:¶
CREATE TABLE TABLE1
(
COLUMN1 NUMBER
);
CREATE OR REPLACE SYNONYM B.TABLE1_SYNONYM FOR TABLE1;
SELECT * FROM B.TABLE1_SYNONYM WHERE B.TABLE1_SYNONYM.COLUMN1 = 20;
생성된 코드:¶
CREATE OR REPLACE TABLE TABLE1
(
COLUMN1 NUMBER(38, 18) /*** SSC-FDM-0006 - NUMBER TYPE COLUMN MAY NOT BEHAVE SIMILARLY IN SNOWFLAKE. ***/
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
-- --** SSC-FDM-OR0005 - SYNONYMS NOT SUPPORTED IN SNOWFLAKE BUT REFERENCES TO THIS SYNONYM WERE CHANGED BY THE ORIGINAL OBJECT NAME. **
-- CREATE OR REPLACE SYNONYM B.TABLE1_SYNONYM FOR TABLE1
;
SELECT * FROM
TABLE1
WHERE
TABLE1.COLUMN1 = 20;
모범 사례¶
추가 사용자 작업이 필요하지 않습니다.
추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.
SSC-FDM-OR0006¶
Not Null 인라인 제약 조건에서 제약 조건 상태가 제거되었습니다.
설명¶
이 경고는 Not Null 열 제약 조건에 다음 Oracle 제약 조건 상태 중 하나가 열 인라인 정의의 일부로 포함되어 있는 경우에 발생합니다.
[ RELY | NORELY | RELY DISABLE | RELY ENABLE | VALIDATE | NOVALIDATE ]
Snowflake는 이러한 상태를 지원하지 않으므로 NOT NULL 인라인 제약 조건에서 제거됩니다.
코드 예시 ¶
입력 코드:¶
CREATE TABLE Table1(
col1 INT NOT NULL RELY
);
생성된 코드:¶
CREATE OR REPLACE TABLE Table1 (
col1 INT NOT NULL /*** SSC-FDM-OR0006 - CONSTRAINT STATE RELY REMOVED FROM NOT NULL INLINE CONSTRAINT ***/
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
모범 사례¶
추가 사용자 작업이 필요하지 않습니다.
추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.
SSC-FDM-OR0007¶
Snowflake는 오브젝트의 버전 관리를 지원하지 않습니다. 개발자는 코드 버전 관리를 위한 대체 접근 방식을 고려해야 합니다.
설명¶
Snowflake는 오브젝트의 버전 관리를 지원하지 않습니다. 한정자 EDITINONABLE 또는 NONEDITIONABLE은 변환된 코드에서 제거되고 경고가 추가됩니다.
코드 예시¶
입력 코드:¶
CREATE OR REPLACE EDITIONABLE PROCEDURE FUN1 (n number)is
l_result number;
begin
DELETE FROM employees;
end;
생성된 코드:¶
--** SSC-FDM-OR0007 - SNOWFLAKE DOESN'T SUPPORT VERSIONING OF OBJECTS. DEVELOPERS SHOULD CONSIDER ALTERNATE APPROACHES FOR CODE VERSIONING. **
CREATE OR REPLACE PROCEDURE FUN1 (n NUMBER(38, 18))
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
DECLARE
l_result NUMBER(38, 18);
BEGIN
DELETE FROM
employees;
END;
$$;
모범 사례¶
사용자는 코드 버전 관리를 위한 대체 접근 방식을 고려해야 합니다.
추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.
SSC-FDM-OR0008¶
세트 수량자는 지원되지 않습니다
참고
이 FDM은 더 이상 사용되지 않습니다. SSC-EWI-OR0071 설명서를 참조하세요.
설명¶
수량자 ‘all’은 Snowflake에서 지원되지 않습니다. 이 수정자는 소스 코드에서 제거되고 경고가 추가됩니다. 결과 코드가 예기치 않게 동작할 수 있습니다.
코드 예시¶
입력 코드:¶
SELECT location_id FROM locations
MINUS ALL
SELECT location_id FROM departments;
생성된 코드:¶
SELECT location_id FROM
locations
--** SSC-FDM-OR0008 - QUANTIFIER 'ALL' NOT SUPPORTED FOR THIS SET OPERATOR, RESULTS MAY DIFFER **
MINUS
SELECT location_id FROM
departments;
Snowflake에서 INTERSECT 및 MINUS, EXCEPT 연산자는 항상 중복 값을 제거합니다.
모범 사례¶
Snowflake에서 대안을 확인하여 “all” 수량자의 기능을 에뮬레이트합니다.
추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.
SSC-FDM-OR0009¶
SQL 암시적 커서 값은 다를 수 있습니다.
설명¶
참고
JavasScript를 대상 언어로 사용하고 -t JavaScript 또는 --PLTargetLanguage JavaScript 플래그를 추가해 프로시저 및 매크로를 생성합니다.
참고
출력 코드의 일부 부분은 명확성을 위해 생략되었습니다.
이 EWI는 SQL 암시적 커서 값이 사용되는 경우에 표시됩니다. 이는 Oracle이 쿼리 유형에 따라 다른 값을 사용하기 때문입니다. 예를 들어, SELECT의 경우 SQL을 설정하는 데 사용되는 값은 쿼리에서 반환된 행 수입니다. 쿼리 유형이 UPDATE/CREATE/DELETE/INSERT인 경우 사용된 값은 영향을 받는 행의 수이며, 이것이 이 EWI가 표시되는 주요 이유입니다.
코드 예시¶
입력 코드:¶
-- Additional Params: -t JavaScript
--Transformation for implicit cursor
CREATE OR REPLACE PROCEDURE SP_SAMPLE AUTHID DEFINER IS
stmt_no POSITIVE;
BEGIN
IF SQL%ROWCOUNT = 0 THEN
EXIT ;
END IF;
IF SQL%ISOPEN THEN
EXIT ;
END IF;
IF SQL%FOUND THEN
EXIT ;
END IF;
IF SQL%NOTFOUND THEN
EXIT ;
END IF;
END;
생성된 코드:¶
-- Additional Params: -t JavaScript
--Transformation for implicit cursor
CREATE OR REPLACE PROCEDURE SP_SAMPLE ()
RETURNS STRING
LANGUAGE JAVASCRIPT
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "oracle", "convertedOn": "12/16/2024", "domain": "test" }}'
EXECUTE AS CALLER
AS
$$
!!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'PlInvokerRightsClause' NODE ***/!!!
//AUTHID DEFINER
null
// SnowConvert AI Helpers Code section is omitted.
let STMT_NO = new POSITIVE();
if (SQL.ROWCOUNT /*** SSC-FDM-OR0009 - SQL IMPLICIT CURSOR VALUES MAY DIFFER ***/ == 0) {
break;
}
if (SQL.ISOPEN) {
break;
}
if (SQL.FOUND) {
break;
}
if (SQL.NOTFOUND) {
break;
}
$$;
모범 사례¶
추가 사용자 작업이 필요하지 않습니다.
추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.
SSC-FDM-OR0010¶
NUMBER 데이터 타입의 전체 자릿수가 소수 자릿수와 일치하도록 증가했습니다.
설명¶
NUMBER 데이터 타입은 고정 및 부동 소수점 숫자를 저장합니다. 이 데이터는 Oracle 데이터베이스를 실행하는 다양한 운영 체제 간에 이식 가능합니다. NUMBER 데이터 타입은 숫자 데이터를 저장해야 하는 대부분의 경우에 권장됩니다. 구문은 NUMBER(X, Y)이며 여기서 X 는 전체 자릿수이고 Y 는 소수 자릿수입니다.
예를 들어, NUMBER(5, 3)은 다음과 같이, 소수점 앞 자릿수가 _2_이고 소수점 뒤 자릿수가 _3인 숫자입니다.
12.345
또 다른 중요한 고려 사항은 다음과 같습니다.
소수 자릿수 Y 는 소수점 오른쪽의 최대 자릿수를 지정합니다.
소수 자릿수-전체 자릿수 Y-X 는 소수점 뒤에 있는 최소 0개의 수를 지정합니다.
이 메시지는 NUMBER의 전체 자릿수가 소수 자릿수보다 작은 경우에 표시됩니다. Snowflake는 이 기능을 지원하지 않으며, 이 메시지는 동등성을 유지하기 위해 전체 자릿수의 값이 증가했음을 나타내는 데 사용됩니다.
참고
이 문제가 알려진 다른 변환과 함께 발생하거나 전혀 발생하지 않는 경우가 있다는 점에 유의하세요. 예를 들어, 소수 자릿수가 19로 바뀌고 이전의 전체 자릿수가 19보다 큰 경우 이 메시지는 표시되지 않습니다.
코드 예시¶
입력 코드:¶
쿼리¶
CREATE TABLE SampleNumberTable(Col1 NUMBER(4, 5));
INSERT INTO SampleNumberTable (Col1)
VALUES (0.00009);
INSERT INTO SampleNumberTable (Col1)
VALUES (0.000021);
INSERT INTO SampleNumberTable (Col1)
VALUES (0.012678912);
SELECT * FROM SampleNumberTable;
결과¶
Col1 |
-------+
0.00009|
0.00002|
0.01268|
생성된 코드:¶
쿼리¶
CREATE OR REPLACE TABLE SampleNumberTable (Col1 NUMBER(5, 5) /*** SSC-FDM-OR0010 - NUMBER DATATYPE SMALLER PRECISION WAS INCREASED TO MATCH SCALE ***/ /*** SSC-FDM-0006 - NUMBER TYPE COLUMN MAY NOT BEHAVE SIMILARLY IN SNOWFLAKE. ***/
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
INSERT INTO SampleNumberTable(Col1)
VALUES (0.00009);
INSERT INTO SampleNumberTable(Col1)
VALUES (0.000021);
INSERT INTO SampleNumberTable(Col1)
VALUES (0.012678912);
SELECT * FROM
SampleNumberTable;
결과¶
Col1 |
-------+
0.00009|
0.00002|
0.01268|
모범 사례¶
추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.
SSC-FDM-OR0011¶
“스택에 추가” 옵션이 지원되지 않으므로 부울 인자가 제거되었습니다.
설명¶
이 경고는 마이그레이션 중에 RAISE_APLICATION_ERROR_의 세 번째 선택적 인자가 제거된 경우에 표시됩니다. 이 기능은 Snowflake에서 지원되지 않습니다.
코드 예시¶
입력 코드:¶
CREATE OR REPLACE FUNCTION TEST(SAMPLE_A IN NUMBER DEFAULT NULL,
SAMPLE_B IN NUMBER DEFAULT NULL)
RETURN NUMBER
AS
BEGIN
raise_application_error(-20001, 'First exception message', FALSE);
RETURN 1;
END TEST;
생성된 코드:¶
!!!RESOLVE EWI!!! /*** SSC-EWI-0068 - USER DEFINED FUNCTION WAS TRANSFORMED TO SNOWFLAKE PROCEDURE ***/!!!
CREATE OR REPLACE PROCEDURE TEST (SAMPLE_A NUMBER(38, 18) DEFAULT NULL,
SAMPLE_B NUMBER(38, 18) DEFAULT NULL)
RETURNS NUMBER(38, 18)
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "oracle", "convertedOn": "07/02/2025", "domain": "no-domain-provided" }}'
EXECUTE AS CALLER
AS
$$
DECLARE
FIRST_EXCEPTION_MESSAGE_EXCEPTION_CODE_0 EXCEPTION (-20001, 'FIRST EXCEPTION MESSAGE');
BEGIN
--** SSC-FDM-OR0011 - ADD TO STACK OF ERRORS IS NOT SUPPORTED, BOOLEAN ARGUMENT FALSE WAS REMOVED. **
RAISE FIRST_EXCEPTION_MESSAGE_EXCEPTION_CODE_0;
RETURN 1;
END;
$$;
모범 사례¶
최종 사용자 작업이 필요하지 않습니다.
추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.
SSC-FDM-OR0012¶
COMMIT 및 ROLLBACK 문이 의도한 대로 수행되려면 적절한 설정이 필요합니다.
설명¶
COMMIT 및 ROLLBACK 문이 Snowflake에서 의도한 대로 수행되려면 적절한 설정이 필요합니다. 이러한 문의 올바른 기능을 시뮬레이션하려면 Snowflake에서 다음 명령을 실행해야 합니다.
ALTER SESSION SET AUTOCOMMIT = false;
코드 예시¶
입력 코드¶
COMMIT;
ROLLBACK;
생성된 코드¶
--** SSC-FDM-OR0012 - COMMIT REQUIRES THE APPROPRIATE SETUP TO WORK AS INTENDED **
COMMIT;
--** SSC-FDM-OR0012 - ROLLBACK REQUIRES THE APPROPRIATE SETUP TO WORK AS INTENDED **
ROLLBACK;
모범 사례¶
코드 실행을 시작하기 전에 설명 섹션에 언급된 쿼리를 실행합니다.
추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.
SSC-FDM-OR0013¶
CYCLE 절은 Snowflake에서 지원되지 않습니다.
참고
이 FDM은 더 이상 사용되지 않습니다. SSC-EWI-OR0039 설명서를 참조하세요.
설명¶
이 메시지는 SnowConvert AI가 CYCLE 절이 있는 프로시저를 발견한 경우에 표시됩니다. 이는 Snowflake에서 지원되지 않으므로 코드에서 주석 처리됩니다.
이 절은 재귀가 있는 경우를 표시합니다.
이 절의 기능에 대한 자세한 내용은 [설명서]https://docs.oracle.com/en/database/oracle/oracle-database/23/sqlrf/SELECT.html#GUID-CFA006CA-6FF1-4972-821E-6996142A51C6__GUID-8EE64250-3C9A-40C7-A81D-46695F8B2EB9)를 참조하세요.
코드 예시¶
연결 방법¶
입력 코드:¶
CREATE OR REPLACE FORCE NONEDITIONABLE VIEW VIEW01 AS
SELECT
UNIQUE A.*
FROM
TABLITA A
WHERE
A.X = A.C CONNECT BY NOCYCLE A.C = 0 START WITH A.B = 1
HAVING
X = 1
GROUP BY
A.C;
생성된 코드:¶
CREATE OR REPLACE VIEW VIEW01
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
AS
SELECT DISTINCT
A.*
FROM
TABLITA A
WHERE
A.X = A.C
GROUP BY
A.C
HAVING
X = 1
--** SSC-FDM-OR0013 - CYCLE CLAUSE IS NOT SUPPORTED IN SNOWFLAKE **
CONNECT BY
A.C = 0 START WITH A.B = 1;
모범 사례¶
데이터 계층 구조에 CYCLE이 있는 경우 이 문서를 검토하여 처리할 수 있습니다.
추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.
SSC-FDM-OR0014¶
외래 키 데이터 타입이 일치하지 않습니다.
설명¶
이 오류는 외래 키 데이터 타입이 일치하지 않는 경우에 발생합니다.
코드 예시¶
입력 코드:¶
CREATE TABLE "MyDb"."MyTable"
(
"COL1" NUMBER,
CONSTRAINT "PK" PRIMARY KEY ("COL1")
);
CREATE TABLE "MyDb"."MyTable1"
(
"COL1" NUMBER(*,0),
CONSTRAINT "FK1" FOREIGN KEY ("COL1") REFERENCES "MyDb"."MyTable" ("COL1")
);
생성된 코드:¶
CREATE OR REPLACE TABLE "MyDb"."MyTable"
(
"COL1" NUMBER(38, 18) /*** SSC-FDM-0006 - NUMBER TYPE COLUMN MAY NOT BEHAVE SIMILARLY IN SNOWFLAKE. ***/,
CONSTRAINT "PK" PRIMARY KEY ("COL1")
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
;
CREATE OR REPLACE TABLE "MyDb"."MyTable1"
(
"COL1" NUMBER(38) /*** SSC-FDM-0006 - NUMBER TYPE COLUMN MAY NOT BEHAVE SIMILARLY IN SNOWFLAKE. ***/
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
;
ALTER TABLE "MyDb"."MyTable1"
ADD
--** SSC-FDM-OR0014 - FOREIGN KEY DATA TYPE MISMATCH **
CONSTRAINT "FK1" FOREIGN KEY ("COL1") REFERENCES "MyDb"."MyTable" ("COL1");
참고
“MyDb”.”MyTable1”.COL1 및 “MyDb”.”MyTable”.COL1은 서로 다른 유형이며 ERROR가 표시됩니다.
모범 사례¶
데이터 계층 구조에 CYCLE이 있는 경우 이 문서를 검토하여 처리할 수 있습니다.
추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.
SSC-FDM-OR0015¶
LENGTHB가 OCTET_LENGTH로 변환한 결과는 DBMS의 메모리 관리 방식에 따라 달라질 수 있습니다.
설명¶
이 문제는 열 또는 리터럴의 크기를 바이트 단위로 반환하는 LENGTHB 함수를 호출하는 경우에 발생합니다. 이 함수는 OCTET_LENGTH Snowflake 함수로 변환됩니다.
이 함수의 매개 변수가 열인 경우, 결과는 해당 열이 있는 값의 크기입니다. 이 크기는 Oracle에서 Snowflake까지 다양할 수 있고, 열의 유형은 함수에서 반환되는 결과에서 중요한 역할을 합니다.
코드 예시¶
입력 코드:¶
쿼리¶
CREATE TABLE char_table
(
char_column1 CHAR(15)
);
INSERT INTO char_table VALUES ('Hello world');
SELECT char_column1, LENGTHB(char_column1), LENGTH('Hello world') FROM char_table;
결과¶
|CHAR_COLUMN1 |LENGTHB(CHAR_COLUMN1)|LENGTH('HELLOWORLD')|
|---------------|---------------------|--------------------|
|Hello world |15 |11 |
생성된 코드:¶
쿼리¶
CREATE OR REPLACE TABLE char_table
(
char_column1 CHAR(15)
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
INSERT INTO char_table
VALUES ('Hello world');
SELECT char_column1,
OCTET_LENGTH(char_column1) /*** SSC-FDM-OR0015 - LENGTHB TRANSFORMED TO OCTET_LENGTH RESULTS MAY VARY DUE TO MEMORY MANAGEMENT OF DBMS ***/, LENGTH('Hello world') FROM
char_table;
결과¶
|CHAR_COLUMN1|OCTET_LENGTH(CHAR_COLUMN1)|LENGTH('HELLO WORLD')|
|------------|--------------------------|---------------------|
|Hello world |11 |11 |
모범 사례¶
사용된 데이터 타입을 수동으로 확인합니다.
OCTET_LENGTH는 문자열에 유니코드 코드 포인트가 포함된 경우 더 큰 크기를 반환할 수 있으므로 사용된 열의 인코딩을 확인합니다.
추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.
SSC-FDM-OR0016¶
Snowflake에서는 COMMIT 및 ROLLBACK 옵션이 필요하지 않으므로 제거되었습니다
설명¶
Snowflake에서는 COMMIT 및 ROLLBACK 문 옵션이 필요하지 않으므로 제거됩니다.
코드 예시¶
입력 코드¶
COMMIT WORK FORCE '22.57.53';
ROLLBACK WORK FORCE '22.57.53';
생성된 코드¶
--** SSC-FDM-OR0016 - COMMIT OPTIONS REMOVED BECAUSE SNOWFLAKE DOES NOT REQUIRE THEM **
--** SSC-FDM-OR0012 - COMMIT REQUIRES THE APPROPRIATE SETUP TO WORK AS INTENDED **
COMMIT WORK;
--** SSC-FDM-OR0016 - ROLLBACK OPTIONS REMOVED BECAUSE SNOWFLAKE DOES NOT REQUIRE THEM **
--** SSC-FDM-OR0012 - ROLLBACK REQUIRES THE APPROPRIATE SETUP TO WORK AS INTENDED **
ROLLBACK WORK;
모범 사례¶
추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.
SSC-FDM-OR0017¶
타임스탬프의 기본값을 사용하기 위해 DBTimezone이 제거되었습니다.
설명¶
DBTIMEZONE 키워드가 AT TIME ZONE 식에서 제거되었습니다.
코드 예시¶
입력 코드:¶
SELECT TIMESTAMP '1998-12-25 09:26:50.12' AT TIME ZONE DBTIMEZONE FROM DUAL;
생성된 코드:¶
SELECT
--** SSC-FDM-OR0017 - DBTIMEZONE WAS REMOVED TO USE THE DEFAULT VALUE OF THE TIMESTAMP **
TO_TIMESTAMP_LTZ( TIMESTAMP '1998-12-25 09:26:50.12')
FROM DUAL;
모범 사례¶
동일한 결과를 얻기 위해 TIMEZONE 세선 매개 변수를 설정해야 할 수도 있습니다.
추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.
SSC-FDM-OR0018¶
MERGE 문이 예상대로 작동하지 않을 수 있습니다
설명¶
이 경고는 Snowflake과 Oracle의 MERGE 문에 몇 가지 기능적 차이가 있을 수 있음을 나타내기 위해 사용됩니다.
코드 예시¶
입력 코드:¶
MERGE INTO people_target pt
USING people_source ps
ON (pt.person_id = ps.person_id)
WHEN MATCHED THEN UPDATE
SET pt.first_name = ps.first_name,
pt.last_name = ps.last_name,
pt.title = ps.title
DELETE where pt.title = 'Mrs.'
WHEN NOT MATCHED THEN INSERT
(pt.person_id, pt.first_name, pt.last_name, pt.title)
VALUES (ps.person_id, ps.first_name, ps.last_name, ps.title)
WHERE ps.title = 'Mr';
생성된 코드:¶
--** SSC-FDM-OR0018 - SNOWFLAKE MERGE STATEMENT MAY HAVE SOME FUNCTIONAL DIFFERENCES COMPARED TO ORACLE **
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECTS "people_target", "people_source" **
MERGE INTO people_target pt
USING people_source ps
ON (pt.person_id = ps.person_id)
WHEN MATCHED AND pt.title = 'Mrs.' THEN
DELETE
WHEN MATCHED THEN
UPDATE SET
pt.first_name = ps.first_name,
pt.last_name = ps.last_name,
pt.title = ps.title
WHEN NOT MATCHED AND ps.title = 'Mr' THEN
INSERT
(pt.person_id, pt.first_name, pt.last_name, pt.title)
VALUES (ps.person_id, ps.first_name, ps.last_name, ps.title);
모범 사례¶
Oracle과 다른 결과가 나타나는 경우 다음 사항을 고려합니다.
실행 순서 우선순위에 대한 자세한 내용은 다음 링크를 참조하세요.
건너뛴 DML 문을 MERGE 문 외부(MERGE 전이나 후)에서 실행합니다.
추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.
SSC-FDM-OR0019¶
윈도우 프레임 출력이 동일하지 않을 수 있습니다
설명¶
이 경고는 ROWS 윈도우 프레임 단위가 소스 코드 내에서 발견된 경우에 추가됩니다.
ROWS는 컴퓨팅을 위해 물리적 행 번호를 사용하는데, 대상 플랫폼으로 마이그레이션되면 해당 방식이 달라질 수 있습니다. ORDER BY 절을 수동으로 추가하여 이 문제를 완화하거나 제거할 수 있습니다.
참고
Oracle 설명서에는 다음과 같이 명시되어 있습니다.\ “논리 오프셋이 있는 분석 함수가 반환하는 값은 항상 결정론적 특성을 갖습니다. 그러나 물리적 오프셋이 있는 분석 함수가 반환하는 값은 순서 지정 식이 고유한 순서를 지정하지 않는 한 비결정론적 결과를 생성할 수 있습니다. 고유한 순서를 지정하기 위해 order_by_clause에 여러 열을 지정해야 할 수도 있습니다.
따라서 문제를 방지하기 위해 함수가 결정론적 결과를 반환했는지 미리 확인하는 것이 좋습니다.
코드 예시 ¶
입력 코드:¶
SELECT
SUM(C_BIRTH_DAY)
OVER (
ORDER BY C_BIRTH_COUNTRY
ROWS UNBOUNDED PRECEDING) AS MAX1
FROM WINDOW_TABLE;
생성된 코드:¶
SELECT
SUM(C_BIRTH_DAY)
OVER (
ORDER BY C_BIRTH_COUNTRY ROWS UNBOUNDED PRECEDING /*** SSC-FDM-OR0019 - WINDOW FRAME OUTPUT MAY NOT BE EQUIVALENT ***/) AS MAX1
FROM
WINDOW_TABLE;
모범 사례¶
행의 결정론적 순서를 따르도록 하여 Snowflake에서 실행할 때 결정론적 출력을 보장합니다.
추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.
SSC-FDM-OR0020¶
PRAGMA EXCEPTION_INIT는 지원되지 않습니다.
참고
이 FDM은 더 이상 사용되지 않습니다. SSC-EWI-OR0051 설명서를 참조하세요.
설명¶
이 경고는 PRAGMA EXCEPTION_INIT 함수가 프로시저 내에서 호출되는 경우에 추가됩니다. 예외 이름 및 예외의 SQL 코드는 RAISE 함수에 설정됩니다. Snowflake Scripting으로 변환되는 경우 예외 선언에 SQL 코드가 추가되지만, 일부 코드 값은 Snowflake Scripting에서 유효하지 않을 수 있습니다.
코드 예시 ¶
입력 코드:¶
CREATE OR REPLACE PROCEDURE EXCEPTION_DECLARATION_SAMPLE AUTHID DEFINER IS
NEW_EXCEPTION EXCEPTION;
PRAGMA EXCEPTION_INIT(NEW_EXCEPTION, -63);
NEW_EXCEPTION2 EXCEPTION;
PRAGMA EXCEPTION_INIT ( NEW_EXCEPTION2, -20100 );
BEGIN
IF true THEN
RAISE NEW_EXCEPTION;
END IF;
EXCEPTION
WHEN NEW_EXCEPTION THEN
--Handle Exceptions
NULL;
END;
/
생성된 코드:¶
Snowflake Scription¶
CREATE OR REPLACE PROCEDURE EXCEPTION_DECLARATION_SAMPLE ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0097 - PROCEDURE PROPERTIES ARE NOT SUPPORTED IN SNOWFLAKE PROCEDURES ***/!!!
AS
$$
DECLARE
--** SSC-FDM-OR0023 - EXCEPTION CODE NUMBER EXCEEDS SNOWFLAKE SCRIPTING LIMITS **
NEW_EXCEPTION EXCEPTION;
--** SSC-FDM-OR0020 - PRAGMA EXCEPTION_INIT IS NOT SUPPORTED **
PRAGMA EXCEPTION_INIT(NEW_EXCEPTION, -63);
NEW_EXCEPTION2 EXCEPTION (-20100, '');
--** SSC-FDM-OR0020 - PRAGMA EXCEPTION_INIT IS NOT SUPPORTED **
PRAGMA EXCEPTION_INIT ( NEW_EXCEPTION2, -20100 );
BEGIN
IF (true) THEN
RAISE NEW_EXCEPTION;
END IF;
EXCEPTION
WHEN NEW_EXCEPTION THEN
--Handle Exceptions
NULL;
END;
$$;
모범 사례¶
최종 사용자 작업이 필요하지 않습니다.
추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.
SSC-FDM-OR0021¶
부동 소수점을 한계값으로 사용하는 For 루프는 Snowflake Scripting에서 올바르게 동작하지 않을 수 있습니다
설명¶
Snowflake Scripting은 INTEGER 또는 INTEGER로 평가되는 식만 FORLOOP 조건의 한계값으로 허용합니다. 부동 소수점 숫자는 반올림 또는 내림되어 원래 한계값을 변경합니다.
하한은 가장 가까운 정수로 반올림됩니다. 예:
3.1 -> 3, 6.7 -> 7, 4.5 -> 5
그러나 상한은 가장 가까운 하한 정수로 잘립니다. 예:
3.1 -> 3, 6.7 -> 6, 4.5 -> 4
Snowflake Scripting¶
CREATE OR REPLACE PROCEDURE p1()
RETURNS VARCHAR
LANGUAGE SQL
AS
$$
DECLARE
var1 VARCHAR DEFAULT '';
var2 VARCHAR DEFAULT '';
var3 VARCHAR DEFAULT '';
BEGIN
--Loop 1
FOR i IN 1.2 TO 5.2 DO
var1 := var1 || ' ' || i::VARCHAR;
END FOR;
--Loop 2
FOR i IN 1.7 TO 5.5 DO
var2 := var2 || ' ' || i::VARCHAR;
END FOR;
--Loop 3
FOR i IN 1.5 TO 5.8 DO
var3 := var3 || ' ' || i::VARCHAR;
END FOR;
RETURN ' Loop1: ' || var1 ||
' Loop2: ' || var2 ||
' Loop3: ' || var3;
END;
$$;
CALL p1();
결과¶
P1 |
--------------------------------------------------+
Loop1: 1 2 3 4 5 |
Loop2: 2 3 4 5 |
Loop3: 2 3 4 5 |
코드 예시¶
입력 코드:¶
CREATE OR REPLACE PROCEDURE p1
AS
BEGIN
FOR i NUMBER(5,1) IN 1.2 .. 5.7 LOOP
NULL;
END LOOP;
END;
생성된 코드:¶
CREATE OR REPLACE PROCEDURE p1 ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "oracle", "convertedOn": "07/02/2025", "domain": "no-domain-provided" }}'
EXECUTE AS CALLER
AS
$$
BEGIN
--** SSC-FDM-OR0021 - FOR LOOP WITH FLOAT NUMBER AS LOWER OR UPPER BOUND MAY NOT BEHAVE CORRECTLY IN SNOWFLAKE SCRIPTING **
--** SSC-PRF-0008 - PERFORMANCE REVIEW - LOOP USAGE **
FOR i IN 1.2 TO 5.7
--** SSC-PRF-0008 - PERFORMANCE REVIEW - LOOP USAGE **
LOOP
NULL;
END LOOP;
END;
$$;
모범 사례¶
정수를 사용하도록 FOR LOOP 조건을 다시 작성합니다.
추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.
SSC-FDM-OR0022¶
여러 조건이 있는 For 루프는 현재 Snowflake Scripting에서 지원되지 않습니다. 첫 번째 조건만 사용됩니다
참고
이 FDM은 더 이상 사용되지 않습니다. SSC-EWI-OR0100 설명서를 참조하세요.
설명¶
Oracle은 단일 FOR LOOP에서 여러 조건을 허용하지만 Snowflake Scripting은 FOR LOOP당 하나의 조건만 허용합니다. 변환 중에 첫 번째 조건만 마이그레이션되고 다른 조건은 무시됩니다.
코드 예시¶
입력 코드:¶
CREATE OR REPLACE PROCEDURE P3
AS
BEGIN
FOR i IN REVERSE 1..3,
REVERSE i+5..i+7
LOOP
NULL;
END LOOP;
END;
생성된 코드:¶
CREATE OR REPLACE PROCEDURE P3 ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
BEGIN
--** SSC-FDM-OR0022 - FOR LOOP WITH MULTIPLE CONDITIONS IS CURRENTLY NOT SUPPORTED BY SNOWFLAKE SCRIPTING **
FOR i IN REVERSE 1 TO 3 LOOP
NULL;
END LOOP;
END;
$$;
모범 사례¶
FOR LOOP를 여러 루프로 분리하거나 조건을 다시 작성합니다.추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.
SSC-FDM-OR0023¶
예외 코드가 Snowflake Scripting 제한을 초과합니다
참고
이 FDM은 더 이상 사용되지 않습니다. SSC-EWI-OR0099 설명서를 참조하세요.
설명¶
이 경고는 예외 선언 오류 코드가 Snowflake Scripting 예외 수 제한을 초과하는 경우에 표시됩니다. 숫자는 -20000에서 -20999 사이의 정수여야 합니다.
코드 예시¶
입력 코드:¶
CREATE OR REPLACE PROCEDURE procedure_exception
IS
my_exception EXCEPTION;
PRAGMA EXCEPTION_INIT ( my_exception, -19000 );
BEGIN
NULL;
END;
생성된 코드:¶
CREATE OR REPLACE PROCEDURE procedure_exception ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
DECLARE
--** SSC-FDM-OR0023 - EXCEPTION CODE NUMBER EXCEEDS SNOWFLAKE SCRIPTING LIMITS **
my_exception EXCEPTION;
--** SSC-FDM-OR0020 - PRAGMA EXCEPTION_INIT IS NOT SUPPORTED **
PRAGMA EXCEPTION_INIT ( my_exception, -19000 );
BEGIN
NULL;
END;
$$;
모범 사례¶
예외 코드가 Snowflake Scripting에서 허용되는 제한 범위 내에 있는지 확인하고, 그렇지 않은 경우 다른 예외 번호를 사용할 수 있도록 변경합니다.
추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.
SSC-FDM-OR0024¶
식의 열을 찾을 수 없습니다
참고
이 FDM은 더 이상 사용되지 않습니다. SSC-EWI-OR0002 설명서를 참조하세요.
설명¶
이 오류는 Select 식의 열을 확인할 수 없는 경우에 발생하며, 일반적으로 참조가 확인되지 않는 형식 액세스 또는 열이 정의되지 않은 사용자 정의 유형이 있는 열(본문이 없는 유형 또는 열이 없는 오브젝트 유형)을 참조하는 경우에 발생합니다.
코드 예시¶
입력 코드:¶
CREATE OR REPLACE PROCEDURE record_unknown_table_proc
AS
unknownTable_variable_rowtype unknownTable%ROWTYPE;
BEGIN
INSERT INTO MyTable values unknownTable_variable_rowtype;
END;
생성된 코드:¶
CREATE OR REPLACE PROCEDURE record_unknown_table_proc ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
DECLARE
unknownTable_variable_rowtype OBJECT !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - ROWTYPE DATA TYPE CONVERTED TO OBJECT ***/!!! := OBJECT_CONSTRUCT();
BEGIN
INSERT INTO MyTable
SELECT
null /*** SSC-FDM-OR0024 - COLUMNS FROM EXPRESSION unknownTable%ROWTYPE NOT FOUND ***/;
END;
$$;
모범 사례¶
참조된 데이터 타입 정의 내에 열이 있는지 확인합니다.
추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.
SSC-FDM-OR0025¶
Snowflake 프로시저에서는 Not Null 제약 조건이 지원되지 않습니다
설명¶
Oracle 변수 선언 NOT NULL 제약 조건은 Snowflake의 프로시저 내 변수 선언에서 지원되지 않습니다.
코드 예시¶
입력 코드:¶
CREATE OR REPLACE PROCEDURE PROC04
IS
var3 FLOAT NOT NULL := 100;
BEGIN
NULL;
END;
생성된 코드:¶
CREATE OR REPLACE PROCEDURE PROC04 ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
DECLARE
var3 FLOAT := 100 /*** SSC-FDM-OR0025 - NOT NULL CONSTRAINT IS NOT SUPPORTED BY SNOWFLAKE ***/;
BEGIN
NULL;
END;
$$;
모범 사례¶
최종 사용자 작업이 필요하지 않습니다.
추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.
SSC-FDM-OR0026¶
cast 연산에서 지원되지 않는 유형입니다.
참고
이 FDM은 더 이상 사용되지 않습니다. SSC-EWI-OR0045 설명서를 참조하세요.
설명¶
이 오류는 cast 연산에서 유형이 지원되지 않는 경우에 발생합니다.
예¶
입력 코드:¶
select cast(' $123.45' as number, 'L999.99') from dual;
생성된 코드:¶
select
--** SSC-FDM-OR0026 - CAST TYPE NOT SUPPORTED **
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0011 - THE FORMAT PARAMETER ' $123.45' IS NOT SUPPORTED ***/!!!
cast(' $123.45' as NUMBER(38, 18) , 'L999.99') from dual;
관련 EWIs¶
SSC-EWI-OR0011: 형식 매개 변수는 지원되지 않습니다.
모범 사례¶
이 cast는 사용자 정의 함수(UDF 및 Stub)로 변환되므로, cast 함수의 동작을 에뮬레이트하도록 수정할 수 있습니다.
추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.
SSC-FDM-OR0027¶
DEFAULT ON CONVERSION ERROR는 지원되지 않습니다.
참고
이 FDM은 더 이상 사용되지 않습니다. SSC-EWI-OR0029 설명서를 참조하세요.
설명¶
Default On Conversion Error는 Snowflake에서 지원되지 않습니다
코드 예시¶
입력 코드:¶
SELECT TO_NUMBER('2,00' DEFAULT 0 ON CONVERSION ERROR) "Value" FROM DUAL;
생성된 코드:¶
SELECT
--** SSC-FDM-OR0027 - DEFAULT ON CONVERSION ERROR NOT SUPPORTED IN SNOWFLAKE IN SNOWFLAKE **
TO_NUMBER('2,00') "Value" FROM DUAL;
모범 사례¶
UDF를 생성하여
DEFAULT값ON CONVERSION ERROR의 동작을 에뮬레이트할 수 있습니다.추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.
SSC-FDM-OR0028¶
SYS_CONTEXT 매개 변수는 지원되지 않습니다.
참고
이 FDM은 더 이상 사용되지 않습니다. SSC-EWI-OR0031 설명서를 참조하세요.
설명¶
이 오류는 SYS_CONTEXT 함수 매개 변수가 지원되지 않는 경우에 발생합니다.
코드 예시¶
입력 코드:¶
SELECT SYS_CONTEXT ('USERENV', 'NLS_SORT') FROM DUAL;
생성된 코드:¶
SELECT
--** SSC-FDM-OR0028 - 'NLS_SORT' SYS_CONTEXT PARAMETER NOT SUPPORTED IN SNOWFLAKE **
SYS_CONTEXT ('USERENV', 'NLS_SORT') FROM DUAL;
모범 사례¶
이 함수는 사용자 정의 함수(stub)로 변환되므로, SYS_CONTEXT 매개 변수의 동작을 에뮬레이트하도록 수정할 수 있습니다.
추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.
SSC-FDM-OR0029¶
이 ALTER SESSION 구성은 Snowflake에서 지원되지 않습니다.
설명¶
ALTER SESSION 문의 절 또는 구성은 현재 지원되지 않습니다.
코드 예시¶
입력 코드:¶
ALTER SESSION SET SQL_TRACE TRUE;
생성된 코드:¶
----** SSC-FDM-OR0029 - THIS ALTER SESSION CONFIGURATION IS NOT SUPPORTED IN SNOWFLAKE **
--ALTER SESSION SET SQL_TRACE TRUE
;
모범 사례¶
세션 변수의 경우 Snowflake 설명서에서 해당하는 항목을 찾을 수 있습니다.
추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.
SSC-FDM-OR0030¶
ROWID 의사 열은 Snowflake에서 지원되지 않습니다
설명¶
쿼리에서 ROWID가 의사 열로 사용되는 경우 런타임 오류를 방지하기 위해 null로 변환되며 이 EWI가 추가됩니다. 이 기능을 에뮬레이트하는 변환은 아직 없습니다.
코드 예시¶
입력 코드 Oracle:¶
SELECT ROWID FROM T1;
생성된 코드:¶
SELECT
--** SSC-FDM-OR0030 - ROWID PSEUDOCOLUMN IS NOT SUPPORTED IN SNOWFLAKE, IT WAS CONVERTED TO NULL TO AVOID RUNTIME ERRORS **
'' AS ROWID
FROM
T1;
모범 사례¶
최종 사용자 작업이 필요하지 않습니다.
추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.
SSC-FDM-OR0031¶
DML의 error logging 절은 Snowflake에서 지원되지 않습니다.
설명¶
이 오류는 Oracle DML 문의 error_logging 절이 Snowflake의 DML 문에서 지원되지 않음을 알리기 위해 사용됩니다.
코드 예시¶
입력 코드:¶
MERGE INTO people_target pt
USING people_source ps ON (pt.person_id = ps.person_id)
WHEN MATCHED THEN UPDATE
SET pt.first_name = ps.first_name,
pt.last_name = ps.last_name,
pt.title = ps.title
LOG ERRORS;
생성된 코드:¶
MERGE INTO people_target pt
USING people_source ps ON (pt.person_id = ps.person_id)
WHEN MATCHED THEN
UPDATE
SET pt.first_name = ps.first_name,
pt.last_name = ps.last_name,
pt.title = ps.title
-- --** SSC-FDM-OR0031 - THE ERROR LOGGING CLAUSE IN DML STATEMENTS IS NOT SUPPORTED BY SNOWFLAKE **
--LOG ERRORS
;
모범 사례¶
추가 사용자 작업이 필요하지 않습니다.
추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.
SSC-FDM-OR0032¶
문자열이 아닌 입력 매개 변수가 있는 StandardHash 함수는 Snowflake에서 다른 결과를 생성합니다.
설명¶
이 경고는 문자열이 아닌 입력 매개 변수가 있는 Oracle의 STANDARD_HASH 함수가 Snowflake에서 다른 결과를 생성하는 경우에 사용됩니다.
코드 예시¶
입력 코드:¶
쿼리¶
SELECT STANDARD_HASH(1+1) FROM DUAL;
결과¶
STANDARD_HASH(1+1) |
--------------------------------------------------+
E39323970701D93598FC1D357F4BF04578CE3242 |
생성된 코드:¶
쿼리¶
SELECT
--** SSC-FDM-OR0032 - STANDARD HASH FUNCTION WITH INPUT NON-STRING PARAMETER GENERATES A DIFFERENT RESULT IN SNOWFLAKE **
SHA1(1+1)
FROM DUAL;
결과¶
SHA1(1+1) |
--------------------------------------------------+
da4b9237bacccdf19c0760cab7aec4a8359010b0 |
모범 사례¶
추가 사용자 작업이 필요하지 않습니다.
추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.
SSC-FDM-OR0033¶
DBMS_RANDOM.VALUE Snowflake에서는 기본 제공 패키지의 전체 자릿수가 더 낮습니다
설명
이 메시지는 SnowConvert AI가 DBMS_RANDOM.VALUE Oracle 기본 제공 패키지 함수를 마이그레이션하는 경우에 표시됩니다. 이 경고는 기능을 에뮬레이트하기 위해 추가된 UDF의 전체 자릿수가 원래 함수보다 낮음을 나타냅니다.
코드 예시¶
입력 코드:¶
CREATE OR REPLACE PROCEDURE built_in_package_proc
IS
var1 NUMBER;
BEGIN
SELECT DBMS_RANDOM.VALUE() INTO var1 FROM DUAL;
SELECT DBMS_RANDOM.VALUE(2,10) INTO var1 FROM DUAL;
END;
생성된 코드:¶
CREATE OR REPLACE PROCEDURE built_in_package_proc ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
DECLARE
var1 NUMBER(38, 18);
BEGIN
SELECT
--** SSC-FDM-OR0033 - DBMS_RANDOM.VALUE DIGITS OF PRECISION ARE LOWER IN SNOWFLAKE **
DBMS_RANDOM.VALUE_UDF() INTO
:var1
FROM DUAL;
SELECT
--** SSC-FDM-OR0033 - DBMS_RANDOM.VALUE DIGITS OF PRECISION ARE LOWER IN SNOWFLAKE **
DBMS_RANDOM.VALUE_UDF(2,10) INTO
:var1
FROM DUAL;
END;
$$;
모범 사례¶
추가 사용자 작업이 필요하지 않습니다.
추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.
SSC-FDM-OR0034¶
START WITH ‘LIMIT VALUE’ 시퀀스는 Snowflake에서 지원되지 않습니다.
참고
이 FDM은 더 이상 사용되지 않습니다. SSC-EWI-OR0001 설명서를 참조하세요.
설명¶
이 오류는 START WITH 문 값이 LIMIT VALUE인 경우에 표시됩니다.
Oracle에서 이 절은 ALTER TABLE에만 사용됩니다
identity_options에만 적용되는STARTWITHLIMIT VALUE는ALTERTABLEMODIFY하고만 사용할 수 있습니다.STARTWITHLIMITVALUE를 지정한 경우, Oracle 데이터베이스는 테이블을 잠그고 테이블에서 최대 ID 열 값(시퀀스가 증가하는 경우) 또는 최소 ID 열 값(시퀀스가 감소하는 경우)을 찾아 해당 값을 시퀀스 생성기의 상위 워터마크로 할당합니다. 시퀀스 생성기에서 반환되는 다음 값은 상위 워터마크 +INCREMENTBYinteger(시퀀스가 증가하는 경우) 또는 상위 워터마크 -INCREMENTBYinteger(시퀀스가 감소하는 경우)입니다.
ALTER TABLE ORACLE¶
코드 예시¶
입력 코드:¶
CREATE SEQUENCE SEQUENCE1
START WITH LIMIT VALUE;
생성된 코드:¶
CREATE OR REPLACE SEQUENCE SEQUENCE1
--** SSC-FDM-OR0034 - SEQUENCE START VALUE WITH 'LIMIT VALUE' IS NOT SUPPORTED BY SNOWFLAKE. **
START WITH LIMIT VALUE
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}';
모범 사례¶
추가 사용자 작업이 필요하지 않습니다.
추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.
SSC-FDM-OR0035¶
DBMS_OUTPUT.PUTLINE UDF 구현 확인
설명¶
이 메시지는 SnowConvert AI가 DBMS_OUTPUT.PUT_LINE Oracle 기본 제공 패키지 함수를 마이그레이션하는 경우에 표시됩니다. 이는 추가된 UD를 확인하라는 경고입니다F.
이 EWI는 DBMS_OUTPUT.PUT_LINE_UDF 구현을 검토하도록 안내하기 위해 표시되며 다음 정보를 확인할 수 있습니다.
경고
이 UDF를 사용하면 성능에 영향을 미칠 수 있습니다. 정보 로깅을 시작하려면 구현의 주석을 제거하세요. 이는 임시 테이블을 사용하고 있으므로 세션이 종료된 후에도 데이터를 유지하려면 CREATE TABLE의 TEMPORARY를 제거하세요.
DBMS_OUTPUT.PUT_LINE_UDF가 호출이 완료되면 SELECT* FROMDBMS_OUTPUT.DBMS_OUTPUT_LOG. 쿼리를 사용하여 모든 로그를 읽어오세요.
코드 예시¶
입력 코드:¶
CREATE OR REPLACE PROCEDURE builtin_package_call
IS
BEGIN
DBMS_OUTPUT.PUT_LINE(1);
DBMS_OUTPUT.PUT_LINE("Test");
END;
생성된 코드:¶
CREATE OR REPLACE PROCEDURE builtin_package_call ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
BEGIN
--** SSC-FDM-OR0035 - CHECK UDF IMPLEMENTATION FOR DBMS_OUTPUT.PUT_LINE_UDF. **
CALL DBMS_OUTPUT.PUT_LINE_UDF(1);
--** SSC-FDM-OR0035 - CHECK UDF IMPLEMENTATION FOR DBMS_OUTPUT.PUT_LINE_UDF. **
CALL DBMS_OUTPUT.PUT_LINE_UDF("Test");
END;
$$;
모범 사례¶
추가 사용자 작업이 필요하지 않습니다.
추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.
SSC-FDM-OR0036¶
불필요한 기본 제공 패키지 매개 변수
설명¶
이 메시지는 SnowConvert AI가 Oracle 기본 제공 패키지 프로시저 또는 함수를 마이그레이션하고 일부 인자가 호출에서 제거되는 경우에 표시됩니다.
원본 매개 변수 중 일부는 Snowflake에 해당하는 항목이 없거나 변환된 버전에서는 필요하지 않을 수 있습니다. 이러한 매개 변수는 생성된 코드에서 제거되지만 사용자가 계속 추적할 수 있도록 EWI 메시지에 보존됩니다.
코드 예시¶
입력 코드:¶
CREATE OR REPLACE PROCEDURE built_in_package_proc
IS
w_file UTL_FILE.FILE_TYPE;
BEGIN
w_file:= UTL_FILE.FOPEN('MY_DIR','test.txt','W',32760);
UTL_FILE.PUT_LINE(w_file,'New line');
END;
생성된 코드:¶
CREATE OR REPLACE PROCEDURE built_in_package_proc ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
DECLARE
w_file OBJECT /*** SSC-FDM-0015 - REFERENCED CUSTOM TYPE 'UTL_FILE.FILE_TYPE' IN QUERY NOT FOUND, USAGES MAY BE AFFECTED ***/ := OBJECT_CONSTRUCT();
BEGIN
--** SSC-FDM-OR0036 - PARAMETERS: 'LOCATION, MAX_LINESIZE_UDF' UNNECESSARY IN THE IMPLEMENTATION. **
CALL UTL_FILE.FOPEN_UDF('test.txt', 'W');
SELECT
*
INTO
w_file
FROM
TABLE(RESULT_SCAN(LAST_QUERY_ID()));
--** SSC-FDM-OR0036 - PARAMETERS: 'AUTOFLUSH_UDF' UNNECESSARY IN THE IMPLEMENTATION. **
CALL UTL_FILE.PUT_LINE_UDF(:w_file, 'New line');
END;
$$;
모범 사례¶
추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.
SSC-FDM-OR0037¶
SELECT에 사용된 구문이 Snowflake에서 지원되지 않습니다.
참고
이 FDM은 더 이상 사용되지 않습니다. SSC-EWI-OR0004 설명서를 참조하세요.
참고
출력 코드의 일부 부분은 명확성을 위해 생략되었습니다.
설명¶
이 경고는 SELECT의 절이 Snowflake에서 지원되지 않는 경우에 발생합니다. 지원되지 않는 절은 다음과 같습니다.
CONTAINERS
SUBQUERY RESTRICTION
HIERARCHIES
EXTERNAL MODIFY
DBLINK
SHARDS
PARTITION
SUBPARTITION
HIERARCHICAL
코드 예시¶
입력 코드:¶
SELECT * FROM TABLE1 EXTERNAL MODIFY (LOCATION 'file.csv' REJECT LIMIT UNLIMITED);
생성된 코드:¶
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "TABLE1" **
SELECT * FROM
TABLE1
-- --** SSC-FDM-OR0037 - THE 'OPTIONAL MODIFIED EXTERNAL' SYNTAX IN SELECT IS NOT SUPPORTED IN SNOWFLAKE **
-- EXTERNAL MODIFY (LOCATION 'file.csv' REJECT LIMIT UNLIMITED)
;
모범 사례¶
추가 사용자 작업이 필요하지 않습니다.
추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.
SSC-FDM-OR0038¶
부울 커서 특성은 지원되지 않습니다.
참고
이 FDM은 더 이상 사용되지 않습니다. SSC-EWI-OR0128 설명서를 참조하세요.
설명¶
이 메시지는 부울 커서 특성이 SnowScript에서 지원되지 않거나 SnowScript에서 해당 기능을 에뮬레이트하는 변환이 없음을 나타내기 위해 사용됩니다. 다음 테이블은 에뮬레이션할 수 있는 부울 커서 특성을 보여줍니다.
부울 커서 특성 |
상태 |
|---|---|
|
에뮬레이션 가능 |
|
에뮬레이션 가능 |
|
지원되지 않음 |
코드 예시¶
입력 코드:¶
CREATE OR REPLACE PROCEDURE cursor_attributes_proc
IS
is_open_attr BOOLEAN;
found_attr BOOLEAN;
my_record table1%ROWTYPE;
CURSOR my_cursor IS SELECT * FROM table1;
BEGIN
OPEN my_cursor;
LOOP
FETCH my_cursor INTO my_record;
EXIT WHEN my_cursor%NOTFOUND;
is_open_attr := my_cursor%ISOPEN;
found_attr := my_cursor%FOUND;
END LOOP;
CLOSE my_cursor;
END;
생성된 코드:¶
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "table1" **
CREATE OR REPLACE PROCEDURE cursor_attributes_proc ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
DECLARE
is_open_attr BOOLEAN;
found_attr BOOLEAN;
my_record OBJECT !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - ROWTYPE DATA TYPE CONVERTED TO OBJECT ***/!!! := OBJECT_CONSTRUCT();
my_cursor CURSOR
FOR
SELECT
OBJECT_CONSTRUCT( *) sc_cursor_record FROM
table1;
BEGIN
OPEN my_cursor;
LOOP
--** SSC-PRF-0003 - FETCH INSIDE A LOOP IS CONSIDERED A COMPLEX PATTERN, THIS COULD DEGRADE SNOWFLAKE PERFORMANCE. **
FETCH my_cursor INTO
:my_record;
IF (my_record IS NULL) THEN
EXIT;
END IF;
is_open_attr := null /*my_cursor%ISOPEN*/ /*** SSC-FDM-OR0038 - BOOLEAN CURSOR ATTRIBUTE %ISOPEN IS NOT SUPPORTED IN SNOWFLAKE ***/;
found_attr := my_record IS NOT NULL;
END LOOP;
CLOSE my_cursor;
END;
$$;
모범 사례¶
추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.
SSC-FDM-OR0039¶
Create Type은 Snowflake에서 지원되지 않습니다
참고
이 FDM은 더 이상 사용되지 않습니다. SSC-EWI-OR0007 설명서를 참조하세요.
설명¶
이 메시지는 Snowflake에서 지원되지 않는 Create Type 문을 사용하는 경우에 추가됩니다.
코드 예시¶
입력 코드(Oracle):¶
CREATE TYPE type6 UNDER type5(COL1 INTEGER);
생성된 코드:¶
----** SSC-FDM-OR0039 - CREATE TYPE SUBTYPE IS NOT SUPPORTED IN SNOWFLAKE **
--CREATE TYPE type6 UNDER type5(COL1 INTEGER)
;
모범 사례¶
최종 사용자 작업이 필요하지 않습니다.
추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.
SSC-FDM-OR0040¶
Snowflake에서는 숫자 문자를 변경할 수 없습니다. Snowflake의 소수점 구분 기호는 점 문자입니다.
설명¶
Snowflake에서는 숫자 문자를 변경할 수 없습니다. Snowflake의 소수점 구분 기호는 점 문자입니다. ALTER 세션 문이 주석 처리되고 경고가 추가됩니다.
코드 예시¶
Oracle:¶
ALTER SESSION SET NLS_NUMERIC_CHARACTERS = ',.';
Snowflake Scripting:¶
----** SSC-FDM-OR0040 - NUMERIC CHARACTERS CANNOT BE ALTERED IN SNOWFLAKE. THE DECIMAL SEPARATOR IN SNOWFLAKE IS THE DOT CHARACTER. **
--ALTER SESSION SET NLS_NUMERIC_CHARACTERS = ',.'
;
모범 사례¶
최종 사용자 작업이 필요하지 않습니다.
추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.
SSC-FDM-OR0041¶
기본 제공 패키지는 지원되지 않습니다.
참고
이 FDM은 더 이상 사용되지 않습니다. SSC-EWI-OR0076 설명서를 참조하세요.
설명¶
기본 제공 패키지에 대한 변환은 현재 지원되지 않습니다.
코드 예시¶
입력 코드(Oracle):¶
SELECT
UTL_RAW.CAST_TO_RAW('some magic here'),
DBMS_UTILITY.GET_TIME
FROM DUAL;
생성된 코드:¶
SELECT
--** SSC-FDM-OR0041 - TRANSLATION FOR BUILT-IN PACKAGE 'UTL_RAW.CAST_TO_RAW' IS NOT CURRENTLY SUPPORTED. **
'' AS CAST_TO_RAW,
--** SSC-FDM-OR0041 - TRANSLATION FOR BUILT-IN PACKAGE 'DBMS_UTILITY.GET_TIME' IS NOT CURRENTLY SUPPORTED. **
'' AS GET_TIME
FROM DUAL;
모범 사례¶
최종 사용자 작업이 필요하지 않습니다.
추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.
SSC-FDM-OR0042¶
타임스탬프로 변환된 날짜 유형의 동작이 다릅니다
설명¶
Snowflake의 날짜 유형 동작은 Oracle과 다르기 때문에 날짜 유형은 플래그(–disableDateAsTimestamp)에 따라 날짜 또는 타임스탬프 유형으로 변환됩니다.
주요 차이점¶
Oracle DATE |
Snowflake DATE |
|
|---|---|---|
기능 |
날짜 및 시간 정보 저장 |
날짜 정보만 저장(연, 월, 일) |
내부 저장소 |
epoch 이후 초를 나타내는 이진수 |
날짜에 최적화된 컴팩트 형식 |
사용 사례 |
범용 날짜 및 시간 저장소 |
날짜 정보만 필요한 시나리오 |
장점 |
날짜와 시간 모두 지원 |
보다 효율적인 날짜 저장소 제공 |
제한 사항 |
날짜 및 시간 구성 요소를 별도로 저장할 수 없습니다. |
시간 정보를 저장하지 않습니다 |
코드 예시¶
입력 코드(Oracle):¶
CREATE TABLE "PUBLIC"."TABLE1"
(
"CREATED_DATE" DATE,
"UPDATED_DATE" DATE
);
생성된 코드:¶
CREATE OR REPLACE TABLE "PUBLIC"."TABLE1"
(
"CREATED_DATE" TIMESTAMP /*** SSC-FDM-OR0042 - DATE TYPE COLUMN HAS A DIFFERENT BEHAVIOR IN SNOWFLAKE. ***/,
"UPDATED_DATE" TIMESTAMP /*** SSC-FDM-OR0042 - DATE TYPE COLUMN HAS A DIFFERENT BEHAVIOR IN SNOWFLAKE. ***/
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
;
-- Additional Params: --disableDateAsTimestamp
CREATE OR REPLACE TABLE "PUBLIC"."TABLE1"
(
"CREATED_DATE" DATE /*** SSC-FDM-OR0042 - DATE TYPE COLUMN HAS A DIFFERENT BEHAVIOR IN SNOWFLAKE. ***/,
"UPDATED_DATE" DATE /*** SSC-FDM-OR0042 - DATE TYPE COLUMN HAS A DIFFERENT BEHAVIOR IN SNOWFLAKE. ***/
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
;
모범 사례¶
최종 사용자 작업이 필요하지 않습니다.
추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.
SSC-FDM-OR0043¶
BFILE 및 BLOB 매개 변수는 바이너리로 간주됩니다. 형식이 필요할 수 있습니다.
설명¶
이 오류는 TO_CLOB가 TO_VARCHAR 함수로 변환되는 경우에 발생합니다. BFILE 및 BLOB 매개 변수에 대한 형식이 필요할 수 있습니다.
코드 예시¶
입력 코드: ¶
SELECT TO_CLOB('Lorem ipsum dolor sit amet') FROM DUAL;
생성된 코드:¶
SELECT
--** SSC-FDM-OR0043 - BFILE/BLOB PARAMETERS ARE CONSIDERED BINARY, FORMAT MAY BE NEEDED. **
TO_VARCHAR('Lorem ipsum dolor sit amet')
FROM DUAL;
모범 사례¶
입력 코드와 변환된 코드의 출력이 동일한지 확인하고 필요한 경우 형식 매개 변수를 추가합니다.
추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.
SSC-FDM-OR0044¶
REGEXP_LIKE_UDF 일치 매개 변수가 올바르게 동작하지 않을 수 있습니다
참고
출력 코드의 일부 부분은 명확성을 위해 생략되었습니다.
설명¶
이 경고는 Oracle REGEXP_LIKE 조건에 세 번째 매개 변수(일치 매개 변수)가 포함되는 경우에 표시됩니다. 이 경고가 추가되는 이유는 REGEXP_LIKE를 대체하는 데 사용되는 REGEXP_LIKE_UDF가 해당 일치 매개 변수에서 사용되는 모든 문자를 인식하지 못하므로, Snowflake의 쿼리 결과가 Oracle과 동일하지 않을 수 있기 때문입니다.
코드 예시¶
입력 코드 Oracle:¶
SELECT last_name
FROM hr.employees
WHERE REGEXP_LIKE (last_name, '([aeiou])\1', 'i')
ORDER BY last_name;
생성된 코드:¶
SELECT last_name
FROM
hr.employees
WHERE
--** SSC-FDM-OR0044 - REGEXP_LIKE_UDF MATCH PARAMETER MAY HAVE SOME FUNCTIONAL DIFFERENCES COMPARED TO ORACLE **
PUBLIC.REGEXP_LIKE_UDF(last_name, '([aeiou])\\1', 'i')
ORDER BY last_name;
REGEXP_LIKE조건에 사용자 정의 함수에서 지원되지 않는 문자 중 하나가 포함되는 경우, 가능한 해결 방법은 일치 매개 변수에서 누락된 문자의 동작을 시뮬레이션하기 위해 정규식을 변경하는 것입니다. 지원되지 않는 문자에 대해 자세히 알아보려면 REGEXP_LIKE_UDF 설명서를 참조하세요.추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.
SSC-FDM-OR0045¶
Partition 절은 Snowflake에서 처리됩니다
참고
이 FDM은 더 이상 사용되지 않습니다. SSC-EWI-OR0010 설명서를 참조하세요.
설명¶
이 경고는 PARTITION 및 SUBPARTITION 절이 쿼리 내에 나타나는 경우에 표시됩니다. Snowflake는 파티션을 자동으로 처리합니다.
코드 예시¶
입력 코드:¶
SELECT * FROM TABLITA PARTITION(col1);
생성된 코드:¶
SELECT * FROM
TABLITA
-- --** SSC-FDM-OR0045 - PARTITIONS CLAUSES ARE HANDLED BY SNOWFLAKE **
-- PARTITION(col1)
;
모범 사례¶
추가 사용자 작업이 필요하지 않습니다.
추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.
SSC-FDM-OR0046¶
Snowflake에서는 하위 쿼리 제한을 사용할 수 없습니다
참고
출력 코드의 일부 부분은 명확성을 위해 생략되었습니다.
설명¶
이 경고는 SELECT 문에 하위 쿼리 제한이 나타나는 경우에 발생합니다.
코드 예시¶
입력 코드:¶
SELECT * FROM LATERAL(SELECT * FROM TABLITA WITH READ ONLY CONSTRAINT T);
생성된 코드:¶
SELECT * FROM LATERAL(SELECT * FROM
TABLITA
-- --** SSC-FDM-OR0046 - THE SUBQUERY RESTRICTION IS NOT POSSIBLE IN SNOWFLAKE **
-- WITH READ ONLY CONSTRAINT T
);
모범 사례¶
추가 사용자 작업이 필요하지 않습니다.
추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.
SSC-FDM-OR0047¶
TimeStampOutput 형식을 설정해야 할 수도 있습니다.
설명¶
타임스탬프 출력의 동등성을 위해 TIMESTAMP_OUTPUT_FORMAT 세션 매개 변수를 ‘DD-MON-YY HH24.MI.SS.FF AM TZH:TZM’으로 설정해야 할 수도 있습니다.
코드 예시¶
입력 코드: ¶
SELECT SYSTIMESTAMP FROM DUAL;
Oracle의 기본 TIMESTAMP 출력 예시¶
출력
13-JAN-21 04.18.37.288656 PM +00:00
생성된 코드:¶
SELECT
CURRENT_TIMESTAMP() /*** SSC-FDM-OR0047 - YOU MAY NEED TO SET TIMESTAMP OUTPUT FORMAT ('DD-MON-YY HH24.MI.SS.FF AM TZH:TZM') ***/
FROM DUAL;
Snowflake의 기본 TIMESTAMP 출력 예시¶
출력
2021-01-13 08:18:19.720 -080
모범 사례¶
Snowflake에서 타임스탬프 출력 형식을 변경하려면 다음 쿼리를 사용합니다.
ALTER SESSION SET TIMESTAMP_OUTPUT_FORMAT = 'DD-MON-YY HH24.MI.SS.FF AM TZH:TZM';추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.
SSC-FDM-OR0049¶
기본값 유형이 식 유형과 다른 경우 LAG 함수가 실패할 수 있습니다.
설명¶
Oracle에서 LAG 함수는 기본값의 데이터 타입을 식의 타입과 일치하도록 자동으로 변환합니다. 그러나 Snowflake는 이러한 암시적 변환을 수행하지 않습니다. 따라서 데이터 타입이 호환되지 않는 경우 LAG 함수가 실패할 수 있음을 나타내는 경고가 표시됩니다.
코드 예시¶
입력 코드:¶
SELECT
LAG(salary, 2, '0') OVER (ORDER BY salary) AS salary_two_steps_back
FROM
employees;
생성된 코드:¶
SELECT
--** SSC-FDM-OR0049 - LAG FUNCTION MIGHT FAIL IF DEFAULT VALUE TYPE DIFFERS FROM THE EXPRESSION TYPE. **
LAG(salary, 2, '0')
OVER (ORDER BY salary) AS salary_two_steps_back
FROM
employees;
모범 사례¶
기본값의 데이터 타입이
LAG함수에 있는 식의 데이터 타입과 일치하는지 확인합니다. 일치하지 않는 경우 기본값을 식의 데이터 타입으로 명시적으로 캐스팅합니다.추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.
SSC-FDM-OR0050¶
NOCOPY 매개 변수를 사용하는 예외는 데이터 불일치를 초래할 수 있습니다.
설명¶
Oracle PL/SQL에서 NOCOPY 키워드는 OUT 및 IN OUT 프로시저 매개 변수에 대한 최적화 힌트입니다. 기본적으로, Oracle은 이러한 매개 변수를 값으로 전달하여 호출 중에 비용이 많이 드는 데이터 복사본을 생성하고 완료 시 다시 복사합니다. 이로 인해 대규모 데이터 구조에 상당한 성능 오버헤드가 발생할 수 있습니다.
NOCOPY는 Oracle에 이를 참조로 전달하도록 지시하여 해당 프로시저가 원본 데이터를 직접 수정할 수 있도록 합니다. 이를 통해 복사 오버헤드가 제거되고 성능이 향상됩니다. 그러나 변경 사항은 즉시 적용되며 프로시저 내에서 처리되지 않은 예외가 발생하는 경우 암시적으로 롤백되지 않습니다.
따라서 NOCOPY 매개 변수 옵션을 제거하고 이 FDM을 추가합니다. 이는 예외 발생 시 프로시저 실행이 종료되어 RETURN 문에 도달하지 못하기 때문입니다. 결과적으로 프로시저가 할당을 위해 새 값을 성공적으로 반환하지 못하므로 호출자의 선언 블록에 있는 변수는 초기 값을 유지합니다.
코드 예시¶
입력 코드:¶
CREATE OR REPLACE PROCEDURE calculate_division_with_nocopy (
p_numerator IN NUMBER,
p_denominator IN NUMBER,
p_result OUT NOCOPY NUMBER
)
IS
PROCEDURE calculate_division(result OUT NOCOPY NUMBER)
AS
BEGIN
result := 20;
result := p_numerator / p_denominator;
END calculate_division;
BEGIN
calculate_division(p_result);
EXCEPTION
WHEN OTHERS THEN
p_result := p_result;
END calculate_division_with_nocopy;
생성된 코드:¶
CREATE OR REPLACE PROCEDURE calculate_division_with_nocopy (p_numerator NUMBER(38, 18), p_denominator NUMBER(38, 18), p_result OUT NUMBER(38, 18)
)
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "oracle", "convertedOn": "07/23/2025", "domain": "no-domain-provided" }}'
EXECUTE AS CALLER
AS
$$
DECLARE
calculate_division PROCEDURE(result
--** SSC-FDM-OR0050 - EXCEPTIONS WITH NOCOPY PARAMETERS MAY LEAD TO DATA INCONSISTENCY. **
NUMBER(38, 18))
RETURNS NUMBER
AS
BEGIN
result := 20;
result := :p_numerator / :p_denominator;
RETURN result;
END;
call_results NUMBER;
BEGIN
call_results := (
CALL
calculate_division(:p_result)
);
p_result := :call_results;
EXCEPTION
WHEN OTHER THEN
p_result := :p_result;
END;
$$;
모범 사례¶
추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.