SnowConvert: Oracle 함수 차이점

SSC-FDM-OR0001

참고

이 기능 감지 메커니즘(FDM)은 더 이상 사용되지 않으며 이전 버전의 Oracle SnowConvert 용으로 설계되었습니다.

설명

이 오류는 평가 보고서 파일을 작성하는 데 문제가 있을 때 발생합니다. 시스템이 평가 세부 정보를 올바르게 저장하거나 생성할 수 없습니다.

모범 사례

SSC-FDM-OR0002

참고

이 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

모범 사례

  • 시퀀스를 재설정하고 사용 방법을 조정하는 것이 좋습니다. 참고: 대상 열에 이 값을 저장할 수 있는 충분한 용량이 있는지 확인합니다.

  • 추가 지원이 필요하면 snowconvert-support@Snowflake.com으로 문의해 주십시오.

SSC-FDM-OR0003

참고

이 FDM 은 더 이상 사용되지 않습니다. 자세한 내용은 SSC-EWI-OR0038에 대한 설명서를 참조하십시오.

설명

search_clause는 순서를 정의하여 SELECT 문에서 행을 처리하는 방법을 제어합니다. 이 기능을 사용하면 Oracle에서 데이터를 탐색하고 반환하는 방법을 사용자 지정할 수 있지만, Snowflake에서는 이 기능을 사용할 수 없습니다.

