SnowConvert AI - Oracle 기능적 차이

SSC-FDM-OR0001

참고

이 FDM은 이전 버전의 Oracle SnowConvert AI에 추가되었습니다. 현재는 더 이상 사용되지 않습니다.

설명

이 오류는 평가 보고서 파일과 관련이 있습니다. 평가 세부 정보 보고서 파일 작성 중 오류가 발생하는 경우에 표시됩니다.

모범 사례

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;
Copy
 CREATE SEQUENCE SEQUENCE2
START WITH -9223372036854775809;
Copy
생성된 코드:
 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"}}';
Copy
 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"}}';
Copy

모범 사례

  • 시퀀스를 재설정하고 사용법도 수정하는 것이 좋습니다. 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;
Copy
생성된 코드:
 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;
Copy

권장 사항

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;
Copy
생성된 코드:
 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 ***/;
Copy
  • 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;
Copy
생성된 코드:
 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;
Copy

모범 사례

SSC-FDM-OR0006

Not Null 인라인 제약 조건에서 제약 조건 상태가 제거되었습니다.

설명

이 경고는 Not Null 열 제약 조건에 다음 Oracle 제약 조건 상태 중 하나가 열 인라인 정의의 일부로 포함되어 있는 경우에 발생합니다.

 [ RELY | NORELY | RELY DISABLE | RELY ENABLE | VALIDATE | NOVALIDATE ]
Copy

Snowflake는 이러한 상태를 지원하지 않으므로 NOT NULL 인라인 제약 조건에서 제거됩니다.

코드 예시

입력 코드:
 CREATE TABLE Table1(
  col1 INT NOT NULL RELY
);
Copy
생성된 코드:
 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"}}'
  ;
Copy

모범 사례

SSC-FDM-OR0007

Snowflake는 오브젝트의 버전 관리를 지원하지 않습니다. 개발자는 코드 버전 관리를 위한 대체 접근 방식을 고려해야 합니다.

설명

Snowflake는 오브젝트의 버전 관리를 지원하지 않습니다. 한정자 EDITINONABLE 또는 NONEDITIONABLE은 변환된 코드에서 제거되고 경고가 추가됩니다.

코드 예시

입력 코드:
 CREATE OR REPLACE EDITIONABLE PROCEDURE FUN1 (n number)is
l_result number;
begin
    DELETE FROM employees;
end;
Copy
생성된 코드:
 --** 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;
$$;
Copy

모범 사례

  • 사용자는 코드 버전 관리를 위한 대체 접근 방식을 고려해야 합니다.

  • 추가 지원이 필요한 경우 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;
Copy
생성된 코드:
 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;
Copy

Snowflake에서 INTERSECTMINUS, 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;
  }
$$;
Copy

모범 사례

SSC-FDM-OR0010

NUMBER 데이터 타입의 전체 자릿수가 소수 자릿수와 일치하도록 증가했습니다.

설명

NUMBER 데이터 타입은 고정 및 부동 소수점 숫자를 저장합니다. 이 데이터는 Oracle 데이터베이스를 실행하는 다양한 운영 체제 간에 이식 가능합니다. NUMBER 데이터 타입은 숫자 데이터를 저장해야 하는 대부분의 경우에 권장됩니다. 구문은 NUMBER(X, Y)이며 여기서 X 는 전체 자릿수이고 Y 는 소수 자릿수입니다.

예를 들어, NUMBER(5, 3)은 다음과 같이, 소수점 앞 자릿수가 _2_이고 소수점 뒤 자릿수가 _3인 숫자입니다.

12.345

Copy

또 다른 중요한 고려 사항은 다음과 같습니다.

  1. 소수 자릿수 Y 는 소수점 오른쪽의 최대 자릿수를 지정합니다.

  2. 소수 자릿수-전체 자릿수 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;
Copy
결과
Col1   |
-------+
0.00009|
0.00002|
0.01268|

Copy
생성된 코드:
쿼리
 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;
Copy
결과
Col1   |
-------+
0.00009|
0.00002|
0.01268|

Copy

모범 사례

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;
Copy
생성된 코드:
 !!!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;
$$;
Copy

모범 사례

SSC-FDM-OR0012

