SnowConvert AI - Oracle 문제

SSC-EWI-OR0001

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

설명

이 오류는 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
  !!!RESOLVE EWI!!! /*** SSC-EWI-OR0001 - 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-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 !!!RESOLVE EWI!!! /*** SSC-EWI-OR0002 - COLUMNS FROM EXPRESSION unknownTable%ROWTYPE NOT FOUND ***/!!!;
    END;
$$;
Copy

모범 사례

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

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

SSC-EWI-OR0004

SELECT에 사용된 구문이 Snowflake에서 지원되지 않습니다.

참고

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

심각도

높음

설명

이 경고는 SELECT의 절이 Snowflake에서 지원되지 않는 경우에 발생합니다. 지원되지 않는 절은 다음과 같습니다.

  • CONTAINERS

  • HIERARCHIES

  • EXTERNAL MODIFY

  • SHARDS

코드 예시

입력 코드:
 SELECT * FROM TABLE1 EXTERNAL MODIFY (LOCATION 'file.csv' REJECT LIMIT UNLIMITED);
Copy
생성된 코드:
 SELECT * FROM
TABLE1
       !!!RESOLVE EWI!!! /*** SSC-EWI-OR0004 - THE 'OPTIONAL MODIFIED EXTERNAL' SYNTAX IN SELECT IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
       EXTERNAL MODIFY (LOCATION 'file.csv' REJECT LIMIT UNLIMITED);
Copy

모범 사례

SSC-EWI-OR0005

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

참고

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

심각도

낮음

설명

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

코드 예시

입력 코드:
 SELECT TO_CLOB('Lorem ipsum dolor sit amet') FROM DUAL;
Copy
생성된 코드:
 SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0005 - 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-EWI-OR0006

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

참고

이 EWI는 더 이상 사용되지 않습니다. 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 +00:00

생성된 코드:
 SELECT
CURRENT_TIMESTAMP() !!!RESOLVE EWI!!! /*** SSC-EWI-OR0006 - 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-EWI-OR0007

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

설명

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

코드 예시

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

모범 사례

SSC-EWI-OR0008

알 수 없는 형식이며, 예기치 않은 동작이 발생할 수 있습니다.

심각도

낮음

설명

이 오류는 예기치 않은 동작이 발생할 수 있는 알 수 없는 날짜 형식이 있는 경우에 추가됩니다.

코드 예시

입력 코드:
 SELECT TO_CHAR(DATE '1998-12-25','iw-iyyy') FROM DUAL;
Copy
생성된 코드:
 SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0008 - UNKNOWN FORMAT, MAY HAVE UNEXPECTED BEHAVIOR ***/!!!
 TO_CHAR(DATE '1998-12-25','iw-iyyy'') FROM DUAL;
Copy

참고

‘iw-iyyy’’는 지원되는 형식이 아닙니다.

모범 사례

SSC-EWI-OR0009

JSON_TABLE 가 지원되지 않습니다.

심각도

높음

설명

JSON_TABLE 함수는 현재 지원되지 않습니다.

코드 예시

입력 코드:
 SELECT jt.phones
FROM j_purchaseorder,
JSON_TABLE(po_document, '$.ShippingInstructions'
COLUMNS
(phones VARCHAR2(100) FORMAT JSON PATH '$.Phone')) AS jt;
Copy
생성된 코드:
 SELECT jt.phones
FROM
j_purchaseorder,
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0009 - JSON_TABLE IS NOT SUPPORTED ***/!!!
JSON_TABLE(po_document, '$.ShippingInstructions'
COLUMNS
(phones VARCHAR(100) FORMAT JSON PATH '$.Phone')) AS jt;
Copy

모범 사례

  • Snowflake의 FLATTEN 함수를 사용하여 JSON_TABLE의 기능을 에뮬레이트할 수 있습니다.

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

SSC-EWI-OR0010

Partition 절은 Snowflake에서 처리됩니다. 수동 수정이 필요합니다

참고

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

심각도

중요

설명

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

코드 예시

입력 코드:
 SELECT * FROM table1 PARTITION(col1);
Copy
생성된 코드:
 SELECT * FROM
table1
        !!!RESOLVE EWI!!! /*** SSC-EWI-OR0010 - PARTITIONS CLAUSES ARE HANDLED BY SNOWFLAKE. IT REQUIRES MANUAL FIX ***/!!!
        PARTITION(col1);
Copy

모범 사례

  • Snowflake에서 동등한 기능을 사용하려면 수동으로 변경해야 합니다. 특정 파티션의 행을 필터링하려면 WHERE 조건이 필요합니다. 그러나 이 해결 방법을 사용하면 성능이 영향을 받습니다.

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

SSC-EWI-OR0011

형식 매개 변수는 지원되지 않습니다.

심각도

Medium

설명

현재 Snowflake에서는 특정한 경우에 CAST 함수의 형식 매개 변수를 지원하지 않습니다. 예를 들어, DATE 또는 TIMESTAMP 형식 내에서 “MONTH” 또는 “DAY”를 사용하는 경우입니다.

"MONTH/DD/YYYY" or "MM/DAY/YY" ...

Copy

다른 경우는 CAST 함수를 NUMBER와 함께 사용할 때입니다. 현재 SnowFlake에는 소수점을 표시하기 위해 4개의 인자가 필요합니다. 현재 출력 코드는 SnowFlake에 필요한 모든 인자를 제공하지 않으므로, TO_NUMBER 함수에 나머지 인자를 추가해야 합니다.

코드 예시

입력 코드:
 SELECT CAST('12.48' AS NUMBER, '99.99') FROM DUAL;
Copy
생성된 코드:
 SELECT
TO_NUMBER('12.48', '99.99', 38, 2)
FROM DUAL;
Copy
입력 코드:
 SELECT CAST('FEBRUARY/18/24' as DATE, 'MONTH/DD/YY') FROM DUAL; 
SELECT CAST('FEB/MON/24' as DATE, 'MON/DAY/YY') FROM DUAL;
Copy
생성된 코드:
 SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0011 - THE FORMAT PARAMETER 'MONTH/DD/YY' IS NOT SUPPORTED ***/!!!
TO_TIMESTAMP ('FEBRUARY/18/24' , 'MONTH/DD/YY')
FROM DUAL;

SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0011 - THE FORMAT PARAMETER 'MON/DAY/YY' IS NOT SUPPORTED ***/!!!
TO_TIMESTAMP ('FEB/MON/24' , 'MON/DAY/YY')
FROM DUAL;
Copy

모범 사례

SSC-EWI-OR0013

NLS 매개 변수는 지원되지 않습니다.

심각도

Medium

설명

NLS 매개 변수는 현재 다음 함수에 대해 지원되지 않습니다.

  • TOCHAR

  • TODATE

  • TONUMBER

  • TOTIMESTAMP

  • CAST

코드 예시

입력 코드:
 SELECT TO_NUMBER('-AusDollars100','9G999D99', ' NLS_NUMERIC_CHARACTERS = '',.''NLS_CURRENCY= ''AusDollars''') "Amount" FROM DUAL;
Copy
생성된 코드:
 SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0013 - NLS PARAMETER ' NLS_NUMERIC_CHARACTERS = '',.''NLS_CURRENCY= ''AusDollars''' NOT SUPPORTED ***/!!!
TO_NUMBER('-AusDollars100', '9G999D99') "Amount" FROM DUAL;
Copy

SSC-EWI-OR0014

NLSSORT는 지원되지 않습니다.

참고

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

심각도

Medium

설명

NLSSORT 함수는 현재 SELECT 본문에서 지원되지 않습니다.

코드 예시

입력 코드:
 SELECT NLSSORT(name, 'NLS_SORT = ENGLISH') FROM products;
Copy
생성된 코드:
 // SnowConvert AI Helpers Code section is omitted.
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0014 - FUNCTION NLSSORT IS NOT SUPPORTED ***/!!!
 NLSSORT(name, 'NLS_SORT = ENGLISH') FROM
 products;
Copy

모범 사례

  • NLSSORT 함수는 사용자 정의 함수(UDF 및 stub)로 변환되므로, 이 기능을 에뮬레이트하도록 수정할 수 있습니다.

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

SSC-EWI-OR0016

XML 가 지원되지 않습니다.

심각도

Medium

설명

다음 XML 관련 함수는 지원되지 않습니다.

  • EXTRACT

  • EXTRACTVALUE

  • XMLSEQUENCE

  • XMLTYPE

코드 예시

입력 코드:
 select * from table(XMLSequence(XMLType('
<Product ProductCode="200">
 <BrandName>Notebook</BrandName>
 <ProductList>
  <Item ItemNo="200A"><Price>900</Price></Item>
  <Item ItemNo="200B"><Price>700</Price></Item>
  <Item ItemNo="200C"><Price>650</Price></Item>
  <Item ItemNo="200D"><<Price>750</Price></Item>
</ProductList>
</Product>')));
Copy
생성된 코드:
 select * from table(
                    !!!RESOLVE EWI!!! /*** SSC-EWI-OR0016 - FUNCTION RELATED WITH XML NOT SUPPORTED ***/!!!
XMLSequence(
            !!!RESOLVE EWI!!! /*** SSC-EWI-OR0016 - FUNCTION RELATED WITH XML NOT SUPPORTED ***/!!!XMLType('
<Product ProductCode="200">
 <BrandName>Notebook</BrandName>
 <ProductList>
  <Item ItemNo="200A"><Price>900</Price></Item>
  <Item ItemNo="200B"><Price>700</Price></Item>
  <Item ItemNo="200C"><Price>650</Price></Item>
  <Item ItemNo="200D"><<Price>750</Price></Item>
</ProductList>
</Product>')));
Copy

모범 사례

SSC-EWI-OR0020

함수에는 음수 값이 지원되지 않습니다.

심각도

Medium

설명

Snowflake는 함수에 대해 음수 값을 지원하지 않으므로 실행 시 다른 동작이 발생합니다.

코드 예시

입력 코드:
 SELECT INSTR('CORPORATE FLOOR','OR', -3, 2) FROM DUAL;
Copy
생성된 코드:
 SELECT
REGEXP_INSTR('CORPORATE FLOOR','OR', -3, 2) !!!RESOLVE EWI!!! /*** SSC-EWI-OR0020 - NEGATIVE VALUES NOT SUPPORTED FOR FUNCTION ***/!!! FROM DUAL;
Copy

모범 사례

  • 음수 매개 변수를 처리하거나 다른 대안을 찾을 수 있는 사용자 정의 함수를 만듭니다.

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

SSC-EWI-OR0023

AGGREGATE 함수는 지원되지 않습니다.

심각도

높음

참고

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

설명

이 오류는 집계 함수가 다음인 경우 추가됩니다.

  • DENSE_RANK()

  • RANK()

  • PERCENT_RANK()

  • CUME_DIST()

는 Snowflake에서 지원되지 않습니다.

코드 예시

입력 코드:
 SELECT DENSE_RANK(12000) WITHIN GROUP (ORDER BY salary DESC NULLS FIRST) FROM employees;

SELECT RANK(12000) WITHIN GROUP (ORDER BY salary DESC NULLS FIRST) FROM employees;

SELECT PERCENT_RANK(12000) WITHIN GROUP (ORDER BY salary DESC NULLS FIRST) FROM employees;

SELECT CUME_DIST(12000) WITHIN GROUP (ORDER BY salary DESC NULLS FIRST) FROM employees;
Copy
생성된 코드:
 SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0023 - DENSE_RANK AGGREGATE FUNCTION SYNTAX IS NOT SUPPORTED BY SNOWFLAKE. ***/!!!
 DENSE_RANK(12000) WITHIN GROUP (ORDER BY salary DESC NULLS FIRST) FROM
 employees;


SELECT
 !!!RESOLVE EWI!!! /*** SSC-EWI-OR0023 - RANK AGGREGATE FUNCTION SYNTAX IS NOT SUPPORTED BY SNOWFLAKE. ***/!!! RANK(12000) WITHIN GROUP (ORDER BY salary DESC NULLS FIRST) FROM
 employees;


SELECT
 !!!RESOLVE EWI!!! /*** SSC-EWI-OR0023 - PERCENT_RANK AGGREGATE FUNCTION SYNTAX IS NOT SUPPORTED BY SNOWFLAKE. ***/!!! PERCENT_RANK(12000) WITHIN GROUP (ORDER BY salary DESC NULLS FIRST) FROM
 employees;


SELECT
 !!!RESOLVE EWI!!! /*** SSC-EWI-OR0023 - CUME_DIST AGGREGATE FUNCTION SYNTAX IS NOT SUPPORTED BY SNOWFLAKE. ***/!!! CUME_DIST(12000) WITHIN GROUP (ORDER BY salary DESC NULLS FIRST) FROM
 employees;
Copy

모범 사례

SSC-EWI-OR0026

ROWID 가 지원되지 않습니다.

참고

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

심각도

Medium

설명

ROWID 문은 현재 지원되지 않습니다.

코드 예시

Oracle:
 SELECT QUERY_NAME.ROWID from TABLE1;
Copy
Snowflake Scripting:
 SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0026 - ROWID NOT SUPPORTED ***/!!!
 QUERY_NAME.ROWID from
 TABLE1;
Copy

모범 사례

SSC-EWI-OR0029

DEFAULT ON CONVERSION ERROR는 지원되지 않습니다.

설명

Default On Conversion Error는 Snowflake에서 지원되지 않습니다

코드 예시

입력 코드:
 SELECT TO_NUMBER('2,00' DEFAULT 0 ON CONVERSION ERROR) "Value" FROM DUAL;
Copy
생성된 코드:
 SELECT
PUBLIC.TO_NUMBER_UDF('2,00', 0) "Value" FROM DUAL;
Copy

모범 사례

  • UDF를 생성하여 DEFAULTON CONVERSION ERROR의 동작을 에뮬레이트할 수 있습니다.

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

SSC-EWI-OR0030

집계 함수에 사용된 KEEP 문은 지원되지 않습니다.

심각도

Medium

설명

이 오류는 집계 함수의 첫 번째 또는 마지막 값만 반환됨을 나타내는 데 사용되는 KEEP 문이 지원되지 않음을 알리기 위해 표시됩니다.

코드 예시

입력 코드:
 SELECT
    department_id,
    MIN(salary) KEEP (
        DENSE_RANK FIRST
        ORDER BY
            commission_pct
    ) "Worst"
FROM
    employees;
Copy
생성된 코드:
 SELECT
    department_id,
    MIN(salary)
        !!!RESOLVE EWI!!! /*** SSC-EWI-OR0030 - KEEP STATEMENT USED IN THE AGGREGATE FUNCTION IS NOT SUPPORTED ***/!!!
 KEEP (
        DENSE_RANK FIRST
        ORDER BY
            commission_pct
    ) "Worst"
FROM
 employees;
Copy

모범 사례

SSC-EWI-OR0031

SYS_CONTEXT 매개 변수는 지원되지 않습니다.

심각도

낮음

설명

이 오류는 SYS_CONTEXT 함수 매개 변수가 지원되지 않는 경우에 발생합니다. Snowflake는 유사한 컨텍스트 함수를 지원합니다. 자세한 내용은 페이지를 참조하세요.

코드 예시

입력 코드:
 SELECT SYS_CONTEXT ('USERENV', 'NLS_SORT') FROM DUAL;
Copy
생성된 코드:
 SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0031 - '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-EWI-OR0032

지정된 형식의 매개 변수는 지원되지 않습니다.

심각도

Medium

설명

이 오류는 함수의 매개 변수가 지원되지 않는 경우에 발생합니다.

코드 예시

입력 코드:
 SELECT TO_CHAR(DATE '1998-12-25', 'AM') FROM DUAL;
Copy
생성된 코드:
 SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0032 - PARAMETER USED IN THE FUNCTION 'TO_CHAR' WITH FORMAT AM IS NOT SUPPORTED ***/!!!
 TO_CHAR(DATE '1998-12-25', 'AM') FROM DUAL;
Copy

모범 사례

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

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

SSC-EWI-OR0033

WITH의 PL/SQL 선언은 지원되지 않습니다.

심각도

Medium

설명

WITH 문의 PL/SQL 선언은 지원되지 않습니다.

코드 예시

입력 코드:
 WITH FUNCTION get_domain ( url VARCHAR2 ) RETURN VARCHAR2 IS pos BINARY_INTEGER;
len BINARY_INTEGER;
BEGIN
pos := INSTR(url, 'www.');
len := INSTR(SUBSTR(url, pos + 4), '.') - 1;
END; SELECT aValue from aTable;
Copy
생성된 코드:
 // SnowConvert AI Helpers Code section is omitted.
WITH
     !!!RESOLVE EWI!!! /*** SSC-EWI-OR0033 - PLDECLARATION IN WITH NOT SUPPORTED ***/!!!
 FUNCTION get_domain ( url VARCHAR2 ) RETURN VARCHAR2 IS pos BINARY_INTEGER;
len BINARY_INTEGER;
BEGIN
pos := INSTR(url, 'www.');
len := INSTR(SUBSTR(url, pos + 4), '.') - 1;
END; SELECT aValue from
aTable;
Copy

모범 사례

SSC-EWI-OR0035

TABLE 함수가 식의 컬렉션으로 사용되는 경우는 지원되지 않습니다.

참고

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

심각도

Medium

설명

TABLE 함수가 식의 컬렉션으로 사용될 때는 Snowflake에서 지원되지 않습니다.

코드 예시

입력 코드:
 SELECT 
TABLE2.COLUMN_VALUES
FROM TABLE1 i, TABLE(i.groups) TABLE2;
Copy
생성된 코드:
 // SnowConvert AI Helpers Code section is omitted.
SELECT
TABLE2.COLUMN_VALUES
FROM
TABLE1 i,
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0035 - TABLE FUNCTION IS NOT SUPPORTED WHEN IT IS USED AS A COLLECTION OF EXPRESSIONS ***/!!! TABLE(i.groups) TABLE2;
Copy

모범 사례

SSC-EWI-OR0036

유형 확인 문제로 인해 문자열과 날짜 사이에서 산술 연산이 올바르게 동작하지 않을 수 있습니다.

심각도

낮음

설명

이 문제는 산술 연산이 두 특정 데이터 타입 사이에서 올바르게 동작하지 않는 경우에 발생합니다.

코드 예시

입력 코드:
 SELECT
    SYSDATE,
    SYSDATE + '1',
    SYSDATE + 'A'
from
    dual;
Copy
생성된 코드:
 SELECT
    CURRENT_TIMESTAMP(),
    !!!RESOLVE EWI!!! /*** SSC-EWI-OR0036 - TYPES RESOLUTION ISSUES, ARITHMETIC OPERATION '+' MAY NOT BEHAVE CORRECTLY BETWEEN Date AND String ***/!!!
    CURRENT_TIMESTAMP() + '1',
    !!!RESOLVE EWI!!! /*** SSC-EWI-OR0036 - TYPES RESOLUTION ISSUES, ARITHMETIC OPERATION '+' MAY NOT BEHAVE CORRECTLY BETWEEN Date AND String ***/!!!
    CURRENT_TIMESTAMP() + 'A'
from
    dual;
Copy

참고

문자열과 날짜 간의 작업이 올바르게 동작하지 않을 수 있습니다.

모범 사례

SSC-EWI-OR0038

WITH 요소 문에서 Search 절이 제거되었습니다.

심각도

낮음

설명

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
) !!!RESOLVE EWI!!! /*** SSC-EWI-OR0038 - SEARCH CLAUSE REMOVED FROM THE WITH ELEMENT STATEMENT ***/!!!
SELECT aValue from
atable;
Copy

권장 사항

SSC-EWI-OR0039

NOCYCLE 절은 Snowflake에서 지원되지 않습니다.

참고

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

심각도

낮음

설명

이 메시지는 SnowConvert AI가 Snowflake에서 지원되지 않는 NOCYCLE 절이 있는 쿼리를 발견하는 경우에 표시됩니다.

이 절은 재귀가 있는 경우를 표시합니다.

이 절의 기능에 대한 자세한 내용은 [설명서]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
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0039 - NOCYCLE CLAUSE IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
CONNECT BY
      A.C = 0 START WITH A.B = 1;
Copy

모범 사례

SSC-EWI-OR0042

MODEL 절은 지원되지 않습니다.

참고

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

심각도

낮음

설명

이 메시지는 SnowConvert AI가 Snowflake에서 지원되지 않는 MODEL 절이 있는 쿼리를 발견하는 경우에 표시됩니다.

코드 예시

입력 코드:
 SELECT
   employee_id,
   salary
FROM
   employees
MODEL
DIMENSION BY (employee_id)
MEASURES (salary)
();
Copy
생성된 코드:
 SELECT
   employee_id,
   salary
FROM
   employees
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0042 - MODEL CLAUSE IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
MODEL
DIMENSION BY (employee_id)
MEASURES (salary)
();
Copy

모범 사례

SSC-EWI-OR0045

캐스트 유형 L 및 FML은 지원되지 않습니다

심각도

Medium

설명

이 문제는 FML을 사용하여 캐스트하려고 하거나 Snowflake에 L 형식이 적용되지 않는 경우에 발생하며, 코드는 주석 처리되고 이 메시지가 추가됩니다.

코드 예시:

입력 코드:
 SELECT CAST(' $123.45' as number, 'L999.99') FROM DUAL;
SELECT CAST('$123.45' as number, 'FML999.99') FROM DUAL;
Copy
생성된 코드:
 SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0045 - CAST TYPE L AND FML NOT SUPPORTED ***/!!!
 CAST(' $123.45' as NUMBER(38, 18) , 'L999.99') FROM DUAL;

SELECT
 !!!RESOLVE EWI!!! /*** SSC-EWI-OR0045 - CAST TYPE L AND FML NOT SUPPORTED ***/!!! CAST('$123.45' as NUMBER(38, 18) , 'FML999.99') FROM DUAL;
Copy

모범 사례

SSC-EWI-OR0046

Alter Table 구문은 Snowflake에서 적용할 수 없습니다.

참고

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

심각도

Medium

설명

사용된 Alter Table 구문은 Snowflake에 적용할 수 없으며, 코드는 주석 처리되고 이 메시지가 추가됩니다.

코드 예시:

입력 코드:
 ALTER TABLE SOMENAME DEFAULT COLLATION SOMENAME;

ALTER TABLE SOMENAME ROW ARCHIVAL;

ALTER TABLE SOMENAME MODIFY CLUSTERING;

ALTER TABLE SOMENAME DROP CLUSTERING;

ALTER TABLE SOMENAME SHRINK SPACE COMPACT CASCADE;
Copy
생성된 코드:
 !!!RESOLVE EWI!!! /*** SSC-EWI-0109 - ALTER TABLE SYNTAX NOT APPLICABLE IN SNOWFLAKE ***/!!!
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "SOMENAME" **
ALTER TABLE SOMENAME
DEFAULT COLLATION SOMENAME;

!!!RESOLVE EWI!!! /*** SSC-EWI-0109 - ALTER TABLE SYNTAX NOT APPLICABLE IN SNOWFLAKE ***/!!!
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "SOMENAME" **

ALTER TABLE SOMENAME
ROW ARCHIVAL;

!!!RESOLVE EWI!!! /*** SSC-EWI-0109 - ALTER TABLE SYNTAX NOT APPLICABLE IN SNOWFLAKE ***/!!!
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "SOMENAME" **

ALTER TABLE SOMENAME
MODIFY CLUSTERING;

!!!RESOLVE EWI!!! /*** SSC-EWI-0109 - ALTER TABLE SYNTAX NOT APPLICABLE IN SNOWFLAKE ***/!!!
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "SOMENAME" **

ALTER TABLE SOMENAME
DROP CLUSTERING;

!!!RESOLVE EWI!!! /*** SSC-EWI-0109 - ALTER TABLE SYNTAX NOT APPLICABLE IN SNOWFLAKE ***/!!!
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "SOMENAME" **

ALTER TABLE SOMENAME
SHRINK SPACE COMPACT CASCADE;
Copy

모범 사례

SSC-EWI-OR0047

TO_NCHAR가 TO_VARCHAR로 변환되었으며, Snowflake에서 컴파일하지 못할 수 있습니다.

심각도

낮음

참고

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

설명

이 경고는 TO_NCHAR 함수가 발견되었고 TO_VARCHAR 함수로 변환된 경우에 추가됩니다.

이 변환으로 인해 컴파일 오류가 발생하거나 출력이 동일하지 않은 경우가 여러 차례 발생합니다.

코드 예시

입력 코드:
 select TO_NCHAR(sysdate,'DY','nls_date_language=english') from dual
Copy
생성된 코드:
 select
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0047 - TO_NCHAR TRANSFORMED TO TO_VARCHAR, IT MAY NOT BE COMPILABLE IN SNOWFLAKE ***/!!!
TO_VARCHAR(CURRENT_TIMESTAMP(),'DY','nls_date_language=english') from dual;
Copy

위의 예를 Snowflake에서 사용하면 오류가 발생합니다.

모든 경우에 오류가 발생하는 것은 아닙니다.

입력 코드:
 SELECT TO_NCHAR(SYSDATE, 'YYYY-MM-DD') FROM dual;
Copy
생성된 코드:
 SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0047 - TO_NCHAR TRANSFORMED TO TO_VARCHAR, IT MAY NOT BE COMPILABLE IN SNOWFLAKE ***/!!!
TO_VARCHAR(CURRENT_TIMESTAMP(), 'YYYY-MM-DD') FROM dual;
Copy

마지막 예는 Snowflake에서 오류를 발생시키지 않으며, 실행 시 출력은 동일합니다.

모범 사례

SSC-EWI-OR0049

상태 저장 패키지의 패키지 상수는 아직 지원되지 않습니다.

심각도

중요

참고

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

설명

이 경고는 아직 지원되지 않는 상태 저장 패키지의 멤버가 있는 경우에 추가됩니다.

이 기능은 향후 제공될 예정입니다.

코드 예시

입력 코드:
 CREATE OR REPLACE PACKAGE MY_PACKAGE
AS
    TYPE COLLECTIONTYPEDEFINITION IS TABLE OF BULKCOLLECTTABLE%ROWTYPE;
END;
Copy
생성된 코드:
 CREATE SCHEMA IF NOT EXISTS MY_PACKAGE
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;

!!!RESOLVE EWI!!! /*** SSC-EWI-OR0049 - PACKAGE TYPE DEFINITIONS in stateful package MY_PACKAGE are not supported yet ***/!!!
TYPE COLLECTIONTYPEDEFINITION IS TABLE OF BULKCOLLECTTABLE%ROWTYPE;
Copy

모범 사례

SSC-EWI-OR0050

입력 식이 범위를 벗어납니다

심각도

Medium

설명

이 문제는 범위를 벗어나는 입력 값을 캐스트하려고 하는 경우에 발생합니다. 즉, Snowflake에서 전체 자릿수 값을 적용할 수 없으며, 코드는 주석 처리되고 이 메시지가 추가됩니다.

코드 예시:

입력 코드:
 SELECT CAST('123,456E+40' AS NUMBER, '999,999EEE') FROM DUAL;
SELECT CAST('12.34567891234567891234567891234567891267+' AS NUMBER, '99.999999999999999999999999999999999999S') FROM DUAL;
SELECT CAST('12.34567891234567891234567891234567891267' AS NUMBER, '99.999999999999999999999999999999999999') FROM DUAL;
select cast(' 1.0E+123' as number, '9.9EEEE') from dual;
Copy
생성된 코드:
 SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0050 - INPUT EXPRESSION IS OUT OF THE RANGE '123,456E+40' ***/!!!
 CAST('123,456E+40' AS NUMBER(38, 18) , '999,999EEE') FROM DUAL;

SELECT
 !!!RESOLVE EWI!!! /*** SSC-EWI-OR0050 - INPUT EXPRESSION IS OUT OF THE RANGE '12.34567891234567891234567891234567891267+' ***/!!! CAST('12.34567891234567891234567891234567891267+' AS NUMBER(38, 18) , '99.999999999999999999999999999999999999S') FROM DUAL;

SELECT
 !!!RESOLVE EWI!!! /*** SSC-EWI-OR0050 - INPUT EXPRESSION IS OUT OF THE RANGE '12.34567891234567891234567891234567891267' ***/!!! CAST('12.34567891234567891234567891234567891267' AS NUMBER(38, 18) , '99.999999999999999999999999999999999999') FROM DUAL;

select
 !!!RESOLVE EWI!!! /*** SSC-EWI-OR0050 - INPUT EXPRESSION IS OUT OF THE RANGE ' 1.0E+123' ***/!!! cast(' 1.0E+123' as NUMBER(38, 18) , '9.9EEEE') from dual;
Copy

모범 사례

SSC-EWI-OR0051

PRAGMA EXCEPTION_INIT는 지원되지 않습니다.

심각도

낮음

설명

이 EWI는 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 script
 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
AS
$$
  DECLARE
    !!!RESOLVE EWI!!! /*** SSC-EWI-OR0099 - EXCEPTION CODE NUMBER EXCEEDS SNOWFLAKE SCRIPTING LIMITS ***/!!!
    NEW_EXCEPTION EXCEPTION;
    !!!RESOLVE EWI!!! /*** SSC-EWI-OR0051 - PRAGMA EXCEPTION_INIT IS NOT SUPPORTED ***/!!!
    PRAGMA EXCEPTION_INIT(NEW_EXCEPTION, -63);
    NEW_EXCEPTION2 EXCEPTION (-20100, '');
    !!!RESOLVE EWI!!! /*** SSC-EWI-OR0051 - 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-EWI-OR0052

예외 선언은 상승 함수에 의해 처리됩니다.

심각도

낮음

참고

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

참고

JavasScript를 대상 언어로 사용하고 -t JavaScript 또는 --PLTargetLanguage JavaScript 플래그를 추가해 프로시저 및 매크로를 생성합니다.

설명

예외는 Oracle과 Snowflake의 두 언어 모두에서 정의할 수 있지만, RAISE 함수는 선언, 할당을 수행하고 오류를 발생시키도록 설계되었습니다. 이로 인해 Exception 선언이 주석 처리되고 경고가 표시됩니다.

코드 예시

입력 코드:
 -- Additional Params: -t JavaScript
CREATE OR REPLACE PROCEDURE EXCEPTION_DECLARATION_SAMPLE AUTHID DEFINER IS
  NEW_EXCEPTION EXCEPTION;
  PRAGMA EXCEPTION_INIT(NEW_EXCEPTION, -63);
BEGIN

  IF true THEN
    RAISE NEW_EXCEPTION;
  END IF;

EXCEPTION
    WHEN NEW_EXCEPTION THEN
        --Handle Exceptions
END;
Copy
생성된 코드:
 CREATE OR REPLACE PROCEDURE EXCEPTION_DECLARATION_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.

  try {
    !!!RESOLVE EWI!!! /*** SSC-EWI-OR0052 - EXCEPTION DECLARATION IS HANDLED BY RAISE FUNCTION ***/!!!
    /*   NEW_EXCEPTION EXCEPTION */
    ;
    !!!RESOLVE EWI!!! /*** SSC-EWI-OR0051 - PRAGMA EXCEPTION_INIT IS NOT SUPPORTED ***/!!!
    /*   PRAGMA EXCEPTION_INIT(NEW_EXCEPTION, -63) */
    ;
    if (true) {
      RAISE(-63,`NEW_EXCEPTION`,`NEW_EXCEPTION`);
    }
  } catch(error) {
    switch(error.name) {
      case `NEW_EXCEPTION`: {
        break;
      }
      default: {
        throw error;
        break;
      }
    }
  }
  //Handle Exceptions
  ;
$$;
Copy

참고

더 쉽게 읽을 수 있도록 출력 코드의 일부 부분이 생략되었습니다.

모범 사례

SSC-EWI-OR0053

잘못된 입력 형식

심각도

Medium

설명

이 문제는 잘못된 입력 형식을 사용하여 캐스트하려는 경우에 발생하며, 코드는 주석 처리되고 이 메시지가 추가됩니다.

코드 예시:

입력 코드:
 SELECT CAST('12sdsd3,456E+40' AS NUMBER, '999,999EEE') FROM DUAL;
SELECT CAST('12345sdsd' AS NUMBER, '99999') FROM DUAL;
Copy
생성된 코드:
 SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0053 - INCORRECT INPUT FORMAT '12sdsd3,456E+40' ***/!!!
 CAST('12sdsd3,456E+40' AS NUMBER(38, 18) , '999,999EEE') FROM DUAL;

SELECT
 !!!RESOLVE EWI!!! /*** SSC-EWI-OR0053 - INCORRECT INPUT FORMAT '12345sdsd' ***/!!! CAST('12345sdsd' AS NUMBER(38, 18) , '99999') FROM DUAL;
Copy

모범 사례

SSC-EWI-OR0057

이 시나리오에서는 중첩 프로시저 또는 함수에 대한 변환이 지원되지 않습니다.

심각도

중요

참고

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

설명

다른 함수 또는 프로시저 내부의 중첩 함수 변환은 지원되지 않습니다. 마찬가지로, 함수 또는 익명 블록 내에 중첩된 프로시저는 현재 지원되지 않습니다.

그러나 다른 프로시저 또는 패키지 내의 중첩 프로시저는 지원됩니다. 자세한 내용은 중첩 프로시저 설명서를 참조하세요.

코드 예시

입력 코드:
CREATE OR REPLACE function FOO1 RETURN INTEGER AS
    FUNCTION FOO2 RETURN INTEGER AS
    BEGIN
        RETURN 123;
    END;
BEGIN
    RETURN FOO2() + 456;
END;
Copy
생성된 코드:
 !!!RESOLVE EWI!!! /*** SSC-EWI-0068 - USER DEFINED FUNCTION WAS TRANSFORMED TO SNOWFLAKE PROCEDURE ***/!!!!!!RESOLVE EWI!!! /*** SSC-EWI-0046 - NESTED FUNCTION/PROCEDURE DECLARATIONS ARE NOT SUPPORTED IN SNOWFLAKE. ***/!!!
CREATE OR REPLACE PROCEDURE FOO1 ()
RETURNS INTEGER
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "oracle",  "convertedOn": "07/14/2025",  "domain": "no-domain-provided" }}'
EXECUTE AS CALLER
AS
$$
    DECLARE
        !!!RESOLVE EWI!!! /*** SSC-EWI-OR0057 - TRANSFORMATION FOR NESTED FUNCTION IS NOT SUPPORTED IN THIS SCENARIO ***/!!!
        FUNCTION FOO2 RETURN INTEGER AS
        BEGIN
            RETURN 123;
        END;
    BEGIN
        RETURN FOO2() + 456;
    END;
$$;
Copy

모범 사례

SSC-EWI-OR0067

단일 문에서의 다중 제약 조건 정의는 Snowflake에서 지원되지 않습니다.

심각도

Medium

참고

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

설명

단일 ALTER TABLE 문에서의 다중 제약 조건 정의는 Snowflake에서 지원되지 않습니다.

코드 예시

Oracle:
 ALTER TABLE TABLE1 ADD (
  CONSTRAINT TABLE1_PK
  PRIMARY KEY
  (ID)
  ENABLE VALIDATE,
  CONSTRAINT TABLE1_FK foreign key(ID2)
  references TABLE2 (ID) ON DELETE CASCADE);
Copy
Snowflake Scripting:
 !!!RESOLVE EWI!!! /*** SSC-EWI-OR0067 - MULTIPLE CONSTRAINT DEFINITION IN A SINGLE STATEMENT IS NOT SUPPORTED IN SNOWFLAKE. ***/!!!
ALTER TABLE TABLE1
ADD (
  CONSTRAINT TABLE1_PK
  PRIMARY KEY
  (ID) ,
  CONSTRAINT TABLE1_FK foreign key(ID2)
  references TABLE2 (ID) ON DELETE CASCADE);
Copy

모범 사례

SSC-EWI-OR0068

시퀀스 시작 값이 Snowflake에서 허용하는 최대값을 초과합니다.

심각도

Medium

설명

이 오류는 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
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0068 - 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
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0068 - 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-EWI-OR0069

시퀀스 CURRVAL 속성은 Snowflake에서 지원되지 않습니다.

심각도

Medium

설명

시퀀스 CURRVAL 속성은 Snowflake에서 지원되지 않습니다.

코드 예시

Oracle:
 select seq1.currval from dual;
Copy
Snowflake Scripting:
 select
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0069 - THE SEQUENCE CURRVAL PROPERTY IS NOT SUPPORTED IN SNOWFLAKE. ***/!!!
 seq1.currval from dual;
Copy

모범 사례

  • CURRVAL 속성이 사용되는 경우를 처리하기 위해 Snowflake에서 제안하는 사항을 확인하려면 이 링크를 참조하세요.

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

SSC-EWI-OR0070

바이너리 연산이 지원되지 않습니다

심각도

Medium

참고

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

설명

바이너리 연산은 현재 지원되지 않으며, 사용자 정의 함수가 추가되었습니다.

코드 예시

Oracle:
 -- Unsupported operation: EXCEPT DISTINCT
SELECT someValue MULTISET EXCEPT DISTINCT multiset_except FROM customers_demo;
Copy
Snowflake Scripting:
 -- Unsupported operation: EXCEPT DISTINCT
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0070 - BINARY OPERATION MULTISET EXCEPT IS NOT SUPPORTED ***/!!!
 someValue MULTISET EXCEPT DISTINCT multiset_except FROM
 customers_demo;
Copy

모범 사례

SSC-EWI-OR0071

세트 수량자는 지원되지 않습니다

심각도

낮음

설명

수량자 ‘all’은 Snowflake에서 지원되지 않습니다. 이 수정자는 소스 코드에서 제거되고 경고가 추가됩니다. 결과 코드가 예기치 않게 동작할 수 있습니다.

코드 예시

입력 코드:
 SELECT location_id  FROM locations 
MINUS ALL 
SELECT location_id  FROM departments;
Copy
생성된 코드:
 SELECT location_id  FROM
locations
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0071 - QUANTIFIER 'ALL' NOT SUPPORTED FOR THIS SET OPERATOR, RESULTS MAY DIFFER ***/!!!
MINUS
SELECT location_id  FROM
departments;
Copy

Snowflake에서 INTERSECT 및 MINUS, EXCEPT 연산자는 항상 중복 값을 제거합니다.

모범 사례

  • Snowflake에서 대안을 확인하여 “all” 수량자의 기능을 에뮬레이트합니다. 아래는 MINUS ALLEXCEPT ALL에 대한 해결 방법입니다.

 SELECT location_id FROM
(
    SELECT location_id, ROW_NUMBER()OVER(PARTITION BY location_id ORDER BY 1) rn
    FROM locations
    MINUS
    SELECT number_val, ROW_NUMBER()OVER(PARTITION BY location_id ORDER BY 1) rn
    FROM departments
);
Copy

SSC-EWI-OR0072

프로시저 멤버는 지원되지 않습니다

심각도

Medium

참고

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

참고

JavasScript를 대상 언어로 사용하고 -t JavaScript 또는 –PLTargetLanguage JavaScript 플래그를 추가해 프로시저 및 매크로를 생성합니다.

설명

프로시저 멤버는 현재 지원되지 않습니다. 프로시저 멤버의 예는 다음과 같습니다.

  • 상수 선언.

  • 커서 선언.

  • Pragma 선언.

  • 변수 선언.

코드 예시

Oracle:
 -- Additional Params: -t JavaScript
CREATE OR REPLACE EDITIONABLE PROCEDURE PROCEDURE1
   IS
   PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
    NULL;
END;
Copy
Snowflake Scripting:
 --** SSC-FDM-OR0007 - SNOWFLAKE DOESN'T SUPPORT VERSIONING OF OBJECTS. DEVELOPERS SHOULD CONSIDER ALTERNATE APPROACHES FOR CODE VERSIONING. **
CREATE OR REPLACE PROCEDURE PROCEDURE1 ()
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
$$
   // SnowConvert AI Helpers Code section is omitted.

   !!!RESOLVE EWI!!! /*** SSC-EWI-OR0072 - PROCEDURAL MEMBER PRAGMA DECLARATION NOT SUPPORTED. ***/!!!
   /*    PRAGMA AUTONOMOUS_TRANSACTION */
   ;
   null;
$$;
Copy

모범 사례

SSC-EWI-OR0075

문의 레이블은 지원되지 않습니다

심각도

Medium

참고

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

참고

JavasScript를 대상 언어로 사용하고 -t JavaScript 또는 –PLTargetLanguage JavaScript 플래그를 추가해 프로시저 및 매크로를 생성합니다.

설명

문의 레이블은 코드 블록을 참조하는 데 지원되지 않습니다.

코드 예시

Oracle:
 --Additional Params: -t JavaScript
CREATE OR REPLACE EDITIONABLE PROCEDURE PROCEDURE1 
IS
BEGIN
    -- procedure body
    EXIT loop_b;
    -- procedure body continuation
END;
Copy
Snowflake Scripting:
--Additional Params: -t JavaScript
--** SSC-FDM-OR0007 - SNOWFLAKE DOESN'T SUPPORT VERSIONING OF OBJECTS. DEVELOPERS SHOULD CONSIDER ALTERNATE APPROACHES FOR CODE VERSIONING. **
CREATE OR REPLACE PROCEDURE PROCEDURE1 ()
RETURNS STRING
LANGUAGE JAVASCRIPT
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "oracle",  "convertedOn": "07/16/2025",  "domain": "no-domain-provided" }}'
EXECUTE AS CALLER
AS
$$
    // REGION SnowConvert AI Helpers Code
    var RAISE = function (code,name,message) {
        message === undefined && ([name,message] = [message,name])
        var error = new Error(message);
        error.name = name
        SQLERRM = `${(SQLCODE = (error.code = code))}: ${message}`
        throw error;
    };
    var SQL = {
        FOUND : false,
        NOTFOUND : false,
        ROWCOUNT : 0,
        ISOPEN : false
    };
    var _RS, _ROWS, SQLERRM = "normal, successful completion", SQLCODE = 0;
    var getObj = (_rs) => Object.assign(new Object(),_rs);
    var getRow = (_rs) => (values = Object.values(_rs)) && (values = values.splice(-1 * _rs.getColumnCount())) && values;
    var fetch = (_RS,_ROWS,fmode) => _RS.getRowCount() && _ROWS.next() && (fmode ? getObj : getRow)(_ROWS) || (fmode ? new Object() : []);
    var EXEC = function (stmt,binds,opts) {
        try {
            binds = !(arguments[1] instanceof Array) && ((opts = arguments[1]) && []) || (binds || []);
            opts = opts || new Object();
            binds = binds ? binds.map(fixBind) : binds;
            _RS = snowflake.createStatement({
                    sqlText : stmt,
                    binds : binds
                });
            _ROWS = _RS.execute();
            if (opts.sql !== 0) {
                var isSelect = stmt.toUpperCase().trimStart().startsWith("SELECT");
                var affectedRows = isSelect ? _RS.getRowCount() : _RS.getNumRowsAffected();
                SQL.FOUND = affectedRows != 0;
                SQL.NOTFOUND = affectedRows == 0;
                SQL.ROWCOUNT = affectedRows;
            }
            if (opts.row === 2) {
                return _ROWS;
            }
            var INTO = function (opts) {
                if (opts.vars == 1 && _RS.getColumnCount() == 1 && _ROWS.next()) {
                    return _ROWS.getColumnValue(1);
                }
                if (opts.rec instanceof Object && _ROWS.next()) {
                    var recordKeys = Object.keys(opts.rec);
                    Object.assign(opts.rec,Object.fromEntries(new Map(getRow(_ROWS).map((element,Index) => [recordKeys[Index],element]))))
                    return opts.rec;
                }
                return fetch(_RS,_ROWS,opts.row);
            };
            var BULK_INTO_COLLECTION = function (into) {
                for(let i = 0;i < _RS.getRowCount();i++) {
                    FETCH_INTO_COLLECTIONS(into,fetch(_RS,_ROWS,opts.row));
                }
                return into;
            };
            if (_ROWS.getRowCount() > 0) {
                return _ROWS.getRowCount() == 1 ? INTO(opts) : BULK_INTO_COLLECTION(opts);
            }
        } catch(error) {
            RAISE(error.code,error.name,error.message)
        }
    };
    var FETCH_INTO_COLLECTIONS = function (collections,fetchValues) {
        for(let i = 0;i < collections.length;i++) {
            collections[i].push(fetchValues[i]);
        }
    };
    var IS_NULL = (arg) => !(arg || arg === 0);
    var formatDate = (arg) => (new Date(arg - (arg.getTimezoneOffset() * 60000))).toISOString().slice(0,-1);
    var fixBind = function (arg) {
        arg = arg instanceof Date ? formatDate(arg) : IS_NULL(arg) ? null : arg;
        return arg;
    };
    // END REGION

    /*     -- procedure body
        EXIT loop_b */
    // procedure body
    // procedure body
    ;
    // procedure body continuation
    ;
$$;
Copy

모범 사례

SSC-EWI-OR0076

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

심각도

Medium

설명

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

코드 예시

입력 코드(Oracle):
 SELECT
UTL_RAW.CAST_TO_RAW('some magic here'),
DBMS_UTILITY.GET_TIME
FROM DUAL;
Copy
생성된 코드:
 SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0076 - TRANSLATION FOR BUILT-IN PACKAGE 'UTL_RAW.CAST_TO_RAW' IS NOT CURRENTLY SUPPORTED. ***/!!!
'' AS CAST_TO_RAW,
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0076 - TRANSLATION FOR BUILT-IN PACKAGE 'DBMS_UTILITY.GET_TIME' IS NOT CURRENTLY SUPPORTED. ***/!!!
'' AS GET_TIME
FROM DUAL;
Copy

모범 사례

SSC-EWI-OR0078

Execute Immediate 내부에서 동적 SQL 문을 구문 분석할 수 없습니다.

심각도

Medium

설명

SnowConvert AI는 Execute Immediate 내부에서 동적 SQL 문을 구문 분석할 수 없습니다.

참고

JavasScript를 대상 언어로 사용하고 -t JavaScript 또는 --PLTargetLanguage JavaScript 플래그를 추가해 프로시저 및 매크로를 생성합니다.

코드 예시

Oracle:
 --Additional Params: -t JavaScript
CREATE OR REPLACE PROCEDURE PROC1 AS
BEGIN
    EXECUTE IMMEDIATE 'NOT A VALID SQL STATEMENT';
END;
Copy
Snowflake Scripting:
 CREATE OR REPLACE PROCEDURE PROC1 ()
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
$$
    // SnowConvert AI Helpers Code section is omitted.

    !!!RESOLVE EWI!!! /*** SSC-EWI-OR0078 - UNABLE TO PARSE DYNAMIC SQL STATEMENT ***/!!!
    /*EXEC(`NOT A VALID SQL STATEMENT`)*/
    ;
$$;
Copy

모범 사례

  • 구문 오류에 대한 동적 SQL 문을 확인합니다.

  • 해당 문이 여전히 지원되지 않는지 확인하려면 SnowConvert AI 설명서를 검토합니다.

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

SSC-EWI-OR0082

중첩된 유형 특성 식을 변환할 수 없습니다

참고

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

심각도

Medium

설명

이 오류 메시지는 SELECT와 같은 쿼리가 특정 유형으로 정의된 열 내의 특성에 액세스하려고 할 때 표시됩니다. 이는 자동으로 변환할 수는 없지만, 수동으로 빠르게 변환할 수 있습니다.

코드 예시:

입력 코드 Oracle:
 CREATE TYPE type1 AS OBJECT (
  attribute1 VARCHAR2(20),
  attribute2 NUMBER
);
CREATE TYPE type2 AS OBJECT (
  property1 type1,
  property2 DATE
);
CREATE TABLE my_table (
  id NUMBER PRIMARY KEY,
  column1 type2
);
INSERT INTO my_table VALUES (
  1, type2(type1('value1', 100), SYSDATE)
);
SELECT column1.property1.attribute1, column1.property2
FROM my_table;
Copy
생성된 코드:
 !!!RESOLVE EWI!!! /*** SSC-EWI-0056 - CUSTOM TYPES ARE NOT SUPPORTED IN SNOWFLAKE BUT REFERENCES TO THIS CUSTOM TYPE WERE CHANGED TO VARIANT ***/!!!
CREATE TYPE type1 AS OBJECT (
  attribute1 VARCHAR2(20),
  attribute2 NUMBER
)
;

!!!RESOLVE EWI!!! /*** SSC-EWI-0056 - CUSTOM TYPES ARE NOT SUPPORTED IN SNOWFLAKE BUT REFERENCES TO THIS CUSTOM TYPE WERE CHANGED TO VARIANT ***/!!!
CREATE TYPE type2 AS OBJECT (
  property1 type1,
  property2 DATE
)
;

CREATE OR REPLACE TABLE my_table (
  id NUMBER(38, 18) /*** SSC-FDM-0006 - NUMBER TYPE COLUMN MAY NOT BEHAVE SIMILARLY IN SNOWFLAKE. ***/ PRIMARY KEY,
  column1 VARIANT !!!RESOLVE EWI!!! /*** SSC-EWI-0062 - CUSTOM TYPE 'type2' USAGE CHANGED TO VARIANT ***/!!!
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "oracle",  "convertedOn": "07/14/2025",  "domain": "no-domain-provided" }}'
;