Oracle 및 유사 데이터베이스에서 search_clause는 재귀 쿼리 또는 공통 테이블 식(CTEs)에서 계층적 데이터 처리 방식을 제어하는 데 도움이 됩니다. [search_clause](https://docs.oracle.com/en/database/oracle/oracle-database/19/sqlrf/SELECT.html#GUID-CFA006CA-6FF1-4972-821E-6996142A51C6__I2077142에 열을 지정할 때 데이터의 처리 순서를 결정하는 깊이 우선(각 분기별로 깊이 있게 처리) 또는 폭 우선(수준별로 처리) 중 하나를 선택할 수 있습니다.

Snowflake에서는 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

설명

Oracle에서 ORDER BY SIBLINGS 절은 계층적 쿼리에서 형제 레코드(같은 수준의 레코드)를 정렬하면서 계층 구조를 유지하는 데 사용됩니다. 이 기능은 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는 동의어를 지원하지 않습니다. 모든 동의어는 원래 오브젝트 이름으로 변환됩니다.

코드 예시

입력 코드:
 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 열 제약 조건이 열의 인라인 정의에 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는 오브젝트 버전 관리를 지원하지 않습니다. 결과적으로 코드 변환 중에 EDITIONABLE 또는 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 섹션을 참조하십시오.

설명

‘모두’ 한정자는 Snowflake SQL 에서 지원되지 않습니다. 코드를 변환할 때 이 수정자가 제거되고 경고 메시지가 표시됩니다. 이 수정으로 인해 쿼리 결과가 예상과 다르게 생성될 수 있다는 점에 유의하십시오.

코드 예시

입력 코드:
 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 연산자는 결과 세트에서 중복된 값을 자동으로 제거합니다.

모범 사례

  • “all” 한정자 기능을 대체할 수 있는 Snowflake의 동등한 옵션을 살펴보십시오.

  • 추가 지원이 필요하면 snowconvert-support@Snowflake.com으로 문의해 주십시오.

SSC-FDM-OR0009

설명

참고

JavaScript 에서 프로시저 및 매크로를 생성하려면 -t JavaScript 또는 --PLTargetLanguage JavaScript 를 명령에 추가하십시오.

참고

명확성을 위해 출력 코드의 일부 섹션을 간소화했습니다.

이 경고는 SQL 암시적 커서 값을 사용할 때 표시됩니다. Oracle은 쿼리 유형에 따라 이러한 값을 다르게 처리합니다.

  • SELECT 문의 경우: 값은 반환되는 행 수를 나타냅니다

  • UPDATE, CREATE, DELETE 또는 INSERT 문의 경우: 이 값은 영향을 받는 행의 수를 나타냅니다

이러한 동작의 차이 때문에 경고가 표시되는 것입니다.

코드 예시

입력 코드:
-- 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;
Copy
생성된 코드:
 -- 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 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 데이터 타입은 수정된 숫자와 부동 소수점 숫자를 모두 저장하는 데 사용됩니다. Oracle 데이터베이스를 실행하는 모든 운영 체제에서 일관되게 작동합니다. 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보다 크면 NOT 이라는 메시지가 표시됩니다.

코드 예시

입력 코드:
 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
생성된 코드:
 --** SSC-FDM-0029 - 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":1, "minor":0},"attributes":{"component":"oracle"}}'
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

설명

Snowflake에서 COMMIT 및 ROLLBACK 문을 사용하기 전에 먼저 특정 설정 지침을 실행하여 올바르게 작동하는지 확인해야 합니다. 이러한 문이 예상대로 기능하려면 적절한 구성이 필요합니다.

 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

참고

이 FDM 는 더 이상 지원되지 않습니다. 자세한 내용은 SSC-EWI-OR0039 섹션을 참조하십시오.

설명

SnowConvert 가 CYCLE 절이 포함된 쿼리를 감지하면 이 메시지가 표시됩니다. Snowflake는 CYCLE 절을 지원하지 않으므로 SnowConvert 는 변환 중에 이 코드를 자동으로 설명합니다.

이 문은 재귀 작업이 발생하는 시점을 나타냅니다.

절 기능에 대한 자세한 내용은 설명서 를 참조하십시오.

코드 예시

연결 방법

입력 코드:
 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

모범 사례

  • 데이터 계층 구조에 주기가 포함된 경우 이 문서 에서 주기를 처리하는 방법에 대한 지침을 참조하십시오.

  • 추가 지원이 필요하면 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” 및 “MyDb”.”MyTable” 에서 “COL1” 열의 데이터 타입이 다르기 때문에 오류가 발생합니다.

모범 사례

  • 데이터 계층 구조에 주기가 포함된 경우 이 문서 에서 주기를 처리하는 방법에 대한 지침을 참조하십시오.

  • 추가 지원이 필요하면 snowconvert-support@Snowflake.com으로 문의해 주십시오.

SSC-FDM-OR0015

설명

이 문제는 열 또는 바이트 값을 계산하는 LENGTHB 열의 크기 또는 리터럴 값을 바이트 단위로 계산하는 함수를 사용할 때 발생합니다. 마이그레이션하는 동안 이 함수는 Snowflake의 OCTET_LENGTH 함수로 자동 변환됩니다.

이 함수를 열 매개 변수와 함께 사용하면 열 값의 크기를 계산합니다. 결과 크기는 열의 데이터 타입에 따라 달라지므로 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;
Copy
|CHAR_COLUMN1|OCTET_LENGTH(CHAR_COLUMN1)|LENGTH('HELLO WORLD')|
|------------|--------------------------|---------------------|
|Hello world |11                        |11                   |


Copy

모범 사례

  • 코드에 사용되는 데이터 타입을 검토하십시오.

  • Unicode 문자가 포함된 문자열의 경우 OCTET_LENGTH 가 더 큰 크기로 표시될 수 있으므로 열 인코딩을 확인합니다.

  • 추가 지원이 필요하면 snowconvert-support@Snowflake.com으로 문의해 주십시오.

SSC-FDM-OR0016

설명

COMMIT 및 ROLLBACK 문은 Snowflake가 이러한 작업을 자동으로 처리하므로 더 이상 필요하지 않습니다.

코드 예시

입력 코드
 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

설명

AT TIME ZONE 식은 더 이상 DBTIMEZONE 키워드를 지원하지 않습니다.

코드 예시

입력 코드:
 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

설명

이 경고는 Oracle의 병합 문과 Snowflake의 병합 문 구현 간에 기능적 차이가 있을 수 있음을 나타냅니다.

코드 예시

입력 코드:
 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 문이 있으면 적절하게 실행합니다

  • 추가 지원이 필요하면 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

모범 사례

  • 쿼리에 ORDER BY 절을 추가하여 Snowflake 결과에서 일관된 행 순서를 유지하십시오.

  • 추가 지원이 필요하면 snowconvert-support@Snowflake.com으로 문의해 주십시오.

SSC-FDM-OR0020

참고

이 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

설명

Snowflake Scripting의 FORLOOP 조건에는 INTEGER 값 또는 INTEGER 식이 필요합니다. 부동 소수점 숫자를 사용하는 경우 자동으로 반올림되므로 의도한 루프 경계가 변경될 수 있습니다.

하한은 가장 가까운 정수로 반올림됩니다. 예:

3.1 -> 3, 6.7 -> 7, 4.5 -> 5

상한은 가장 가까운 정수로 반올림됩니다. 예:

3.1 -> 3, 6.7 -> 6, 4.5 -> 4

 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":1, "minor":0},{"attributes":{"component":"oracle"}}'
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 **
        FOR i IN 1.2 TO 5.7 LOOP
            NULL;
        END LOOP;
    END;
$$;
Copy

모범 사례

  • FOR LOOP 조건을 다른 데이터 타입 대신 정수 값을 사용하도록 변경합니다.

  • 추가 지원이 필요하면 snowconvert-support@Snowflake.com으로 문의해 주십시오.

SSC-FDM-OR0022

참고

이 FDM 는 더 이상 지원되지 않습니다. 자세한 내용은 SSC-EWI-OR0100 섹션을 참조하십시오.

설명

여러 조건을 허용하는 Oracle과 달리 Snowflake Scripting의 FOR LOOP 는 1개의 조건만 지원합니다. Oracle에서 마이그레이션할 때는 첫 번째 조건만 변환되고 추가 조건은 무시됩니다.

코드 예시

입력 코드:
 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

참고

이 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;
$$;
Copy

모범 사례

  • 예외 코드가 Snowflake Scripting의 허용 범위 내에 있는지 확인합니다. 그렇지 않은 경우 사용할 수 있는 다른 예외 번호를 사용하십시오.

  • 추가 지원이 필요하면 snowconvert-support@Snowflake.com으로 문의해 주십시오.

SSC-FDM-OR0024

참고

이 FDM 는 더 이상 지원되지 않습니다. 자세한 내용은 SSC-EWI-OR0002 섹션을 참조하십시오.

설명

이 오류는 시스템이 선택 식의 열을 확인할 수 없을 때 발생합니다. 이는 일반적으로 두 가지 시나리오에서 발생합니다.

  1. 해결되지 않은 타입 액세스를 참조하는 경우

  2. 열 정의가 없는 사용자 정의 유형(예: 본문이 없는 유형 또는 정의된 열이 없는 오브젝트 유형)이 있는 열을 사용하는 경우

코드 예시

입력 코드:
 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

설명

프로시저 내의 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

참고

이 FDM 는 더 이상 지원되지 않습니다. 자세한 내용은 SSC-EWI-OR0045 섹션을 참조하십시오.

설명

이 오류는 지원되지 않는 데이터 타입으로 데이터를 변환하려고 할 때 발생합니다.

입력 코드:
 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: 이 컨텍스트에서는’형식’매개 변수를 사용할 수 없습니다.

권장 사항

  • 형 변환 작업은 사용자 정의 함수(UDF/Stub)로 변환되어 형 변환 함수의 작동 방식을 사용자 정의할 수 있습니다.

  • 추가 지원이 필요하면 snowconvert-support@Snowflake.com으로 문의해 주십시오.

SSC-FDM-OR0027

참고

이 FDM 은 더 이상 사용되지 않습니다. 자세한 내용은 SSC-EWI-OR0029에 대한 설명서를 참조하십시오.

설명

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

권장 사항

  • ON CONVERSION ERROR 를 처리할 때 DEFAULT 값의 기능을 복제하는 사용자 정의 함수(UDF)를 만드는 것이 좋습니다.

  • 추가 지원이 필요하면 snowconvert-support@Snowflake.com으로 문의해 주십시오.

SSC-FDM-OR0028

참고

이 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

권장 사항

  • 이 함수는 사용자 정의 함수(UDF) stub으로 변환되며, SYS_CONTEXT 매개 변수의 동작을 복제하도록 수정할 수 있습니다.

  • 추가 지원이 필요하면 snowconvert-support@Snowflake.com으로 문의해 주십시오.

SSC-FDM-OR0029

설명

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 가 의사 열로 포함되면 런타임 오류를 방지하기 위해 NULL 로 변환되고 오류, 경고 및 정보(EWI) 메시지가 생성됩니다. 현재 ROWID 기능을 복제할 수 있는 기능은 없습니다.

코드 예시

입력 코드 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

설명

이 오류는 Snowflake의 DML 문이 Oracle의 DML 문에서 사용할 수 있는 기능인 error_logging 절을 지원하지 않음을 나타냅니다.

코드 예시

입력 코드:
 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

설명

이 경고는 문자열이 아닌 매개 변수와 함께 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;
Copy
 SHA1(1+1)                                        |
--------------------------------------------------+
 da4b9237bacccdf19c0760cab7aec4a8359010b0         |
Copy

권장 사항

SSC-FDM-OR0033

설명

이 경고는 SnowConvert 에서 Oracle DBMS_RANDOM.VALUE 기본 제공 패키지 함수를 마이그레이션할 때 표시됩니다. 이 기능을 복제하기 위해 만든 사용자 정의 함수(UDF)은 원래 Oracle 기능에 비해 전체 자릿수가 적습니다.

코드 예시

입력 코드:

 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

참고

이 FDM 는 더 이상 지원되지 않습니다. 자세한 내용은 SSC-EWI-OR0001 설명서를 참조하십시오.

설명

이 오류는 START WITH 문의 값이 LIMIT VALUE 로 설정된 경우 발생합니다.

Oracle에서 이 절은 ALTER TABLE 문과 함께만 사용됩니다.

  • START WITH LIMIT VALUE 옵션은 identity_options 에만 사용할 수 있으며 ALTER TABLE MODIFY 옵션과 함께 사용해야 합니다. START WITH LIMIT VALUE 을 사용하면 Oracle 데이터베이스는:

  1. 테이블 잠그기

  2. ID 열에서 최대값(증가하는 시퀀스의 경우) 또는 최소값(감소하는 시퀀스의 경우)을 찾습니다

  3. 이 값을 시퀀스 생성기의 하이 워터 마크로 설정합니다

  4. INCREMENT BY 값을 하이 워터 마크에 더하거나(증가하는 시퀀스의 경우) 빼서(감소하는 시퀀스의 경우) 다음 값을 생성합니다

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

권장 사항

  • 사용자 측에서는 별도의 작업이 필요하지 않습니다.

  • 추가 지원이 필요하면 당사에 snowconvert-support@Snowflake.com으로 문의해 주십시오.

SSC-FDM-OR0035

설명

이 경고는 SnowConvert 에서 Oracle DBMS_OUTPUT.PUT_LINE 기본 제공 패키지 함수를 마이그레이션할 때 표시됩니다. 생성된 사용자 정의 함수(UDF)를 검토하여 예상대로 작동하는지 확인해야 합니다.

이 경고 메시지는 추가 정보를 위해 DBMS_OUTPUT.PUT_LINE_UDF 구현을 검토해야 함을 나타냅니다.

경고

이 UDF 는 성능에 영향을 미칠 수 있습니다. 로깅을 활성화하려면 구현 코드의 주석을 해제합니다. 현재 설정은 임시 테이블을 사용합니다. 데이터를 여러 세션에 걸쳐 유지해야 하는 경우 CREATE TABLE 문에서 TEMPORARY 키워드를 제거하십시오.

DBMS_OUTPUT.PUT_LINE_UDF 함수를 실행한 후 이 쿼리를 실행하여 모든 로그를 볼 수 있습니다.

SELECT * FROM DBMS_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 에서 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

참고

이 FDM 는 더 이상 지원되지 않습니다. 자세한 내용은 SSC-EWI-OR0004 섹션을 참조하십시오.

참고

가독성을 높이기 위해 이 예제에서는 코드의 일부 섹션을 간소화했습니다.

설명

이 경고는 SELECT 문에 Snowflake가 지원하지 않는 절이 포함된 경우에 표시됩니다. 다음 절은 지원되지 않습니다.

  • 컨테이너 데이터베이스 및 플러그형 데이터베이스

  • 하위 쿼리 사용에 대한 제한 사항

  • 계층적 데이터 구조 및 쿼리

  • 외부 테이블 수정

  • 데이터베이스 링크 및 교차 데이터베이스 연결

  • 데이터베이스 샤딩 구성

  • 테이블 파티션 지정

  • 테이블 하위 파티셔닝

  • 계층적 쿼리 작업

코드 예시

입력 코드:
 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

참고

이 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에서 소수점은 항상 소수점 구분 기호로 점(.)을 사용하여 표현합니다. 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에서 날짜 또는 타임스탬프로 변환됩니다. 이 변환은 –disableDateAsTimestamp 플래그에 따라 달라지는데, 그 이유는 Snowflake의 날짜 유형이 Oracle의 날짜 유형과 다르게 작동하기 때문입니다.

주요 차이점

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

설명

이 오류는 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

참고

명확성을 위해 일부 부분을 생략하여 코드를 간소화했습니다.

설명

이 경고는 일치 매개 변수(세 번째 매개 변수)와 함께 Oracle의 REGEXP_LIKE 함수를 사용할 때 표시됩니다. 이 경고는 Oracle의 REGEXP_LIKE 를 대체하는 Snowflake의 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-OR0047

설명

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 UTC

출력 코드:
 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가 TIMESTAMPS 를 표시하는 방식

2021-01-13 08:18:19.720 -080

Recommendations

  • Snowflake에서 타임스탬프가 표시되는 방식을 수정하려면 이 쿼리를 실행합니다.

    ALTER SESSION SET TIMESTAMP_OUTPUT_FORMAT = 'DD-MON-YY HH24.MI.SS.FF AM TZH:TZM';
Copy

SSC-FDM-OR0045

참고

이 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

참고

가독성을 높이기 위해 이 예제에서는 코드의 일부 섹션을 간소화했습니다.

설명

이 경고는 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

권장 사항