COMMIT 및 ROLLBACK 문이 의도한 대로 수행되려면 적절한 설정이 필요합니다.

설명

COMMIT 및 ROLLBACK 문이 Snowflake에서 의도한 대로 수행되려면 적절한 설정이 필요합니다. 이러한 문의 올바른 기능을 시뮬레이션하려면 Snowflake에서 다음 명령을 실행해야 합니다.

 ALTER SESSION SET AUTOCOMMIT = false;
Copy

코드 예시

입력 코드
 COMMIT;
ROLLBACK;
Copy
생성된 코드
 --** 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;
Copy

모범 사례

  • 코드 실행을 시작하기 전에 설명 섹션에 언급된 쿼리를 실행합니다.

  • 추가 지원이 필요한 경우 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;
Copy
생성된 코드:
 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;
Copy

모범 사례

  • 데이터 계층 구조에 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")
);
Copy
생성된 코드:
 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");
Copy

참고

“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;
Copy
결과
|CHAR_COLUMN1   |LENGTHB(CHAR_COLUMN1)|LENGTH('HELLOWORLD')|
|---------------|---------------------|--------------------|
|Hello world    |15                   |11                  |


Copy
생성된 코드:
쿼리
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                   |


Copy

모범 사례

  • 사용된 데이터 타입을 수동으로 확인합니다.

  • 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';
Copy
생성된 코드
 --** 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;
Copy

모범 사례

SSC-FDM-OR0017

타임스탬프의 기본값을 사용하기 위해 DBTimezone이 제거되었습니다.

설명

DBTIMEZONE 키워드가 AT TIME ZONE 식에서 제거되었습니다.

코드 예시

입력 코드:
 SELECT TIMESTAMP '1998-12-25 09:26:50.12' AT TIME ZONE DBTIMEZONE FROM DUAL;
Copy
생성된 코드:
 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;
Copy

모범 사례

  • 동일한 결과를 얻기 위해 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';
Copy
생성된 코드:
 --** 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);
Copy

모범 사례

  • 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;
Copy
생성된 코드:
 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;
Copy

모범 사례

  • 행의 결정론적 순서를 따르도록 하여 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;
/
Copy
생성된 코드:
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;
$$;
Copy

모범 사례

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();
Copy
결과
P1                                                |
--------------------------------------------------+
 Loop1:  1 2 3 4 5                                |
 Loop2:  2 3 4 5                                  |
 Loop3:  2 3 4 5                                  |

Copy

코드 예시

입력 코드:
 CREATE OR REPLACE PROCEDURE p1
AS
BEGIN
FOR i NUMBER(5,1) IN 1.2 .. 5.7 LOOP
    NULL;
END LOOP;
END;
Copy
생성된 코드:
 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;
$$;
Copy

모범 사례

  • 정수를 사용하도록 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;
Copy
생성된 코드:
 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;
$$;
Copy

모범 사례

  • 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;
Copy
생성된 코드:
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;
Copy
생성된 코드:
 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;
$$;
Copy

모범 사례

  • 참조된 데이터 타입 정의 내에 열이 있는지 확인합니다.

  • 추가 지원이 필요한 경우 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;
Copy
생성된 코드:
 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;
$$;
Copy

모범 사례

SSC-FDM-OR0026

cast 연산에서 지원되지 않는 유형입니다.

참고

이 FDM은 더 이상 사용되지 않습니다. SSC-EWI-OR0045 설명서를 참조하세요.

설명

이 오류는 cast 연산에서 유형이 지원되지 않는 경우에 발생합니다.

입력 코드:
 select cast(' $123.45' as number, 'L999.99') from dual;
Copy
생성된 코드:
 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;
Copy

관련 EWIs

  1. 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;
Copy
생성된 코드:
 SELECT
--** SSC-FDM-OR0027 - DEFAULT ON CONVERSION ERROR NOT SUPPORTED IN SNOWFLAKE IN SNOWFLAKE **
TO_NUMBER('2,00') "Value" FROM DUAL;
Copy

모범 사례

  • UDF를 생성하여 DEFAULTON 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;
Copy
생성된 코드:
 SELECT