CREATE OR REPLACE VIEW my_table_view
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "oracle",  "convertedOn": "07/14/2025",  "domain": "no-domain-provided" }}'
AS
SELECT
  id,
  column1:property1:attribute1 :: VARCHAR AS attribute1,
  column1:property1:attribute2 :: NUMBER AS attribute2,
  column1:property2 :: DATE AS property2
FROM
  my_table;

INSERT INTO my_table
VALUES (
  1, type2(type1('value1', 100) !!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'type1' NODE ***/!!!, CURRENT_TIMESTAMP()) !!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'type2' NODE ***/!!!
);

SELECT column1.property1.attribute1,
  column1.property2
FROM
  my_table;
Copy

모범 사례

  • 유형 열에 액세스하는 곳마다 ‘.’ 접근자를 ‘:’으로 변경하여 코드를 수동으로 수정할 수 있습니다.

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

SSC-EWI-OR0087

Outer Join의 순서 지정 실패

심각도

낮음

참고

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

설명

이 문제는 이전에 (+) 연산자를 사용한 Outer Join이 있었던 쿼리의 새 ANSI JOIN 절을 재정렬하는 동안 오류가 발생하는 경우에 발생합니다. WHERE 절에서 서로 조인하는 테이블 주기가 있는 쿼리로 인해 이 문제가 발생할 수 있습니다.

이 EWI가 있는 경우 JOIN 절은 해당 순서로 인해 제대로 작동하지 않을 수 있습니다.

코드 예시

입력 코드 Oracle:
 SELECT
l.location_id, l.state_province,
r.region_id, r.region_name,
c.country_id, c.country_name
FROM 
hr.countries c,  hr.regions r,  hr.locations l, hr.departments d WHERE 
l.location_id (+) = c.region_id AND 
c.region_id (+) = r.region_id AND 
r.region_id (+) = c.region_id AND
l.location_id (+) = d.location_id;
Copy
생성된 코드:
 SELECT
l.location_id, l.state_province,
r.region_id, r.region_name,
c.country_id, c.country_name
FROM
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0087 - ORDERING THE OUTER JOINS FAILED. QUERY MAY NOT BEHAVE CORRECTLY ***/!!!
hr.departments d
LEFT OUTER JOIN
hr.locations l
ON
l.location_id = c.region_id
AND
l.location_id = d.location_id
LEFT OUTER JOIN
hr.countries c
ON
c.region_id = r.region_id
LEFT OUTER JOIN
hr.regions r
ON
r.region_id = c.region_id;
Copy
  • 쿼리가 유효하고 서로 조인되는 테이블이 없는지 확인합니다.

  • 문제가 계속 발생하면 WHERE 절의 각 열 이름을 테이블 이름으로 정규화해 봅니다.

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