--** SSC-FDM-OR0028 - 'NLS_SORT' SYS_CONTEXT PARAMETER NOT SUPPORTED IN SNOWFLAKE **
SYS_CONTEXT ('USERENV', 'NLS_SORT') FROM DUAL;
Copy

모범 사례

  • 이 함수는 사용자 정의 함수(stub)로 변환되므로, SYS_CONTEXT 매개 변수의 동작을 에뮬레이트하도록 수정할 수 있습니다.

  • 추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.

SSC-FDM-OR0029

이 ALTER SESSION 구성은 Snowflake에서 지원되지 않습니다.

설명

ALTER SESSION 문의 절 또는 구성은 현재 지원되지 않습니다.

코드 예시

입력 코드:
 ALTER SESSION SET SQL_TRACE TRUE;
Copy
생성된 코드:
 ----** SSC-FDM-OR0029 - THIS ALTER SESSION CONFIGURATION IS NOT SUPPORTED IN SNOWFLAKE **
--ALTER SESSION SET SQL_TRACE TRUE
                                ;
Copy

모범 사례

SSC-FDM-OR0030

ROWID 의사 열은 Snowflake에서 지원되지 않습니다

설명

쿼리에서 ROWID가 의사 열로 사용되는 경우 런타임 오류를 방지하기 위해 null로 변환되며 이 EWI가 추가됩니다. 이 기능을 에뮬레이트하는 변환은 아직 없습니다.

코드 예시

입력 코드 Oracle:
 SELECT ROWID FROM T1;
Copy
생성된 코드:
 SELECT
--** SSC-FDM-OR0030 - ROWID PSEUDOCOLUMN IS NOT SUPPORTED IN SNOWFLAKE, IT WAS CONVERTED TO NULL TO AVOID RUNTIME ERRORS **
'' AS ROWID
FROM
T1;
Copy

모범 사례

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;
Copy
생성된 코드:
 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
          ;
Copy

모범 사례

SSC-FDM-OR0032

문자열이 아닌 입력 매개 변수가 있는 StandardHash 함수는 Snowflake에서 다른 결과를 생성합니다.

설명

이 경고는 문자열이 아닌 입력 매개 변수가 있는 Oracle의 STANDARD_HASH 함수가 Snowflake에서 다른 결과를 생성하는 경우에 사용됩니다.

코드 예시

입력 코드:
쿼리
 SELECT STANDARD_HASH(1+1) FROM DUAL;
Copy
결과
 STANDARD_HASH(1+1)                               |
--------------------------------------------------+
 E39323970701D93598FC1D357F4BF04578CE3242         |

Copy
생성된 코드:
쿼리
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         |

모범 사례

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;
Copy
생성된 코드:
 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;
$$;
Copy

모범 사례

SSC-FDM-OR0034

START WITH ‘LIMIT VALUE’ 시퀀스는 Snowflake에서 지원되지 않습니다.

참고

이 FDM은 더 이상 사용되지 않습니다. SSC-EWI-OR0001 설명서를 참조하세요.

설명

이 오류는 START WITH 문 값이 LIMIT VALUE인 경우에 표시됩니다.

Oracle에서 이 절은 ALTER TABLE에만 사용됩니다

  • identity_options에만 적용되는 START WITH LIMIT VALUEALTER TABLE MODIFY하고만 사용할 수 있습니다. START WITH LIMITVALUE를 지정한 경우, Oracle 데이터베이스는 테이블을 잠그고 테이블에서 최대 ID 열 값(시퀀스가 증가하는 경우) 또는 최소 ID 열 값(시퀀스가 감소하는 경우)을 찾아 해당 값을 시퀀스 생성기의 상위 워터마크로 할당합니다. 시퀀스 생성기에서 반환되는 다음 값은 상위 워터마크 + INCREMENT BY integer(시퀀스가 증가하는 경우) 또는 상위 워터마크 - INCREMENT BY integer(시퀀스가 감소하는 경우)입니다.

ALTER TABLE ORACLE

코드 예시

입력 코드:
 CREATE SEQUENCE SEQUENCE1
  START WITH LIMIT VALUE;
Copy
생성된 코드:
 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"}}';
Copy

모범 사례

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;
Copy
생성된 코드:
 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;
$$;
Copy

모범 사례

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;
Copy
생성된 코드:
 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;
$$;
Copy

모범 사례

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);
Copy
생성된 코드:
 --** 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)
                                                                   ;
Copy

모범 사례

SSC-FDM-OR0038

부울 커서 특성은 지원되지 않습니다.

참고

이 FDM은 더 이상 사용되지 않습니다. SSC-EWI-OR0128 설명서를 참조하세요.

설명

이 메시지는 부울 커서 특성이 SnowScript에서 지원되지 않거나 SnowScript에서 해당 기능을 에뮬레이트하는 변환이 없음을 나타내기 위해 사용됩니다. 다음 테이블은 에뮬레이션할 수 있는 부울 커서 특성을 보여줍니다.

부울 커서 특성

상태

%FOUND

에뮬레이션 가능

%NOTFOUND

에뮬레이션 가능

%ISOPEN

지원되지 않음

코드 예시

입력 코드:
 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;
Copy
생성된 코드:
 --** 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;
$$;
Copy

모범 사례

SSC-FDM-OR0039

Create Type은 Snowflake에서 지원되지 않습니다

참고

이 FDM은 더 이상 사용되지 않습니다. SSC-EWI-OR0007 설명서를 참조하세요.

설명

이 메시지는 Snowflake에서 지원되지 않는 Create Type 문을 사용하는 경우에 추가됩니다.

코드 예시

입력 코드(Oracle):
 CREATE TYPE type6 UNDER type5(COL1 INTEGER);
Copy
생성된 코드:
 ----** SSC-FDM-OR0039 - CREATE TYPE SUBTYPE IS NOT SUPPORTED IN SNOWFLAKE **
--CREATE TYPE type6 UNDER type5(COL1 INTEGER)
                                           ;
Copy

모범 사례

SSC-FDM-OR0040

Snowflake에서는 숫자 문자를 변경할 수 없습니다. Snowflake의 소수점 구분 기호는 점 문자입니다.

설명

Snowflake에서는 숫자 문자를 변경할 수 없습니다. Snowflake의 소수점 구분 기호는 점 문자입니다. ALTER 세션 문이 주석 처리되고 경고가 추가됩니다.

코드 예시

Oracle:
 ALTER SESSION SET NLS_NUMERIC_CHARACTERS = ',.';
Copy
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 = ',.'
                                               ;
Copy

모범 사례

SSC-FDM-OR0041

기본 제공 패키지는 지원되지 않습니다.

참고

이 FDM은 더 이상 사용되지 않습니다. SSC-EWI-OR0076 설명서를 참조하세요.

설명

기본 제공 패키지에 대한 변환은 현재 지원되지 않습니다.

코드 예시

입력 코드(Oracle):
 SELECT
UTL_RAW.CAST_TO_RAW('some magic here'),
DBMS_UTILITY.GET_TIME
FROM DUAL;
Copy
생성된 코드:
 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;
Copy

모범 사례

SSC-FDM-OR0042

타임스탬프로 변환된 날짜 유형의 동작이 다릅니다

설명

Snowflake의 날짜 유형 동작은 Oracle과 다르기 때문에 날짜 유형은 플래그(–disableDateAsTimestamp)에 따라 날짜 또는 타임스탬프 유형으로 변환됩니다.

주요 차이점

Oracle DATE

Snowflake DATE

기능

날짜 및 시간 정보 저장

날짜 정보만 저장(연, 월, 일)

내부 저장소

epoch 이후 초를 나타내는 이진수

날짜에 최적화된 컴팩트 형식

사용 사례

범용 날짜 및 시간 저장소

날짜 정보만 필요한 시나리오

장점

날짜와 시간 모두 지원

보다 효율적인 날짜 저장소 제공

제한 사항

날짜 및 시간 구성 요소를 별도로 저장할 수 없습니다.

시간 정보를 저장하지 않습니다

코드 예시

입력 코드(Oracle):
 CREATE TABLE "PUBLIC"."TABLE1"
(
    "CREATED_DATE" DATE,
    "UPDATED_DATE" DATE
);
Copy
생성된 코드:
 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"}}'
    ;
Copy
 -- 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"}}'
    ;
Copy

모범 사례

SSC-FDM-OR0043