SSC-EWI-OR0089

REGEXP_LIKE_UDF 일치 매개 변수가 올바르게 동작하지 않을 수 있습니다

참고

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

심각도

낮음

설명

이 경고는 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
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0089 - 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-EWI-OR0090

비 Ansi Outer Join에 유효하지 않은 BETWEEN 조건자가 있습니다

심각도

Medium

참고

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

설명

이 문제는 Snowflake에서 실행할 수 없는 BETWEEN 절 내부에 (+) 연산자가 있는 OUTER JOIN이 있는 경우에 발생합니다. 이는 일반적으로 BETWEEN 절의 간격에 여러 테이블이 사용되는 경우에 발생합니다.

코드 예시

입력 코드 Oracle:
 SELECT
*
FROM 
hr.countries c, hr.regions r,  hr.locations l WHERE 
l.location_id  BETWEEN r.region_id(+) AND c.region_id(+);
Copy
생성된 코드:
 SELECT
*
FROM
hr.countries c,
hr.regions r,
hr.locations l WHERE
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0090 - INVALID NON-ANSI OUTER JOIN BETWEEN PREDICATE CASE FOR SNOWFLAKE. ***/!!!
l.location_id  BETWEEN r.region_id(+) AND c.region_id(+);
Copy

모범 사례

  • 수동으로 Outer Join을 ANSI 구문으로 변경합니다.

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

SSC-EWI-OR0092

NUMBER 데이터 타입 음수 소수 자릿수가 출력에서 제거되었습니다

심각도

낮음

설명

이 문제는 음수 소수 자릿수가 있는 NUMBER가 NUMBER에 반올림을 적용할 때 발생합니다. Snowflake는 이 기능을 지원하지 않으며, 이 메시지는 소수 자릿수가 제거되었음을 나타내기 위해 표시됩니다.

코드 예시

입력 코드 Oracle:
쿼리
 CREATE TABLE number_table
(
	col1 NUMBER(38),
	col2 NUMBER(38, -1),
	col3 NUMBER(*, -2)
);

INSERT INTO number_table(col1, col2, col3) VALUES (555, 555, 555);

SELECT * FROM number_table;
Copy
결과
COL1|COL2|COL3|
----+----+----+
 555| 560| 600|

Copy
생성된 코드:
쿼리
 CREATE OR REPLACE TABLE number_table
	(
		col1 NUMBER(38) /*** SSC-FDM-0006 - NUMBER TYPE COLUMN MAY NOT BEHAVE SIMILARLY IN SNOWFLAKE. ***/,
		col2 NUMBER(38) !!!RESOLVE EWI!!! /*** SSC-EWI-OR0092 - NUMBER DATATYPE NEGATIVE SCALE WAS REMOVED FROM OUTPUT ***/!!! /*** SSC-FDM-0006 - NUMBER TYPE COLUMN MAY NOT BEHAVE SIMILARLY IN SNOWFLAKE. ***/,
		col3 NUMBER(38) !!!RESOLVE EWI!!! /*** SSC-EWI-OR0092 - NUMBER DATATYPE NEGATIVE SCALE WAS REMOVED FROM OUTPUT ***/!!! /*** 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 number_table(col1, col2, col3) VALUES (555, 555, 555);

	SELECT * FROM
	number_table;
Copy
결과
 |COL1|COL2|COL3|
|----|----|----|
|555 |555 |555 |
Copy

모범 사례

SSC-EWI-OR0095

interval 유형과 date 유형 간의 연산이 지원되지 않습니다

심각도

낮음

설명

INTERVAL YEAR TO MONTHINTERVAL DAY TO SECOND는 지원되는 데이터 타입이 아니며, VARCHAR(20)로 변환됩니다. 따라서 date 유형과 원본 interval 유형 열 간의 모든 산술 연산은 지원되지 않습니다.

또한, interval 유형과 date 유형 사이의 연산(이 순서대로)은 Snowflake에서 지원되지 않으며, 이러한 연산에서도 이 EWI가 사용됩니다.

코드 예시

입력 코드:
 CREATE TABLE table_with_intervals
(
    date_col DATE,
    time_col TIMESTAMP,
    intervalYearToMonth_col INTERVAL YEAR TO MONTH,
    intervalDayToSecond_col INTERVAL DAY TO SECOND
);

-- Date + Interval Y to M
SELECT date_col + intervalYearToMonth_col FROM table_with_intervals;

-- Date - Interval D to S
SELECT date_col - intervalDayToSecond_col FROM table_with_intervals;

-- Timestamp + Interval D to S
SELECT time_col + intervalDayToSecond_col FROM table_with_intervals;

-- Timestamp - Interval Y to M
SELECT time_col - intervalYearToMonth_col FROM table_with_intervals;
Copy
생성된 코드:
 CREATE OR REPLACE TABLE table_with_intervals
    (
        date_col TIMESTAMP /*** SSC-FDM-OR0042 - DATE TYPE COLUMN HAS A DIFFERENT BEHAVIOR IN SNOWFLAKE. ***/,
        time_col TIMESTAMP(6),
        intervalYearToMonth_col VARCHAR(20) !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - INTERVAL YEAR TO MONTH DATA TYPE CONVERTED TO VARCHAR ***/!!!,
        intervalDayToSecond_col VARCHAR(20) !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - INTERVAL DAY TO SECOND DATA TYPE CONVERTED TO VARCHAR ***/!!!
    )
    COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
    ;

    -- Date + Interval Y to M
    SELECT
    !!!RESOLVE EWI!!! /*** SSC-EWI-OR0095 - OPERATION BETWEEN INTERVAL TYPE AND DATE TYPE NOT SUPPORTED ***/!!! date_col + intervalYearToMonth_col FROM
    table_with_intervals;

    -- Date - Interval D to S
SELECT
    !!!RESOLVE EWI!!! /*** SSC-EWI-OR0095 - OPERATION BETWEEN INTERVAL TYPE AND DATE TYPE NOT SUPPORTED ***/!!! date_col - intervalDayToSecond_col FROM
    table_with_intervals;

    -- Timestamp + Interval D to S
SELECT
    !!!RESOLVE EWI!!! /*** SSC-EWI-OR0095 - OPERATION BETWEEN INTERVAL TYPE AND DATE TYPE NOT SUPPORTED ***/!!! time_col + intervalDayToSecond_col FROM
    table_with_intervals;

    -- Timestamp - Interval Y to M
SELECT
    !!!RESOLVE EWI!!! /*** SSC-EWI-OR0095 - OPERATION BETWEEN INTERVAL TYPE AND DATE TYPE NOT SUPPORTED ***/!!! time_col - intervalYearToMonth_col FROM
    table_with_intervals;
Copy

모범 사례

  • UDF 를 구현하여 Oracle 동작을 시뮬레이션합니다.

  • 가능한 경우 마이그레이션 중에 열에 저장된 이미 변환된 값을 추출하여 Snowflake 간격 상수로 사용합니다.

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

SSC-EWI-OR0097

Snowflake 프로시저에서는 프로시저 속성이 지원되지 않습니다

심각도

낮음

설명

Oracle CREATEPROCEDURE 추가 속성은 필요하지 않으며 Snowflake CREATE PROCEDURE에 해당하는 속성이 없습니다.

코드 예시

입력 코드 Oracle:
 CREATE OR REPLACE PROCEDURE PROC01
DEFAULT COLLATION USING_NLS_COMP
AUTHID CURRENT_USER
ACCESSIBLE BY (PROCEDURE PROC03)
AS
BEGIN
    NULL;
END;
Copy
생성된 코드:
 CREATE OR REPLACE PROCEDURE PROC01 ()
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
$$
    BEGIN
        NULL;
    END;
$$;
Copy

모범 사례

SSC-EWI-OR0099

예외 코드가 Snowflake Scripting 제한을 초과합니다

심각도

낮음

설명

이 EWI는 예외 선언 오류 코드가 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
        !!!RESOLVE EWI!!! /*** SSC-EWI-OR0099 - EXCEPTION CODE NUMBER EXCEEDS SNOWFLAKE SCRIPTING LIMITS ***/!!!
        my_exception EXCEPTION;
        !!!RESOLVE EWI!!! /*** SSC-EWI-OR0051 - PRAGMA EXCEPTION_INIT IS NOT SUPPORTED ***/!!!
        PRAGMA EXCEPTION_INIT ( my_exception, -19000 );
    BEGIN
        NULL;
    END;
$$;
Copy

모범 사례

  • 예외 코드가 Snowflake Scripting에서 허용되는 제한 범위 내에 있는지 확인하고, 그렇지 않은 경우 다른 예외 번호를 사용할 수 있도록 변경합니다.

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

SSC-EWI-OR0100

여러 조건이 있는 For 루프는 현재 Snowflake Scripting에서 지원되지 않습니다. 첫 번째 조건만 사용됩니다

심각도

낮음

설명

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": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "oracle",  "convertedOn": "07/14/2025",  "domain": "no-domain-provided" }}'
EXECUTE AS CALLER
AS
$$
    BEGIN
        --** SSC-PRF-0008 - PERFORMANCE REVIEW - LOOP USAGE **
        !!!RESOLVE EWI!!! /*** SSC-EWI-OR0100 - FOR LOOP WITH MULTIPLE CONDITIONS IS CURRENTLY NOT SUPPORTED BY SNOWFLAKE SCRIPTING ***/!!!
        FOR i IN REVERSE 1 TO 3
        --** SSC-PRF-0008 - PERFORMANCE REVIEW - LOOP USAGE **
        LOOP
            NULL;
        END LOOP;
    END;
$$;
Copy

모범 사례

  • FOR LOOP를 여러 루프로 분리하거나 조건을 다시 작성합니다.

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

SSC-EWI-OR0101

특정 For 루프 절은 현재 Snowflake Scripting에서 지원되지 않습니다

심각도

낮음

설명

Oracle은 FOR LOOP 조건에 추가 절을 허용합니다. BY, WHILEWHEN 절과 같습니다. WHILEWHEN 절 모두 추가 부울 식을 조건으로 사용할 수 있습니다. 반면, BY 절은 반복에서 단계별 증분을 허용합니다. 이러한 추가 절은 Snowflake Scripting에서 지원되지 않으며 변환 중에 무시됩니다.

코드 예시

입력 코드 Oracle:
 CREATE OR REPLACE PROCEDURE P2
AS
BEGIN
FOR i IN 1..10 WHILE i <= 5 LOOP
    NULL;
END LOOP;

FOR i IN 5..15 BY 5 LOOP
    NULL;
END LOOP;
END;
Copy
생성된 코드:
 CREATE OR REPLACE PROCEDURE P2 ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "oracle",  "convertedOn": "07/14/2025",  "domain": "no-domain-provided" }}'
EXECUTE AS CALLER
AS
$$
    BEGIN
        --** SSC-PRF-0008 - PERFORMANCE REVIEW - LOOP USAGE **
        !!!RESOLVE EWI!!! /*** SSC-EWI-OR0101 - FOR LOOP WITH "WHILE" CLAUSE IS CURRENTLY NOT SUPPORTED BY SNOWFLAKE SCRIPTING ***/!!!
        FOR i IN 1 TO 10
                         --** SSC-PRF-0008 - PERFORMANCE REVIEW - LOOP USAGE **
                         LOOP
                                NULL;