BFILE 및 BLOB 매개 변수는 바이너리로 간주됩니다. 형식이 필요할 수 있습니다.

설명

이 오류는 TO_CLOB가 TO_VARCHAR 함수로 변환되는 경우에 발생합니다. BFILE 및 BLOB 매개 변수에 대한 형식이 필요할 수 있습니다.

코드 예시

입력 코드:
 SELECT TO_CLOB('Lorem ipsum dolor sit amet') FROM DUAL;
Copy
생성된 코드:
 SELECT
--** SSC-FDM-OR0043 - BFILE/BLOB PARAMETERS ARE CONSIDERED BINARY, FORMAT MAY BE NEEDED. **
TO_VARCHAR('Lorem ipsum dolor sit amet')
FROM DUAL;
Copy

모범 사례

  • 입력 코드와 변환된 코드의 출력이 동일한지 확인하고 필요한 경우 형식 매개 변수를 추가합니다.

  • 추가 지원이 필요한 경우 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;
Copy
생성된 코드:
 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;
Copy
  • REGEXP_LIKE 조건에 사용자 정의 함수에서 지원되지 않는 문자 중 하나가 포함되는 경우, 가능한 해결 방법은 일치 매개 변수에서 누락된 문자의 동작을 시뮬레이션하기 위해 정규식을 변경하는 것입니다. 지원되지 않는 문자에 대해 자세히 알아보려면 REGEXP_LIKE_UDF 설명서를 참조하세요.

  • 추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.

SSC-FDM-OR0045

Partition 절은 Snowflake에서 처리됩니다

참고

이 FDM은 더 이상 사용되지 않습니다. SSC-EWI-OR0010 설명서를 참조하세요.

설명

이 경고는 PARTITIONSUBPARTITION 절이 쿼리 내에 나타나는 경우에 표시됩니다. Snowflake는 파티션을 자동으로 처리합니다.

코드 예시

입력 코드:
 SELECT * FROM TABLITA PARTITION(col1);
Copy
생성된 코드:
 SELECT * FROM
TABLITA
--        --** SSC-FDM-OR0045 - PARTITIONS CLAUSES ARE HANDLED BY SNOWFLAKE **
--        PARTITION(col1)
                       ;
Copy

모범 사례

SSC-FDM-OR0046

Snowflake에서는 하위 쿼리 제한을 사용할 수 없습니다

참고

출력 코드의 일부 부분은 명확성을 위해 생략되었습니다.

설명

이 경고는 SELECT 문에 하위 쿼리 제한이 나타나는 경우에 발생합니다.

코드 예시

입력 코드:
 SELECT * FROM LATERAL(SELECT * FROM TABLITA WITH READ ONLY CONSTRAINT T);
Copy
생성된 코드:
 SELECT * FROM LATERAL(SELECT * FROM
TABLITA
--        --** SSC-FDM-OR0046 - THE SUBQUERY RESTRICTION IS NOT POSSIBLE IN SNOWFLAKE **
--        WITH READ ONLY CONSTRAINT T
                                   );
Copy

모범 사례

SSC-FDM-OR0047

TimeStampOutput 형식을 설정해야 할 수도 있습니다.

설명

타임스탬프 출력의 동등성을 위해 TIMESTAMP_OUTPUT_FORMAT 세션 매개 변수를 ‘DD-MON-YY HH24.MI.SS.FF AM TZH:TZM’으로 설정해야 할 수도 있습니다.

코드 예시

입력 코드:
 SELECT SYSTIMESTAMP FROM DUAL;
Copy
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;
Copy
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;
Copy
생성된 코드:
 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;
Copy

모범 사례

  • 기본값의 데이터 타입이 LAG 함수에 있는 식의 데이터 타입과 일치하는지 확인합니다. 일치하지 않는 경우 기본값을 식의 데이터 타입으로 명시적으로 캐스팅합니다.

  • 추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.

SSC-FDM-OR0050

NOCOPY 매개 변수를 사용하는 예외는 데이터 불일치를 초래할 수 있습니다.

설명

Oracle PL/SQL에서 NOCOPY 키워드는 OUTIN 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;
Copy
생성된 코드:
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;
$$;
Copy

모범 사례