END LOOP;
                         !!!RESOLVE EWI!!! /*** SSC-EWI-OR0101 - FOR LOOP WITH "BY" CLAUSE IS CURRENTLY NOT SUPPORTED BY SNOWFLAKE SCRIPTING ***/!!!
                         --** SSC-PRF-0008 - PERFORMANCE REVIEW - LOOP USAGE **
                         FOR i IN 5 TO 15
                                          --** SSC-PRF-0008 - PERFORMANCE REVIEW - LOOP USAGE **
                                          LOOP
                                   NULL;
END LOOP;
    END;
$$;
Copy

모범 사례

  • FOR LOOP를 여러 루프로 분리하거나 조건을 다시 작성합니다.

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

SSC-EWI-OR0103

For 루프 형식은 현재 Snowflake Scripting에서 지원되지 않습니다

심각도

높음

설명

Oracle은 FOR LOOP에 대해 다양한 유형의 조건을 허용합니다. 부울 식, 컬렉션, 레코드를 지원하지만, Snowflake Scripting은 정의된 정수를 한계값으로 사용하는 FOR LOOP만 지원합니다. 다른 모든 형식은 지원되지 않는 것으로 표시되며 변환하려면 추가적인 수동 작업이 필요합니다.

Snowflake FOR LOOP에서 지원되지 않는 Oracle 반복 제어 절은 다음과 같습니다.

  • single_expression_control

  • values_of_control

  • indices_of_control

  • pairs_of_control

위험

cursor_iteration_control는 현재 지원되지 않는 것으로 표시됩니다. 식에서 괄호를 제거하면 CURSOR FOR LOOP로 변환됩니다.

원본:

FOR i IN (cursor_variable) LOOP NULL; END LOOP;

다음으로 변경해야 함:

FOR i IN cursor_variable LOOP NULL; END LOOP;

코드 예시

입력 코드 Oracle:
 CREATE OR REPLACE PROCEDURE P3
AS
TYPE values_aat IS TABLE OF PLS_INTEGER INDEX BY PLS_INTEGER;
l_employee_values   values_aat;
BEGIN
FOR power IN REPEAT power*2 WHILE power <= 64 LOOP
    NULL;
END LOOP;

FOR i IN VALUES OF l_employee_values LOOP
    NULL;
END LOOP; 
END;
Copy
생성된 코드:
 CREATE OR REPLACE PROCEDURE P3 ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "oracle",  "convertedOn": "07/14/2025",  "domain": "no-domain-provided" }}'
EXECUTE AS CALLER
AS
$$
    DECLARE
--        !!!RESOLVE EWI!!! /*** SSC-EWI-0058 - FUNCTIONALITY FOR 'PL COLLECTION TYPE DEFINITION' IS NOT CURRENTLY SUPPORTED BY SNOWFLAKE SCRIPTING ***/!!!
--        TYPE values_aat IS TABLE OF PLS_INTEGER INDEX BY PLS_INTEGER;
        l_employee_values VARIANT !!!RESOLVE EWI!!! /*** SSC-EWI-0062 - CUSTOM TYPE 'values_aat' USAGE CHANGED TO VARIANT ***/!!!;
    BEGIN
        !!!RESOLVE EWI!!! /*** SSC-EWI-OR0103 - FOR LOOP FORMAT IS CURRENTLY NOT SUPPORTED BY SNOWFLAKE SCRIPTING ***/!!!
        --** SSC-PRF-0008 - PERFORMANCE REVIEW - LOOP USAGE **
        !!!RESOLVE EWI!!! /*** SSC-EWI-OR0101 - FOR LOOP WITH "WHILE" CLAUSE IS CURRENTLY NOT SUPPORTED BY SNOWFLAKE SCRIPTING ***/!!!
        FOR power IN REPEAT power*2 WHILE power <= 64
                                                      --** SSC-PRF-0008 - PERFORMANCE REVIEW - LOOP USAGE **
                                                      LOOP
            NULL;
        END LOOP;
        !!!RESOLVE EWI!!! /*** SSC-EWI-OR0103 - FOR LOOP FORMAT IS CURRENTLY NOT SUPPORTED BY SNOWFLAKE SCRIPTING ***/!!!
        --** SSC-PRF-0008 - PERFORMANCE REVIEW - LOOP USAGE **

        FOR i IN VALUES OF :l_employee_values
                                              --** SSC-PRF-0008 - PERFORMANCE REVIEW - LOOP USAGE **
                                              LOOP
            NULL;
        END LOOP;
    END;
$$;
Copy

모범 사례

  • FOR LOOP 조건을 다시 작성하거나 다른 종류의 LOOP를 사용하여 동작을 시뮬레이션합니다.

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

SSC-EWI-OR0104

사용할 수 없는 컬렉션 변수

심각도

높음

설명

Oracle 컬렉션은 현재 SnowConvert AI에서 지원되지 않습니다. 모든 컬렉션 유형 변수와 해당 사용법이 주석으로 처리됩니다.

참고

JavasScript를 대상 언어로 사용하고 -t JavaScript 또는 --PLTargetLanguage JavaScript 플래그를 추가해 프로시저 및 매크로를 생성합니다.

코드 예시

입력 코드 Oracle:
 -- Additional Params: -t JavaScript
CREATE OR REPLACE PROCEDURE collection_variable_sample_proc
IS
    TYPE POPULATION IS TABLE OF NUMBER INDEX BY VARCHAR2(64); --Associative array
    city_population POPULATION := POPULATION();
    i  VARCHAR2(64);
BEGIN
	city_population('Smallville')  := 2000;
    city_population('Midland')     := 750000;

    i := city_population.FIRST;
    i := city_population.NEXT(1);
END;
Copy
출력 대구
 CREATE OR REPLACE PROCEDURE collection_variable_sample_proc ()
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
$$
	// SnowConvert AI Helpers Code section is omitted.

	!!!RESOLVE EWI!!! /*** SSC-EWI-OR0072 - PROCEDURAL MEMBER TYPE DEFINITION NOT SUPPORTED. ***/!!!
	/*     TYPE POPULATION IS TABLE OF NUMBER INDEX BY VARCHAR2(64) */
	;
	!!!RESOLVE EWI!!! /*** SSC-EWI-OR0104 - UNUSABLE VARIABLE, ITS TYPE WAS NOT TRANSFORMED ***/!!!
	/*     city_population POPULATION := POPULATION() */
	;
	let I;
	!!!RESOLVE EWI!!! /*** SSC-EWI-OR0104 - UNUSABLE VARIABLE, ITS TYPE WAS NOT TRANSFORMED ***/!!!
	/* 	city_population('Smallville')  := 2000 */
	;
	!!!RESOLVE EWI!!! /*** SSC-EWI-OR0104 - UNUSABLE VARIABLE, ITS TYPE WAS NOT TRANSFORMED ***/!!!
	/*     city_population('Midland')     := 750000 */
	;
	I =
		!!!RESOLVE EWI!!! /*** SSC-EWI-OR0104 - UNUSABLE VARIABLE, ITS TYPE WAS NOT TRANSFORMED ***/!!!
		/*city_population.FIRST*/
		null;
	I =
		!!!RESOLVE EWI!!! /*** SSC-EWI-OR0104 - UNUSABLE VARIABLE, ITS TYPE WAS NOT TRANSFORMED ***/!!!
		/*city_population.NEXT(1)*/
		null;
$$;
Copy

모범 사례

SSC-EWI-OR0105

BFILE 열 사용에 대한 추가 작업이 필요합니다. BUILD_STAGE_URL 함수가 권장되는 해결 방법입니다.

심각도

낮음

설명

BFILE 데이터 타입에 대한 변환은 VARCHAR입니다. 그러나 BFILE 유형과 상호 작용하는 데 사용되는 Oracle 기본 제공 함수에 대한 변환은 현재 지원되지 않습니다. 파일 경로와 이름을 저장하기 위해 열이 VARCHAR로 마이그레이션됩니다(자세한 내용은 BFILENAME_UDF 설명서 참조).

참고

BUILD_STAGE_FILE_URL 함수는 Snowflake에서 파일 작업을 할 때 권장되는 해결 방법입니다. 스테이지에 저장된 지정 파일에 대한 링크를 반환합니다. 함수 설명서는 여기에서 확인하세요.

코드 예시

입력 코드 Oracle:
 CREATE TABLE bfiletable ( bfile_column BFILE );

INSERT INTO bfiletable VALUES ( BFILENAME('mydirectory', 'myfile.png') );
Copy
생성된 코드:
 CREATE OR REPLACE TABLE bfiletable ( bfile_column
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0105 - ADDITIONAL WORK IS NEEDED FOR BFILE COLUMN USAGE. BUILD_STAGE_FILE_URL FUNCTION IS A RECOMMENDED WORKAROUND ***/!!!
VARCHAR
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
;

INSERT INTO bfiletable
VALUES (PUBLIC.BFILENAME_UDF('mydirectory', 'myfile.png') );
Copy

모범 사례

  • BUILD_STAGE_FILE_URL 및 기타 파일 함수를 사용하여 파일을 처리합니다.

Snowflake 쿼리
 CREATE OR REPLACE TABLE bfiletable ( bfile_column
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0105 - ADDITIONAL WORK IS NEEDED FOR BFILE COLUMN USAGE. BUILD_STAGE_FILE_URL FUNCTION IS A RECOMMENDED WORKAROUND ***/!!!
VARCHAR
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;

INSERT INTO bfiletable
VALUES (PUBLIC.BFILENAME_UDF('mydirectory', 'myfile.png') );
Copy
결과
URL                                                                                                   |
------------------------------------------------------------------------------------------------------+
https://thecompany.snowflakecomputing.com/api/files/CODETEST/PUBLIC/MY_STAGE/%2Fmydirectory%2Fmyfile.jpg|

Copy

참고

이 함수는 다양한 클라우드 저장소 옵션에서 작동하지만, 스테이지에서 로컬 파일을 사용하는 방법에 대한 자세한 내용은 이 설명서를 확인하세요.

  • 데이터 타입을 지원되는 타입으로 변경합니다.

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

SSC-EWI-OR0108

다음 할당 문은 Snowflake Scripting에서 지원되지 않습니다

참고

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

심각도

Medium

설명

일부 Oracle 변수 유형은 Snowflake에서 직접 변환되지 않습니다. 현재 Snow Scripting에서는 커서, 컬렉션, 레코드 및 사용자 정의 유형 변수뿐만 아니라 자리 표시자, 오브젝트, 출력 매개 변수에 대한 변환이 지원되지 않습니다.

일부 시나리오에서는 이러한 변수를 Snowflake 반정형 데이터 타입으로 변경하여 해결할 수 있습니다.

코드 예시

입력 코드:
 CREATE OR REPLACE PROCEDURE pinvalidassign(out_parameter   IN OUT NUMBER)
AS
record_variable       employees%ROWTYPE;

TYPE cursor_type IS REF CURSOR;
cursor1   cursor_type;
cursor2   SYS_REFCURSOR;

TYPE collection_type IS TABLE OF NUMBER INDEX BY VARCHAR(64);
collection_variable     collection_type;

BEGIN
--Record Example
  record_variable.last_name := 'Ortiz';

--Cursor Example
  cursor1 := cursor2;
  
--Collection
  collection_variable('Test') := 5;

--Out Parameter
  out_parameter := 123;
END;
Copy
생성된 코드:
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "employees" **
CREATE OR REPLACE PROCEDURE pinvalidassign (out_parameter 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/16/2025",  "domain": "no-domain-provided" }}'
EXECUTE AS CALLER
AS
$$
  DECLARE
    record_variable OBJECT !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - ROWTYPE DATA TYPE CONVERTED TO OBJECT ***/!!! := OBJECT_CONSTRUCT();
--    !!!RESOLVE EWI!!! /*** SSC-EWI-0058 - FUNCTIONALITY FOR 'PL REF CURSOR TYPE DEFINITION' IS NOT CURRENTLY SUPPORTED BY SNOWFLAKE SCRIPTING ***/!!!

--    TYPE cursor_type IS REF CURSOR;
    cursor1_res RESULTSET;
    cursor2_res RESULTSET;
--    !!!RESOLVE EWI!!! /*** SSC-EWI-0058 - FUNCTIONALITY FOR 'PL COLLECTION TYPE DEFINITION' IS NOT CURRENTLY SUPPORTED BY SNOWFLAKE SCRIPTING ***/!!!

--    TYPE collection_type IS TABLE OF NUMBER INDEX BY VARCHAR(64);
    collection_variable VARIANT !!!RESOLVE EWI!!! /*** SSC-EWI-0062 - CUSTOM TYPE 'collection_type' USAGE CHANGED TO VARIANT ***/!!!;
  BEGIN
    --Record Example
    record_variable := OBJECT_INSERT(record_variable, 'LAST_NAME', 'Ortiz', true);

    --Cursor Example
    !!!RESOLVE EWI!!! /*** SSC-EWI-OR0108 - THE FOLLOWING ASSIGNMENT STATEMENT IS NOT SUPPORTED BY SNOWFLAKE SCRIPTING ***/!!!
      cursor1 := :cursor2;

    --Collection
    !!!RESOLVE EWI!!! /*** SSC-EWI-OR0108 - THE FOLLOWING ASSIGNMENT STATEMENT IS NOT SUPPORTED BY SNOWFLAKE SCRIPTING ***/!!!
      collection_variable('Test') := 5;
    --Out Parameter
    out_parameter := 123;
  END;
$$;
Copy

모범 사례

SSC-EWI-OR0109

Snowflake Scripting에서는 Using 절의 인자로 사용되는 식이 지원되지 않음

심각도

Medium

설명

Oracle은 EXECUTE IMMEDIATE 문에 대한 모든 USING 절에 인자로 식을 사용할 수 있습니다. 이 기능은 Snowflake Scripting에서는 지원되지 않습니다.

Snowflake Scripting은 변수 식을 지원하며, 변수에 수동으로 할당하여 식을 바꿀 수 있습니다(아래 예 참조).

코드 예시

입력 코드:
 CREATE OR REPLACE PROCEDURE expression_arguments
IS
  immediate_input INTEGER := 0;
BEGIN
  EXECUTE IMMEDIATE 'INSERT INTO immediate_table VALUES (:value)' USING immediate_input+1;
END;
Copy
생성된 코드:
 CREATE OR REPLACE PROCEDURE expression_arguments ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
  DECLARE
    immediate_input INTEGER := 0;
  BEGIN
    !!!RESOLVE EWI!!! /*** SSC-EWI-0030 - THE STATEMENT BELOW HAS USAGES OF DYNAMIC SQL. ***/!!!
    EXECUTE IMMEDIATE 'INSERT INTO immediate_table
VALUES (?)' USING (
    !!!RESOLVE EWI!!! /*** SSC-EWI-OR0109 - EXPRESSIONS AS ARGUMENTS OF USING CLAUSE IS NOT SUPPORTED BY SNOWFLAKE SCRIPTING ***/!!!
    :immediate_input +1);
  END;
$$;
Copy
수동으로 마이그레이션한 즉시 실행 프로시저:

이 프로시저를 위의 프로시저로 바꾸면 컴파일 오류가 해결되고 Oracle과 동일한 결과가 생성됩니다.

 CREATE OR REPLACE PROCEDURE PUBLIC.expression_arguments ()
RETURNS VARCHAR
LANGUAGE SQL
EXECUTE AS CALLER
AS
$$
   DECLARE
      immediate_input INTEGER := 0;
      using_argument_variable INTEGER;
   BEGIN
      using_argument_variable := immediate_input+1;
      EXECUTE IMMEDIATE 'INSERT INTO PUBLIC.immediate_table VALUES (?)' USING (using_argument_variable );
   END;
$$;
Copy

모범 사례

  • 변수를 추가한 다음 해당 변수에 식을 할당하여 프로시저를 수동으로 마이그레이션할 수 있습니다.

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

SSC-EWI-OR0110

For Update 절은 Snowflake에서 지원되지 않습니다

참고

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

심각도

높음

설명

Snow Scripting의 FOR UPDATE 절에 해당하는 항목이 없으므로 EWI가 추가되고 해당 절이 주석 처리됩니다

예시 코드

입력 코드:
 CREATE OR REPLACE PROCEDURE for_update_clause
AS
    update_record f_employee%rowtype;
    CURSOR c1 IS SELECT * FROM f_employee FOR UPDATE OF employee_number nowait;
BEGIN
    FOR CREC IN C1 LOOP
	UPDATE f_employee SET employee_number = employee_number + 1000 WHERE CURRENT OF c1;
	IF crec.id = 2 THEN
	    DELETE FROM f_employee WHERE CURRENT OF c1;
	    EXIT;
	END IF;
    END LOOP;
END;
Copy
생성된 코드:
 --** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "f_employee" **
CREATE OR REPLACE PROCEDURE for_update_clause ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "oracle",  "convertedOn": "07/14/2025",  "domain": "no-domain-provided" }}'
EXECUTE AS CALLER
AS
$$
	DECLARE
		update_record OBJECT !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - ROWTYPE DATA TYPE CONVERTED TO OBJECT ***/!!! := OBJECT_CONSTRUCT();
		--** SSC-PRF-0009 - PERFORMANCE REVIEW - CURSOR USAGE **
		c1 CURSOR
		FOR
			SELECT * FROM
				f_employee
			!!!RESOLVE EWI!!! /*** SSC-EWI-OR0110 - FOR UPDATE CLAUSE IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
			FOR UPDATE OF employee_number nowait;
	BEGIN
		OPEN C1;
		--** SSC-PRF-0004 - THIS STATEMENT HAS USAGES OF CURSOR FOR LOOP **
		FOR CREC IN C1 DO
			!!!RESOLVE EWI!!! /*** SSC-EWI-OR0136 - CURRENT OF CLAUSE IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
			UPDATE f_employee
				SET employee_number =
 				                     !!!RESOLVE EWI!!! /*** SSC-EWI-OR0036 - TYPES RESOLUTION ISSUES, ARITHMETIC OPERATION '+' MAY NOT BEHAVE CORRECTLY BETWEEN unknown AND Number ***/!!! employee_number + 1000 WHERE CURRENT OF c1;
			IF (crec.id = 2) THEN
--				!!!RESOLVE EWI!!! /*** SSC-EWI-0058 - FUNCTIONALITY FOR 'CURRENT OF' IS NOT CURRENTLY SUPPORTED BY SNOWFLAKE SCRIPTING ***/!!!
--				DELETE FROM
--					f_employee
--				WHERE CURRENT OF c1
				                   ;
				EXIT;
			END IF;
		END FOR;
		CLOSE C1;
	END;
$$;
Copy

모범 사례

  • UPDATE/DELETE 쿼리에서 열 업데이트를 처리합니다. 자세한 내용은 SSC-EWI-OR0136](#ssc-ewi-or0136)을 확인하세요.

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

SSC-EWI-OR0116

INTERVAL 사이의 연산은 지원되지 않습니다

심각도

Medium

참고

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

설명

이 오류는 피연산자가 오직 INTERVAL로 구성된 산술 연산이 있는 경우에 추가되며, 이러한 종류의 연산은 Snowflake에서 지원되지 않습니다.

코드 예시

입력 코드:
 SELECT INTERVAL '1-1' YEAR(2) TO MONTH + INTERVAL '1-1' YEAR(2) + INTERVAL '1-1' YEAR(2) TO MONTH FROM dual;

SELECT INTERVALCOLUMN + INTERVAL '1-1' YEAR(2) TO MONTH FROM INTERVALTABLE;
Copy
생성된 코드:
 SELECT
--INTERVAL '1-1 year' + INTERVAL '1y, 1mm' + INTERVAL '1y, 1mm'
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0116 - OPERATIONS BETWEEN INTERVALS ARE NOT SUPPORTED BY SNOWFLAKE ***/!!!
null
FROM dual;


SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0036 - TYPES RESOLUTION ISSUES, ARITHMETIC OPERATION '+' MAY NOT BEHAVE CORRECTLY BETWEEN Unknown AND Interval ***/!!! INTERVALCOLUMN + INTERVAL '1y, 1mm'
FROM
INTERVALTABLE;
Copy

모범 사례

  • 연산이 위치한 위치에 따라 날짜 또는 타임스탬프를 추가하여 작업을 재배치하고 유효하게 만들 수 있습니다.

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

SSC-EWI-OR0118

기본 제공 뷰 및 테이블은 Snowflake에서 지원되지 않습니다

심각도

Medium

설명

Oracle에는 Snowflake에는 없는 기본 제공 뷰 및 테이블 세트가 있습니다. SnowConvert AI는 이러한 요소를 사용하는 쿼리와 문에 오류 메시지를 추가합니다.

코드 예시

입력 코드:
 SELECT * FROM ALL_COL_COMMENTS;
SELECT * FROM (SELECT * FROM ALL_COL_COMMENTS);
Copy
생성된 코드:
 SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0118 - TRANSLATION FOR ORACLE BUILT-IN TABLE/VIEW 'ALL_COL_COMMENTS' IS NOT CURRENTLY SUPPORTED. ***/!!!
 * FROM
 ALL_COL_COMMENTS;

SELECT * FROM (SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0118 - TRANSLATION FOR ORACLE BUILT-IN TABLE/VIEW 'ALL_COL_COMMENTS' IS NOT CURRENTLY SUPPORTED. ***/!!! * FROM
ALL_COL_COMMENTS);
Copy

모범 사례

SSC-EWI-OR0121

BFILE 열이 있는 DBMS_LOB.SUBSTR 기본 제공 패키지는 Snowflake에서 지원되지 않습니다

심각도

Medium

설명

Snowflake에서는 Oracle BFILE 열이 VARCHAR로 마이그레이션됩니다. 파일 이름은 새 열에 문자열로 저장됩니다. 따라서 Snowflake에서 마이그레이션된 열에 SUBSTR 함수를 사용하면 파일 이름의 하위 문자열이 반환됩니다. Oracle DBMS_LOB.SUBSTR은 파일 콘텐츠의 하위 문자열을 반환합니다. 자세한 내용은 BFILE 데이터 타입을 검토하세요.

코드 예시

입력 코드:
 CREATE TABLE table1
(
    bfile_column BFILE
)
SELECT 
DBMS_LOB.SUBSTR(bfile_column, 15, 1)
FROM table1;
Copy
생성된 코드:
 CREATE OR REPLACE TABLE table1
    (
        bfile_column
    !!!RESOLVE EWI!!! /*** SSC-EWI-OR0105 - ADDITIONAL WORK IS NEEDED FOR BFILE COLUMN USAGE. BUILD_STAGE_FILE_URL FUNCTION IS A RECOMMENDED WORKAROUND ***/!!!
    VARCHAR
    )
    COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
    ;
    SELECT
    !!!RESOLVE EWI!!! /*** SSC-EWI-OR0121 - USING DBMS_LOB.SUBSTR ON BFILE SOURCE COLUMN IS NOT SUPPORTED ON SNOWFLAKE ***/!!!
    SUBSTR(bfile_column, 1, 15)
    FROM
    table1;
Copy

모범 사례

SSC-EWI-OR0123

데이터베이스 링크 연결은 지원되지 않습니다

심각도

Medium

설명

데이터베이스 링크 및 해당 참조는 Snowflake에서 지원되지 않으므로 오브젝트 이름에서 데이터베이스 링크 연결 참조가 제거되었습니다. 유일하게 유지되는 부분은 @ 문자 앞의 이름입니다.

코드 예시

입력 코드:
 -- Creation of the database link
CREATE DATABASE LINK mylink
    CONNECT TO user1 IDENTIFIED BY password1
    USING 'connection_str';

-- Statements that use the database link we created
SELECT * FROM employees@mylink;

INSERT INTO employees@mylink
    (employee_id, last_name, email, hire_date, job_id)
    VALUES (999, 'Claus', 'sclaus@oracle.com', SYSDATE, 'SH_CLERK');

UPDATE employees@mylink SET min_salary = 3000
    WHERE job_id = 'SH_CLERK';

DELETE FROM employees@mylink
    WHERE employee_id = 999;
Copy
생성된 코드:
 ---- Creation of the database link
----** SSC-OOS - OUT OF SCOPE CODE UNIT. CREATE DATABASE LINK IS OUT OF TRANSLATION SCOPE. **
--CREATE DATABASE LINK mylink
--    CONNECT TO user1 IDENTIFIED BY password1
--    USING 'connection_str'

    -- Statements that use the database link we created
SELECT * FROM
    !!!RESOLVE EWI!!! /*** SSC-EWI-OR0123 - DBLINK CONNECTIONS NOT SUPPORTED [ DBLINK : mylink | USER: user1/password1 | CONNECTION: 'connection_str' ] ***/!!!
    employees;

INSERT INTO
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0123 - DBLINK CONNECTIONS NOT SUPPORTED [ DBLINK : mylink | USER: user1/password1 | CONNECTION: 'connection_str' ] ***/!!!
employees
    (employee_id, last_name, email, hire_date, job_id)
    VALUES (999, 'Claus', 'sclaus@oracle.com', CURRENT_TIMESTAMP(), 'SH_CLERK');

UPDATE
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0123 - DBLINK CONNECTIONS NOT SUPPORTED [ DBLINK : mylink | USER: user1/password1 | CONNECTION: 'connection_str' ] ***/!!!
employees
    SET min_salary = 3000
    WHERE job_id = 'SH_CLERK';

DELETE FROM
    !!!RESOLVE EWI!!! /*** SSC-EWI-OR0123 - DBLINK CONNECTIONS NOT SUPPORTED [ DBLINK : mylink | USER: user1/password1 | CONNECTION: 'connection_str' ] ***/!!!
    employees
    WHERE employee_id = 999;
Copy

모범 사례

  • 모든 DB 링크의 이름이 다른지 확인하는 것이 중요합니다. 두 개의 DB 링크가 동일한 이름을 공유하고 코드가 여러 번 마이그레이션된 경우 EWI는 먼저 처리되는 DB 링크에 따라 정보를 변경할 수 있습니다.

  • 데이터베이스 링크 참조에서 Snowflake에서 사용 중인 동일한 데이터베이스 인스턴스로 데이터베이스 오브젝트를 이동합니다.

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

SSC-EWI-OR0126

기본 제공 사용자 지정 유형이 지원되지 않으므로 사용할 수 없는 오브젝트

심각도

Medium

설명

이 오류는 기본 제공 사용자 지정 유형이 있는 오브젝트가 사용 중인지를 나타내기 위해 표시됩니다.

코드 예시

입력 코드:
 CREATE OR REPLACE PROCEDURE proc01 is
   var1 DBMS_SQL.VARCHAR2_TABLE;
   var2 CTX_CLS.DOC_TAB;
BEGIN 
   varX := var1.property;
   varY := var2(1);
END;
Copy
생성된 코드:
 CREATE OR REPLACE PROCEDURE proc01 ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
   DECLARE
      var1 VARIANT /*** SSC-FDM-0015 - REFERENCED CUSTOM TYPE 'DBMS_SQL.VARCHAR2_TABLE' IN QUERY NOT FOUND, USAGES MAY BE AFFECTED ***/;
      var2 VARIANT /*** SSC-FDM-0015 - REFERENCED CUSTOM TYPE 'CTX_CLS.DOC_TAB' IN QUERY NOT FOUND, USAGES MAY BE AFFECTED ***/;
   BEGIN
      varX := var1.property !!!RESOLVE EWI!!! /*** SSC-EWI-OR0126 - UNUSABLE OBJECT var1, BUILT-IN CUSTOM TYPES ARE NOT SUPPORTED ***/!!!;
      varY := var2(1) !!!RESOLVE EWI!!! /*** SSC-EWI-OR0126 - UNUSABLE OBJECT var2, BUILT-IN CUSTOM TYPES ARE NOT SUPPORTED ***/!!!;
   END;
$$;
Copy

모범 사례

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": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "oracle",  "convertedOn": "07/14/2025",  "domain": "no-domain-provided" }}'
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();
        --** SSC-PRF-0009 - PERFORMANCE REVIEW - CURSOR USAGE **
        my_cursor CURSOR
        FOR
            SELECT
                OBJECT_CONSTRUCT( *) sc_cursor_record FROM
                table1;
    BEGIN
        OPEN my_cursor;
        --** SSC-PRF-0008 - PERFORMANCE REVIEW - LOOP USAGE **
        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*/!!!RESOLVE EWI!!! /*** SSC-EWI-OR0128 - BOOLEAN CURSOR ATTRIBUTE %ISOPEN IS NOT SUPPORTED IN SNOWFLAKE ***/!!!;
            found_attr := my_record IS NOT NULL;
        END LOOP;
    CLOSE my_cursor;
    END;
$$;
Copy

모범 사례

SSC-EWI-OR0129

TYPE 특성을 확인할 수 없습니다.

심각도

낮음

참고

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

설명

이 경고는 TYPE 특성 참조 항목을 확인할 수 없으며 참조하는 항목의 데이터 타입을 가져올 수 없는 경우에 표시됩니다. 따라서 대신 VARIANT 데이터 타입이 할당됩니다.

코드 예시

입력 코드:
 CREATE OR REPLACE PROCEDURE procedure01
IS
var1 table01.col1%TYPE;
BEGIN
NULL;
END;
Copy
생성된 코드:
 CREATE OR REPLACE PROCEDURE procedure01 ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
DECLARE
var1 VARIANT !!!RESOLVE EWI!!! /*** SSC-EWI-OR0129 - TYPE ATTRIBUTE 'table01.col1%TYPE' COULD NOT BE RESOLVED, SO IT WAS TRANSFORMED TO VARIANT ***/!!!;
BEGIN
NULL;
END;
$$;
Copy

모범 사례

  • 참조된 항목 데이터 타입을 확인하고 참조하는 항목 TYPE 특성에서 수동으로 바꿉니다.

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

SSC-EWI-OR0133

커서 변수가 이미 할당되었습니다

심각도

Medium

설명

OPEN FOR 문이 변환된 경우 입력 코드에 사용된 커서 변수와 이름이 같은 커서 할당이 다른 문과 함께 추가되어 해당 기능을 에뮬레이트합니다. 동일한 커서 변수가 있는 여러 OPEN FOR 문을 사용할 수 있으므로 출력 코드에 이름이 같은 여러 커서 할당이 있습니다. 출력 코드를 그대로 두면 Snowflake에서 실행할 때 컴파일 오류가 발생합니다.

코드 예시

입력 코드
 CREATE OR REPLACE PROCEDURE open_for_procedure
AS 
	query1 VARCHAR(200) := 'SELECT 123 FROM dual';
	query2 VARCHAR(200) := 'SELECT 456 FROM dual';
	my_cursor_variable SYS_REFCURSOR;
BEGIN
	OPEN my_cursor_variable FOR query1;
	OPEN my_cursor_variable FOR query2;
END;
Copy
생성된 코드
 CREATE OR REPLACE PROCEDURE open_for_procedure ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
	DECLARE
		query1 VARCHAR(200) := 'SELECT 123 FROM dual';
		query2 VARCHAR(200) := 'SELECT 456 FROM dual';
		my_cursor_variable_res RESULTSET;
	BEGIN
		!!!RESOLVE EWI!!! /*** SSC-EWI-0030 - THE STATEMENT BELOW HAS USAGES OF DYNAMIC SQL. ***/!!!
		my_cursor_variable_res := (
			EXECUTE IMMEDIATE :query1
		);
		LET my_cursor_variable CURSOR
		FOR
			my_cursor_variable_res;
		OPEN my_cursor_variable;
		!!!RESOLVE EWI!!! /*** SSC-EWI-0030 - THE STATEMENT BELOW HAS USAGES OF DYNAMIC SQL. ***/!!!
		my_cursor_variable_res := (
			EXECUTE IMMEDIATE :query2
		);
		!!!RESOLVE EWI!!! /*** SSC-EWI-OR0133 - THE CURSOR VARIABLE NAMED 'my_cursor_variable' HAS ALREADY BEEN ASSIGNED IN ANOTHER CURSOR ***/!!!
		LET my_cursor_variable CURSOR
		FOR
			my_cursor_variable_res;
		OPEN my_cursor_variable;
	END;
$$;
Copy

관련 EWI

  1. SSC-EWI-0030: 아래 문에서 동적 SQL이 사용됩니다.

모범 사례

  • 출력 코드의 컴파일 오류를 해결하려면 SSC-EWI-OR0133 메시지가 있는 커서 할당의 이름을 바꿔야 합니다.

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

SSC-EWI-OR0135

데이터 보존 기간으로 인해 결과가 생성되지 않을 수 있습니다

심각도

낮음

설명

Snowflake에서 Time Travel을 사용하여 쿼리를 실행하는 경우 지정된 시간이 데이터 보존 기간 범위를 벗어난 경우 결과를 반환하지 않을 수 있습니다. Snowflake의 Time Travel에 대해 자세히 알아보세요.

코드 예시

입력 코드
 SELECT * FROM employees
AS OF TIMESTAMP
TO_TIMESTAMP('2023-09-27 07:00:00', 'YYYY-MM-DD HH:MI:SS')
WHERE last_name = 'SampleName';
Copy
생성된 코드
 SELECT * FROM
employees
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0135 - DATA RETENTION PERIOD MAY PRODUCE NO RESULTS ***/!!!
AT (TIMESTAMP =>
TO_TIMESTAMP('2023-09-27 07:00:00', 'YYYY-MM-DD HH:MI:SS'))
WHERE last_name = 'SampleName';
Copy

모범 사례

SSC-EWI-OR0136

Current OF 절은 Snowflake에서 지원되지 않습니다

심각도

중요

설명

UPDATE 및 DELETE와 같은 일부 문은 WHERE 절 내부에 CURRENT OF 절을 사용할 수 있으며, 이는 현재 Snowflake에서 지원되지 않습니다.

코드 예시

Oracle:
 CREATE OR REPLACE PROCEDURE proc_update_current_of
AS
  CURSOR C1
  IS
    SELECT * FROM F_EMPLOYEE FOR UPDATE OF SALARY nowait;
BEGIN
  FOR CREC IN C1
  LOOP
    UPDATE F_EMPLOYEE SET SALARY=SALARY+2000 WHERE CURRENT OF C1;
  END LOOP;
END;
Copy
Snowflake Scripting:
 --** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "F_EMPLOYEE" **
CREATE OR REPLACE PROCEDURE proc_update_current_of ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "oracle",  "convertedOn": "07/14/2025",  "domain": "no-domain-provided" }}'
EXECUTE AS CALLER
AS
$$
  DECLARE
    --** SSC-PRF-0009 - PERFORMANCE REVIEW - CURSOR USAGE **
    C1 CURSOR
    FOR
      SELECT * FROM
        F_EMPLOYEE
      !!!RESOLVE EWI!!! /*** SSC-EWI-OR0110 - FOR UPDATE CLAUSE IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
      FOR UPDATE OF SALARY nowait;
  BEGIN
      OPEN C1;
      --** SSC-PRF-0004 - THIS STATEMENT HAS USAGES OF CURSOR FOR LOOP **
      FOR CREC IN C1 DO
      !!!RESOLVE EWI!!! /*** SSC-EWI-OR0136 - CURRENT OF CLAUSE IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
      UPDATE F_EMPLOYEE
        SET SALARY=
                   !!!RESOLVE EWI!!! /*** SSC-EWI-OR0036 - TYPES RESOLUTION ISSUES, ARITHMETIC OPERATION '+' MAY NOT BEHAVE CORRECTLY BETWEEN unknown AND Number ***/!!!SALARY+2000 WHERE CURRENT OF C1;
      END FOR;
      CLOSE C1;
  END;
$$;
Copy

관련 EWI

  1. SSC-EWI-OR0036: 유형 확인 문제로 인해 문자열과 날짜 사이에서 산술 연산이 올바르게 동작하지 않을 수 있습니다.

  2. SSC-PRF-0004: 이 문에서 cursor for loop가 사용됩니다.

  3. SSC-EWI-OR0110: Snowflake에서는 For Update 절이 지원되지 않습니다.

모범 사례

  • WHERE 절에 열을 지정하여 쿼리를 일반 UPDATE 또는 DELETE로 다시 설계합니다. 테이블에 중복 레코드가 있는 경우 쿼리가 여러 번 영향을 줄 수 있다는 점을 고려합니다.

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

SSC-EWI-OR0137

유형 특성 참조가 지원되지 않을 수 있으므로 베리언트 데이터 타입으로 변환되었습니다.

심각도

중요

설명

유형 특성 ‘TYPEUSED%TYPE’은 지원되지 않을 수 있으므로, 베리언트로 변환되었습니다

코드 예시

Oracle:
CREATE OR REPLACE TABLE MYTABLE
(
  LOG_ID URITYPE
);

CREATE OR REPLACE PROCEDURE some_procedure()
IS
  L_MESSAGE MYTABLE.LOG_ID%TYPE;
BEGIN
  NULL;
END;
Copy
Snowflake Scripting:
CREATE OR REPLACE TABLE MYTABLE
  (
  !!!RESOLVE EWI!!! /*** SSC-EWI-0028 - TYPE NOT SUPPORTED BY SNOWFLAKE ***/!!!
    LOG_ID URITYPE
  )
  COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "oracle",  "convertedOn": "10/01/2025",  "domain": "no-domain-provided",  "migrationid": "aqCZAdErg3K0P04NglqCCg==" }}'
  ;

  CREATE OR REPLACE PROCEDURE some_procedure ()
  RETURNS VARCHAR
  LANGUAGE SQL
  COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "oracle",  "convertedOn": "10/01/2025",  "domain": "no-domain-provided",  "migrationid": "aqCZAdErg3K0P04NglqCCg==" }}'
  EXECUTE AS CALLER
  AS
  $$
  DECLARE
      L_MESSAGE VARIANT !!!RESOLVE EWI!!! /*** SSC-EWI-OR0137 - TYPE ATTRIBUTE 'MYTABLE.LOG_ID%TYPE' MIGHT BE UNSUPPORTED, SO IT WAS TRANSFORMED TO VARIANT ***/!!!;
  BEGIN
      NULL;
  END;
  $$;
Copy

모범 사례