SnowConvert AI - Oracle - Oracle 기본 제공 데이터 타입

확장 데이터 타입

설명

Oracle 데이터베이스 12_c_부터 VARCHAR2, NVARCHAR2, RAW 데이터 타입에 대해 최대 32767바이트의 크기를 지정할 수 있습니다. 초기화 매개 변수 MAX_STRING_SIZE 를 설정하여 데이터베이스가 이 새로운 최대 크기를 지원하는지 여부를 제어할 수 있습니다.

선언된 크기가 4000바이트보다 큰 VARCHAR2 또는 NVARCHAR2 데이터 타입 또는 선언된 크기가 2000바이트보다 큰 RAW 데이터 타입은 확장 데이터 타입 입니다. (Oracle SQL Language Reference 확장 데이터 타입).

Oracle에서는 데이터베이스 최대 문자열 크기를 STANDARD 에서 EXTENDED 로 늘릴 수 있지만, Snowflake에는 이 기능에 해당하는 기능이 포함되어 있지 않습니다.

따라서 VARCHAR2, NVARCHAR2RAW 확장 데이터 타입은 Snowflake에서 지원되지 않으며, 일반 VARCHAR2, NVARCHAR2RAW 데이터 타입처럼 변환됩니다. 자세한 내용은 문자 데이터 타입RAW 데이터 타입을 참조하세요.

Known Issues

1. MAX STRING SIZE not recognized

ALTER SYSTEM SET MAX_STRING_SIZE='EXTENDED';

SnowConvert 에 의해 구문 분석되지 않습니다.

JSON 데이터 타입

설명

Oracle 데이터베이스는 트랜잭션, 인덱스, 선언적 쿼리 및 뷰를 비롯한 관계형 데이터베이스 기능을 통해 JSON 을 기본적으로 지원합니다. 관계형 데이터와 달리 JSON 데이터는 데이터를 정의하는 스키마 없이도 데이터베이스에 저장하고, 인덱싱하고, 쿼리할 수 있습니다. (Oracle SQL Language Reference JSON 데이터 타입).

JSON 데이터 타입은 Oracle 동작을 에뮬레이션하기 위해 VARIANT 로 변환됩니다.

JSON
Copy

샘플 소스 패턴

Create Table의 JSON 데이터 타입을 열로 사용

Oracle
CREATE TABLE jsontable (
	json_column JSON
);

INSERT INTO jsontable VALUES('{"id": 1, "content":"json content"}');
INSERT INTO jsontable VALUES('{"stringdata": "this is a text","number": 1,"numberNeg": -1,"booleanT": true,"booleanGF": false,"nullvalue": null,"object": {"1": 1,"2": 2},"array": [1, 2, 3]}');
INSERT INTO jsontable VALUES(JSON('{"id": 4}'));
 
SELECT  * FROM jsontable;
Copy
결과

COL1

{“id”:1,”content”:”json content”}

{“stringdata”:”this is a text”,”number”:1,”numberNeg”:-1,”booleanT”:true,”booleanGF”:false,”nullvalue”:null,”object”:{“1”:1,”2”:2},”array”:[1,2,3]}

{“id”:4}

Snowflake
CREATE OR REPLACE TABLE jsontable (
	json_column VARIANT
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;

INSERT INTO jsontable
VALUES('{"id": 1, "content":"json content"}');

INSERT INTO jsontable
VALUES('{"stringdata": "this is a text","number": 1,"numberNeg": -1,"booleanT": true,"booleanGF": false,"nullvalue": null,"object": {"1": 1,"2": 2},"array": [1, 2, 3]}');

INSERT INTO jsontable
VALUES(JSON('{"id": 4}') !!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'JSON' NODE ***/!!!);

SELECT  * FROM
	jsontable;
Copy

경고

JSON 데이터 삽입이 올바르게 처리되지 않습니다. 해결 방법은 권장 사항 섹션을 확인하세요.

Known Issues

1. JSON 데이터 삽입

SnowConvert 에서 JSON 데이터 타입이 올바르게 처리되지 않습니다.

2. JSON 오브젝트 조작

JSON 오브젝트(열, 변수 또는 매개 변수)의 사용법이 SnowConvert AI에 의해 올바르게 변환되지 않습니다. 해결 방법은 권장 사항 섹션을 확인하세요.

권장 사항

1. JSON Data Type translation workaround

JSON 데이터 타입은 _VARIANT_로 변환되므로 Snowflake PARSE_JSON 함수를 사용하여 정보를 형식화할 수 있습니다. 이 접근법을 사용하면 Oracle과 유사한 구문을 사용하여 Snowflake에서 JSON 데이터를 저장, 쿼리 및 작업할 수 있습니다.

Oracle
CREATE TABLE jsontable (
	json_column JSON
);

INSERT INTO jsontable VALUES('{"id": 1, "content":"json content"}');
INSERT INTO jsontable VALUES('{"id": 2, "content": {"header": "header text one", "content": "content text one"}}');
INSERT INTO jsontable VALUES('{"id": 3, "content": {"header": "header tex two", "content": "content text two"}}');

SELECT * FROM jsontable;
SELECT 'ID: ' || jt.json_column.id, 'HEADER: ' || UPPER(jt.json_column.content.header) FROM jsontable jt;
Copy
결과 1

JSON_SERIALIZE(JSON_COLUMN)

{“id”:1,”content”:”json content”}

{“id”:2,”content”:{“header”:”header text one”,”content”:”content text one”}}

{“id”:3,”content”:{“header”:”header tex two”,”content”:”content text two”}}

결과 2

‘ID:’ JT.JSON_COLUMN.ID

‘HEADER:’ UPPER(JT.JSON_COLUMN.CONTENT.HEADER)

ID: 1

HEADER:

ID: 2

HEADER: “HEADER TEXT ONE”

ID: 3

HEADER: “HEADER TEX TWO”

Snowflake
CREATE OR REPLACE TABLE jsontable (
	json_column VARIANT
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;

INSERT INTO jsontable
VALUES('{"id": 1, "content":"json content"}');

INSERT INTO jsontable
VALUES('{"id": 2, "content": {"header": "header text one", "content": "content text one"}}');

INSERT INTO jsontable
VALUES('{"id": 3, "content": {"header": "header tex two", "content": "content text two"}}');

SELECT * FROM
	jsontable;

SELECT 'ID: ' || NVL(jt.json_column.id :: STRING, ''), 'HEADER: ' || NVL(UPPER(jt.json_column.content.header) :: STRING, '') FROM
	jsontable jt;
Copy
결과 1

JSON_COLUMN

{ “content”: “json content”, “id”: 1}

{ “content”: { “content”: “content text one”, “header”: “header text one” }, “id”: 2}

{ “content”: { “content”: “content text two”, “header”: “header tex two” }, “id”: 3}

결과 2

‘ID: ‘ JT.JSON_COLUMN:ID

‘HEADER: ‘ UPPER(JT.JSON_COLUMN:CONTENT:HEADER)

ID: 1

ID: 2

HEADER: HEADER TEXT ONE

ID: 3

HEADER: HEADER TEX TWO

참고

PARSE_JSON 함수를 사용하려면 VALUES 절 대신 _SELECT_를 INSERT INTO 인자로 사용해야 합니다.

참고

‘.’ 연산자 대신 ‘:’를 사용하여 JSON 오브젝트 속성에 액세스합니다. 두 엔진 모두에서 여러 수준의 중첩을 허용합니다.

관련 EWIs

  1. SSC-EWI-0073: 기능적 동등성 검토 보류 중

LONG 데이터 타입

LONG 열은 최대 2기가바이트 -1 또는 231-1 바이트의 가변 길이 문자 문자열을 저장합니다. LONG 열은 VARCHAR2 열의 많은 특성을 가지고 있습니다. LONG 열을 사용하여 긴 텍스트 문자열을 저장할 수 있습니다. LONG 값의 길이는 컴퓨터에서 사용 가능한 메모리에 의해 제한될 수 있습니다. (Oracle SQL Language Reference long 데이터 타입)

LONG
Copy

샘플 소스 패턴

Create Table의 long

Oracle
CREATE TABLE long_table
( 
     id 	  NUMBER,
     long_column  LONG
);
     
 INSERT INTO long_table VALUES (1, 'this is a text');
Copy
Snowflake
CREATE OR REPLACE TABLE long_table
 (
      id NUMBER(38, 18) /*** SSC-FDM-0006 - NUMBER TYPE COLUMN MAY NOT BEHAVE SIMILARLY IN SNOWFLAKE. ***/,
      long_column VARCHAR
 )
 COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
 ;

 INSERT INTO long_table
 VALUES (1, 'this is a text');
Copy

긴 열에서 데이터 검색하기

Oracle
SELECT long_column FROM long_table;
Copy
결과

LONG_COLUMN

텍스트입니다

Snowflake
SELECT long_column FROM
long_table;
Copy
결과

LONG_COLUMN

텍스트입니다

Known Issues

1. The max length of long (Oracle) and varchar (Snowflake) are different

Oracle 설명서 에 따르면, long 열은 최대 2기가바이트의 데이터를 저장할 수 있지만, Snowflake varchar 는 16Mb로 제한됩니다.

2. Cast of Long column

긴 데이터 타입은 CLOB 데이터 타입으로만 형 변환할 수 있고, 이를 달성하는 유일한 방법은 TO_LOB 함수를 사용하는 것이며, 이 함수는 INSERT 문에서 하위 쿼리의 선택 목록에 사용되는 경우에만 작동합니다. 다음 샘플을 고려하십시오

Oracle
CREATE TABLE target_table (col CLOB);

INSERT INTO target_table (SELECT TO_LOB(long_column) FROM long_table);
Copy

경고

대상 테이블 열 데이터 타입이 CLOB 와 다른 경우 데이터를 삽입하려고 할 때 Oracle에서 null 값을 삽입하거나 오류를 표시할 수 있습니다.

관련 EWIs

  1. SSC-FDM-0006: 숫자 유형 열이 Snowflake에서 유사하게 동작하지 않을 수 있음

RAW 및 LONG RAW 데이터 타입

설명

RAWLONG RAW 데이터 타입은 서로 다른 시스템 간에 데이터를 이동할 때 Oracle 데이터베이스에서 명시적으로 변환하지 않는 데이터를 저장합니다. 이러한 데이터 타입은 이진 데이터 또는 바이트 문자열을 위한 것입니다. (Oracle SQL Language Reference 행 및 Long 원시 데이터 타입)

{ LONG RAW | RAW (size) }
Copy

샘플 소스 패턴

Create Table의 원시 및 Long 원시

Oracle
CREATE TABLE raw_table
(    
     id INTEGER,
     raw_column RAW(2000),
     long_raw_column LONG RAW
);
  
INSERT  INTO raw_table values(1, 'FF00FF00FF', 'FF00FF00FFAABAABABABABA917843210984237123ABABABABAABBAAABBACDFFD');
INSERT  INTO raw_table values(2, 'AAAAAAAAAA', 'ABABABABABABABABABABABABABABABAbABAbABAABABAAABABABABABABABABABABA');
--Insert with largest string posible (2000 HEX characters) 
INSERT INTO raw_table VALUES (3, 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA')
Copy
Snowflake CREATE OR REPLACE TABLE raw_table
CREATE OR REPLACE TABLE raw_table
     (
          id INTEGER,
          raw_column BINARY,
          long_raw_column BINARY
     )
     COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
     ;

     INSERT  INTO raw_table
     values(1, 'FF00FF00FF', 'FF00FF00FFAABAABABABABA917843210984237123ABABABABAABBAAABBACDFFD');

     INSERT  INTO raw_table
     values(2, 'AAAAAAAAAA', 'ABABABABABABABABABABABABABABABAbABAbABAABABAAABABABABABABABABABABA');

     --Insert with largest string posible (2000 HEX characters) 
INSERT INTO raw_table
     VALUES (3, 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA');
Copy

원시 및 Long 원시 열에서 데이터 검색하기

Oracle
SELECT * FROM raw_table ORDER BY id;
Copy
결과

ID

RAW_COLUMN

LONG_RAW_COLUMN

1

ªº««««© 2 B7 :ºººº«ºª»¬ßý

2

ªªªªª

«««««««««««««««««««ªººªºººººººººº

3

ªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªª

ªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªª

Snowflake
SELECT * FROM
raw_table
ORDER BY id;
Copy
결과

ID

RAW_COLUMN

LONG_RAW_COLUMN

1

ªº««««© 2 B7 :ºººº«ºª»¬ßý

2

ªªªªª

«««««««««««««««««««ªººªºººººººººº

3

ªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªª

ªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªª

Known Issues

문제가 발견되지 않았습니다.

관련 EWIs

관련 EWIs 없음.

숫자 데이터 타입

설명

Oracle 데이터베이스 숫자 데이터 타입은 “숫자가 아님” 또는 NAN 연산의 정의되지 않은 결과인 양수와 음수 고정 및 부동 소수점 숫자, 0, 무한대, 값을 저장합니다.(Oracle 언어 참조 숫자 데이터 타입)

산술 작업에 대한 참고 사항

숫자 데이터 타입에 대해 수행되는 모든 작업은 내부적으로 숫자로 저장됩니다. 또한, 수행된 작업에 따라 Snowflake 내에 중간 값이 저장되는 방식과 관련된 오류가 발생할 수 있습니다. 자세한 내용은 Snowflake의 중간 숫자에 대한 Snowflake 게시물을 참조하세요.

FLOAT 데이터 타입

설명

FLOAT 데이터 타입은 NUMBER 의 하위 유형입니다. 전체 자릿수를 포함하거나 포함하지 않고 지정할 수 있으며, NUMBER 의 정의와 동일하고 1~126 사이에서 지정할 수 있습니다. 스케일은 지정할 수 없으며 데이터에서 해석됩니다. (Oracle Language Reference 부동 소수점 데이터 타입)

경고

Notes on arithmetic operations

숫자 데이터 타입에서 수행되는 모든 작업은 내부적으로 숫자로 저장된다는 점에 유의하십시오. 또한, 수행되는 작업에 따라 중간값이 저장되는 방식과 관련된 오류가 발생할 수 있으며, 자세한 내용은 Snowflake의 중간값에 대한 게시글 을 참조하십시오.

샘플 소스 패턴

아래 예제에서 다음 테이블과 삽입 내용을 참조하십시오.

Create Table의 부동 소수점 데이터 타입

Oracle
CREATE TABLE float_data_type_table(
col1 FLOAT,
col2 FLOAT(5),
col3 FLOAT(126)
);

INSERT INTO float_data_type_table (col1) VALUES (100.55555);
INSERT INTO float_data_type_table (col1) VALUES (1.9);
INSERT INTO float_data_type_table (col2) VALUES (1.23);
INSERT INTO float_data_type_table (col2) VALUES (7.89);
INSERT INTO float_data_type_table (col2) VALUES (12.79);
INSERT INTO float_data_type_table (col2) VALUES (123.45);
INSERT INTO float_data_type_table (col3) VALUES (1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111.99999999999999999999555555);
Copy
Snowflake
CREATE OR REPLACE TABLE float_data_type_table (
col1 FLOAT,
col2 FLOAT(5),
col3 FLOAT(126)
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;

INSERT INTO float_data_type_table(col1) VALUES (100.55555);

INSERT INTO float_data_type_table(col1) VALUES (1.9);

INSERT INTO float_data_type_table(col2) VALUES (1.23);

INSERT INTO float_data_type_table(col2) VALUES (7.89);

INSERT INTO float_data_type_table(col2) VALUES (12.79);

INSERT INTO float_data_type_table(col2) VALUES (123.45);

INSERT INTO float_data_type_table(col3) VALUES (1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111.99999999999999999999555555);
Copy

FLOAT

전체 자릿수가 없는 FLOAT 데이터 타입의 경우 Oracle과 Snowflake 간에 차이가 없습니다.

Oracle
SELECT col1 FROM float_data_type_table;
Copy
결과

col1

100.55555

1.9

Snowflake
SELECT col1 FROM
float_data_type_table;
Copy
결과

col1

100.55555

1.9

FLOAT ( p )

FLOAT 데이터 타입에 (p) 전체 자릿수가 지정되면 쿼리 결과가 동일하지 않을 수 있습니다. 작은 반올림 차이가 있습니다.

Oracle
SELECT col2 FROM float_data_type_table;

SELECT col3 FROM float_data_type_table;
Copy
결과

col2

1.2

7.9

13

120

col3

—————————————————————————————————-

1111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000

Snowflake
SELECT col2 FROM
float_data_type_table;

SELECT col3 FROM
float_data_type_table;
Copy
결과

col2

1.23

7.89

12.79

123.45

col3

—————————————————————————————————-

1111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000

Known Issues

1. FLOAT data type with precision

FLOAT 데이터 타입에 전체 자릿수가 있는 경우 쿼리 결과에 작은 반올림 차이가 있을 수 있습니다.

관련 EWIs

관련 EWIs 없음.

NUMBER 데이터 타입

설명

NUMBER 데이터 타입은 1.0 x 10-130에서 1.0 x 10126을 제외한 절대값을 가진 양수 및 음수의 고정 숫자와 0을 저장합니다. 값이 1.0 x 10126 이상의 절대값을 갖는 산술 식을 지정하면 Oracle은 오류를 반환합니다. 각 NUMBER 값은 1에서 22바이트까지 필요합니다. (Oracle Language Reference 숫자 데이터 타입).

NUMBER 데이터 타입은 다음 형식을 사용하여 지정할 수 있습니다. NUMBER(p, s) (두 매개 변수는 모두 선택 사항) 여기서:

  • p전체 자릿수 또는 소수 자릿수의 최대값이며, 여기서 가장 큰 자릿수는 가장 왼쪽의 0이 아닌 자릿수이고 가장 작은 자릿수는 가장 오른쪽에 있는 자릿수입니다. 전체 자릿수 범위는 0~38입니다.

  • s스케일 또는 소수점 이하 자릿수입니다. 스케일 범위는 -84에서 127까지입니다.

Oracle에서 전체 자릿수를 지정하지 않으면(NUMBER 또는 NUMBER(*) 사용) 열이 ‘정의되지 않은 전체 자릿수’로 생성됩니다. 즉, Oracle은 값을 동적으로 저장하여 해당 열 내에 모든 숫자를 저장할 수 있습니다. Snowflake는 이 기능을 지원하지 않으므로 가장 다양한 숫자를 저장할 수 있는 NUMBER(38, 18)로 변경됩니다.

경고

Notes on arithmetic operations

숫자 데이터 타입에 대해 수행되는 모든 작업은 내부적으로 숫자로 저장됩니다. 또한, 수행된 작업에 따라 Snowflake 내에 중간 값이 저장되는 방식과 관련된 오류가 발생할 수 있습니다. 자세한 내용은 Snowflake의 중간 숫자에 대한 Snowflake 게시물에서 해당 게시물을 확인하거나 함수 동등성 메시지 SSC-FDM-0006을 확인하세요.

샘플 소스 패턴

아래 예제에서 다음 테이블과 삽입 내용을 참조하십시오.

Create Table의 데이터 타입 번호 매기기

Oracle
CREATE TABLE number_data_type_table
(
col1 NUMBER,
col2 NUMBER(1),
col3 NUMBER(10, 5),
col4 NUMBER(5, -2),
col5 NUMBER(4, 5)
);

INSERT INTO number_data_type_table(COL1) VALUES(100);
INSERT INTO number_data_type_table(COL2) VALUES(1.99999);
INSERT INTO number_data_type_table(COL3) VALUES(12345.12345);
INSERT INTO number_data_type_table(COL4) VALUES(16430.55555);
INSERT INTO number_data_type_table (COL4) VALUES(17550.55555);
INSERT INTO number_data_type_table(COL5) VALUES(0.00009);
INSERT INTO number_data_type_table(COL5) VALUES(0.000021);
INSERT INTO number_data_type_table(COL5) VALUES(0.012678912);
Copy
Snowflake
CREATE OR REPLACE TABLE number_data_type_table
(
col1 NUMBER(38, 18) /*** SSC-FDM-0006 - NUMBER TYPE COLUMN MAY NOT BEHAVE SIMILARLY IN SNOWFLAKE. ***/,
col2 NUMBER(1) /*** SSC-FDM-0006 - NUMBER TYPE COLUMN MAY NOT BEHAVE SIMILARLY IN SNOWFLAKE. ***/,
col3 NUMBER(10, 5) /*** SSC-FDM-0006 - NUMBER TYPE COLUMN MAY NOT BEHAVE SIMILARLY IN SNOWFLAKE. ***/,
col4 NUMBER(5) !!!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. ***/,
col5 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 number_data_type_table(COL1) VALUES(100);

INSERT INTO number_data_type_table(COL2) VALUES(1.99999);

INSERT INTO number_data_type_table(COL3) VALUES(12345.12345);

INSERT INTO number_data_type_table(COL4) VALUES(16430.55555);

INSERT INTO number_data_type_table(COL4) VALUES(17550.55555);

INSERT INTO number_data_type_table(COL5) VALUES(0.00009);

INSERT INTO number_data_type_table(COL5) VALUES(0.000021);

INSERT INTO number_data_type_table(COL5) VALUES(0.012678912);
Copy

NUMBER (기본 케이스)

전체 자릿수와 스케일이 지정되지 않은 경우 기본값은 사용 가능한 최대 NUMBER(38, 127) 입니다. 기본 케이스의 현재 변환은 NUMBER(38,19) 입니다.

경고

Oracle에서는 전체 자릿수나 스케일을 정의하지 않으면 기본값이 “정의되지 않은 전체 자릿수 및 스케일”로 설정됩니다. 입력값을 ‘받은 대로’ 저장하는 방식으로 작동하므로 정수와 부동 소수점 숫자를 모두 처리할 수 있습니다. 38, 18 을 사용하여 정수에 20을 사용하고 부동 소수점 자릿수에 18을 남겨서 두 가지를 모두 처리하려고 시도합니다.

Oracle
SELECT col1 FROM number_data_type_table;
Copy
결과

col1

100

Snowflake
SELECT col1 FROM
number_data_type_table;
Copy
결과

col1

100.0000000000000000000

NUMBER ( p )

이 경우 전체 자릿수는 소수점 왼쪽에 숫자가 가질 수 있는 자릿수를 지정합니다.

Oracle
SELECT col2 FROM number_data_type_table;
Copy
결과

col2

2

Snowflake
SELECT col2 FROM
number_data_type_table;
Copy
결과

col2

2

NUMBER ( p, s ) p > s

sp 보다 낮은 경우 전체 자릿수는 숫자가 가질 수 있는 자릿수를 지정합니다. 스케일은 소수점 오른쪽의 유효 자릿수를 지정하므로 소수점 왼쪽의 자릿수는 지정된 스케일에 따라 달라집니다.

Oracle
SELECT col3 FROM number_data_type_table;
Copy
결과

col3

12345.12345

Snowflake
SELECT col3 FROM
number_data_type_table;
Copy
결과

col3

12345.12345

NUMBER ( p, -s )

음수 스케일은 소수점 왼쪽의 소수 자릿수에서 가장 작은 자릿수를 제외한 나머지 자릿수입니다. 음수 스케일의 경우 실제 데이터가 소수점 왼쪽에서 지정된 소수점 이하 자리 수로 반올림되므로 소수점 이하 자릿수가 소수점 왼쪽에 있습니다. 현재 변환은 음수 스케일을 제거하는 것입니다.

Oracle
SELECT col4 FROM number_data_type_table;
Copy
결과

col4

16400

17600

Snowflake
SELECT col4 FROM
number_data_type_table;
Copy
결과

col4

16431

17551

NUMBER ( p, s ) s > p

스케일이 전체 자릿수보다 큰 경우 다음 측면을 고려하십시오.

  • 삽입할 숫자의 소수점 왼쪽에는 소수 자릿수가 있을 수 없습니다. 0만 사용할 수 있습니다.

  • 소수점 오른쪽의 첫 번째 자릿수는 0이어야 합니다.

  • 전체 자릿수는 소수점 오른쪽에 있는 최대 유효 자릿수를 지정합니다.

Oracle
SELECT col5 FROM number_data_type_table;
Copy
결과

col5

0.00009

0.00002

0.01268

Snowflake
SELECT col5 FROM
number_data_type_table;
Copy
결과

col5

0.00009

0.00002

0.01268

Known Issues

1. Scale value exceeds the maximum allowed by Snowflake

Snowflake에서 허용되는 최대값(37)보다 큰 소수 자릿수를 지정하면 18로 변경됩니다. 이에 대한 자세한 내용을 보려면 SSC-FDM-0006 설명서를 참조하세요.

2. Negative scale

Snowflake는 음수 소수 자릿수를 허용하지 않으므로 제거 중입니다. 이로 인해 기능적 불일치가 발생할 수 있습니다. 이 문제에 대한 자세한 내용을 보려면 SSC-EWI-0R0092 설명서를 참조하세요.

권장 사항

1. UDF for NUMBER datatype Operations

산술 연산 작업을 수행할 때 다음 UDF 를 사용하여 이러한 작업을 수동으로 마이그레이션하면 언급된 문제가 발생하지 않습니다.

UDF
CREATE OR REPLACE FUNCTION fixed_divide(a NUMBER(38,19), b NUMBER(38,19))
RETURNS NUMBER(38,19)
LANGUAGE JAVA
CALLED ON NULL INPUT
HANDLER='TestFunc.divide'
AS
'
import java.math.BigDecimal;
import java.math.RoundingMode;
class TestFunc {
public static BigDecimal divide(BigDecimal a, BigDecimal b) {
return a.divide(b,RoundingMode.HALF_UP);
}
}';
Copy

관련 EWIs

  1. SSC-EWI-OR0092 숫자 데이터 타입 음수 소수 자릿수가 출력에서 제거되었습니다.

  2. SSC-FDM-0006: 숫자 유형 열이 Snowflake에서 유사하게 동작하지 않을 수 있음

  3. SSC-FDM-OR0010 숫자 데이터 타입의 전체 자릿수가 상대적으로 적어 소수 자릿수와 일치하도록 증가시켜습니다.

부동 소수점 숫자

설명

부동 소수점 숫자는 첫 번째 자릿수부터 마지막 자릿수까지에서 임의의 위치에 소수점이 있을 수도 있고, 없을 수도 있습니다. 범위를 늘리기 위해 숫자 다음에 지수를 선택적으로 사용할 수 있습니다(예: 1.777 e-20). 소수점 뒤에 나타날 수 있는 자릿수가 제한되지 않으므로 소수 자릿수 값은 부동 소수점 숫자에 맞출 수 없습니다. 이진 부동 소수점 숫자는 이진 전체 자릿수(자릿수 0 및 1)를 사용하여 저장됩니다(Oracle 언어 참조 부동 소수점 숫자).

BINARY_DOUBLE

설명

BINARY_DOUBLE 은 64비트의 배정밀도 부동 소수점 숫자 데이터 타입입니다. 각 BINARY_DOUBLE 값에는 8바이트가 필요합니다. BINARY_DOUBLE 열에서 부동 소수점 숫자는 이진 전체 자릿수를 갖습니다. 이진 부동 소수점 숫자는 특수 값 무한대 및 NaN (숫자가 아님)를 지원합니다. (Oracle Language Reference 이진_더블 데이터 타입)

다음 제한 내에서 부동소수점 숫자를 지정할 수 있습니다.

  • 최대 양의 유한값 = 1.79769313486231E+308

  • 최소 양의 유한값 = 2.22507485850720E-308

샘플 소스 패턴

아래 예제에서 다음 테이블과 삽입 내용을 참고하십시오.

Create Table의 이진 더블

Oracle
CREATE TABLE binary_double_data_type_table
(
COL1 BINARY_DOUBLE
);

INSERT INTO binary_double_data_type_table VALUES(2.22507485850720E-308D);
INSERT INTO binary_double_data_type_table VALUES(1.79769313486231E+308D);
INSERT INTO binary_double_data_type_table VALUES('NaN');
Copy
Snowflake
CREATE OR REPLACE TABLE binary_double_data_type_table
(
COL1 FLOAT
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;

INSERT INTO binary_double_data_type_table
VALUES(2.22507485850720E-308);

INSERT INTO binary_double_data_type_table
VALUES(1.79769313486231E+308);

INSERT INTO binary_double_data_type_table
VALUES('NaN');
Copy

참고

‘NaN’ 은 _ Not a Number _를 의미하며, 이 값은 Oracle의 BINARY_DOUBLE 데이터 타입과 Snowflake의 FLOAT 데이터 타입에서 허용됩니다.

BINARY_DOUBLE -> FLOAT

BINARY_DOUBLE 데이터 타입은 Snowflake에서 지원되지 않으므로 FLOAT 로 변환하는 중입니다.

Oracle
SELECT * FROM binary_double_data_type_table;
Copy
결과

col1

0

179769313486231000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

NaN

Snowflake
SELECT * FROM
binary_double_data_type_table;
Copy
결과

col1

0

179769313486231000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

NaN

Known Issues

1. The BINARY_DOUBLE data type is not supported by Snowflake

BINARY_DOUBLE 데이터 타입은 Snowflake에서 지원되지 않으므로 FLOAT 로 변환됩니다.

관련 EWIs

관련 EWIs 없음.

BINARY_FLOAT

설명

BINARY_FLOAT 는 32비트의 단정밀도 부동 소수점 숫자 데이터 타입입니다. 각 BINARY_FLOAT 값에는 4바이트가 필요합니다. BINARY_FLOAT 열에서 부동 소수점 숫자는 이진 전체 자릿수를 갖습니다. 이진 부동 소수점 숫자는 특수 값 무한대 및 NaN (숫자 아님)를 지원합니다. (Oracle Language Reference 이진_부동 소수점 데이터 타입)

다음 제한 내에서 부동소수점 숫자를 지정할 수 있습니다.

  • 최대 양의 유한값 = 3.40282E+38F

  • 최소 양의 유한값 = 1.17549E-38F

샘플 소스 패턴

아래 예제에서 다음 테이블과 삽입 내용을 참고하십시오.

Create Table의 이진 부동 소수점

Oracle
CREATE TABLE binary_float_data_type_table
(
col1 BINARY_FLOAT
);

INSERT INTO binary_float_data_type_table VALUES(1.17549E-38F);
INSERT INTO binary_float_data_type_table VALUES(3.40282E+38F);
INSERT INTO binary_float_data_type_table VALUES('NaN');
Copy
Snowflake
CREATE OR REPLACE TABLE binary_float_data_type_table
(
col1 FLOAT
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;

INSERT INTO binary_float_data_type_table
VALUES(1.17549E-38);

INSERT INTO binary_float_data_type_table
VALUES(3.40282E+38);

INSERT INTO binary_float_data_type_table
VALUES('NaN');
Copy

참고

‘NaN’ 은 _ Not a Number _를 의미하며, 이 값은 Oracle의 BINARY_FLOAT 데이터 타입과 Snowflake의 FLOAT 데이터 타입에서 허용됩니다.

BINARY_FLOAT -> FLOAT

BINARY_FLOAT 데이터 타입은 Snowflake에서 지원되지 않으므로 FLOAT 로 변환하는 중입니다.

Oracle
SELECT * FROM binary_float_data_type_table;
Copy
결과

col1

0

340282001837565600000000000000000000000

NaN

Snowflake
SELECT * FROM binary_float_data_type_table;
Copy
결과

col1

0

340282000000000000000000000000000000000

NaN

Known Issues

1. The BINARY_FLOAT data type is not supported by Snowflake

BINARY_FLOAT 데이터 타입은 Snowflake에서 지원되지 않으므로 FLOAT 로 변환됩니다.

관련 EWIs

관련 EWIs 없음.

날짜/시간 및 간격 데이터 타입

날짜/시간 데이터 타입은 DATE, TIMESTAMP, TIMESTAMP WITH TIME ZONE, TIMESTAMP WITH LOCAL TIME ZONE입니다. 날짜/시간 데이터 타입의 값을 날짜/시간이라고도 합니다. 간격 데이터 타입은 INTERVAL YEAR TO MONTH, INTERVAL DAY TO SECOND입니다. 간격 데이터 타입의 값을 간격이라고도 합니다(Oracle SQL 언어 참조 날짜/시간 및 간격 데이터 타입).

DATE 데이터 타입

설명

Oracle의 날짜 데이터 타입은 날짜와 시간 정보를 모두 저장하지만, Snowflake의 날짜 데이터 타입은 날짜 정보만 저장합니다. (Oracle SQL Language Reference 날짜 데이터 타입)

Oracle DATE의 기본 변환은 Snowflake TIMESTAMP로의 변환입니다. DATE 타입을 TIMESTAMP로 변환하기 위해 disableDateAsTimestamp 플래그(SnowConvert AI 명령줄 인터페이스)를 추가하거나 날짜를 타임스탬프로 변환 설정(SnowConvert AI 데스크톱 애플리케이션)을 비활성화할 수 있습니다. Snowflake DATE는 날짜 정보만 저장하고 Oracle은 날짜 및 시간 정보를 저장하므로, 정보 손실을 방지하려면 DATETIMESTAMP로 변환해야 합니다.

참고

중요한 반올림 동작 차이점: 날짜/타임스탬프 데이터 타입과 초가 포함된 간격 사이에서 연산을 수행할 때, Oracle은 초를 반올림하지 않고 지정된 대로 전체 자릿수를 유지하는 반면, Snowflake는 초를 가장 가까운 정수 초로 반올림합니다. 반올림 동작의 이러한 차이로 인해 다른 결과가 발생할 수 있습니다.

샘플 소스 패턴

Create Table의 날짜

Oracle
CREATE TABLE date_table
(
	date_col date
);

INSERT INTO date_table(date_col) VALUES (DATE '2010-10-10');
Copy
–disableDateAsTimestamp 플래그가 없거나 “날짜를 타임스탬프로 변환” 설정이 활성화된 Snowflake
CREATE OR REPLACE TABLE date_table
	(
		date_col 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"}}'
	;

	INSERT INTO date_table(date_col) VALUES (DATE '2010-10-10');
Copy
–disableDateAsTimestamp 플래그가 있거나 “날짜를 타임스탬프로 변환” 설정이 비활성화된 Snowflake
CREATE OR REPLACE TABLE date_table
	(
		date_col date
	)
	COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
	;

	INSERT INTO date_table(date_col) VALUES (DATE '2010-10-10');
Copy

날짜 열에서 데이터 검색하기

Oracle
SELECT date_col FROM date_table;
Copy
결과

DATE_COL

2010-10-10 00:00:00.000

Snowflake
SELECT date_col FROM
date_table;
Copy
결과

DATE_COL

2010-10-10 00:00:00.000

disableDateAsTimestamp 플래그를 사용한 결과

DATE_COL

2010-10-10

Known Issues

1. Input and output format may differ between languages

Snowflake에서 _ DATE_ 입력 및 출력 형식은 _ DATE_INPUT_FORMAT_ 및 _ DATE_OUTPUT_FORMAT_ 세션 변수에 따라 달라집니다. DATE_INPUT_FORMAT 에서 날짜를 텍스트로 추가할 때 사용자가 특정 형식을 사용하도록 강제하기 때문에 삽입이 실패할 수 있습니다. 다음 구문을 사용하여 이러한 변수를 수정할 수 있습니다.

ALTER SESSION SET DATE_INPUT_FORMAT = 'YYYY-DD-MM' DATE_OUTPUT_FORMAT = 'DD-MM-YYYY';
Copy

관련 EWIs

  1. SSC-FDM-OR0042: 타임스탬프로 변환된 날짜 유형의 동작이 다름

INTERVAL DAY TO SECOND 데이터 타입

설명

INTERVAL DAY TO SECOND 는 기간을 일, 시간, 분, 초 단위로 저장합니다. (Oracle SQL Language Reference INTERVAL DAY TO SECOND 데이터 타입)

이 데이터 타입에 해당하는 데이터 타입은 Snowflake에 없으며, 현재 VARCHAR 로 변환됩니다.

INTERVAL DAY [(day_precision)] TO SECOND [(fractional_seconds_precision)]
Copy

샘플 소스 패턴

Create Table에서 일에서 초 사이의 간격

Oracle
CREATE TABLE interval_day_to_second_table
(
	interval_day_col1 interval day to second,
	interval_day_col2 interval day(1) to second(4)
);

INSERT INTO interval_day_to_second_table(interval_day_col1) VALUES ( INTERVAL '1 2:3:4.56' DAY TO SECOND ); 
INSERT INTO interval_day_to_second_table(interval_day_col2) VALUES ( INTERVAL '1 2:3:4.56' DAY(1) TO SECOND(4) );
Copy
Snowflake
CREATE OR REPLACE TABLE interval_day_to_second_table
	(
		interval_day_col1 VARCHAR(20) !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - INTERVAL day to second DATA TYPE CONVERTED TO VARCHAR ***/!!!,
		interval_day_col2 VARCHAR(20) !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - INTERVAL day(1) to second(4) DATA TYPE CONVERTED TO VARCHAR ***/!!!
	)
	COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
	;

	INSERT INTO interval_day_to_second_table(interval_day_col1) VALUES ('1d, 2h, 3m, 4s, 56ms');

	INSERT INTO interval_day_to_second_table(interval_day_col2) VALUES ('1d, 2h, 3m, 4s, 56ms');
Copy

간격 값은 지원되는 Snowflake 형식으로 변환된 다음 열 내부에 텍스트로 삽입됩니다. Snowflake는 Interval 을 데이터 타입으로 지원하지 않으므로 산술 작업에서만 지원됩니다. 이 값을 사용하려면 값을 추출하여 간격 상수 로 사용해야 합니다(가능한 경우).

원본 Oracle 값: INTERVAL '1 2:3:4.567' DAY TO SECOND

Snowflake 열에 저장된 값: '1d, 2h, 3m, 4s, 567ms'

Snowflake 간격 상수 값: INTERVAL '1d, 2h, 3m, 4s, 567ms'

간격 일에서 두 번째 열로 데이터 검색하기

Oracle
SELECT * FROM interval_day_to_second_table;
Copy
결과

INTERVAL_DAY_COL1

INTERVAL_DAY_COL2

1 2:3:4.567

1 2:3:4.567

Snowflake
SELECT * FROM
interval_day_to_second_table;
Copy
결과

INTERVAL_DAY_COL1

INTERVAL_DAY_COL2

1일, 2시간, 3분, 4초, 56밀리초

1일, 2시간, 3분, 4초, 56밀리초

Known Issues

1. Only arithmetic operations are supported

Snowflake 간격에는 몇 가지 제한 사항이 있습니다. DATE 또는 TIMESTAMPInterval Constants 간의 산술 연산만 지원되며, 다른 모든 시나리오는 지원되지 않습니다.

관련 EWIs

  1. SSC-EWI-0036: 다른 데이터 타입으로 변환된 데이터 타입입니다.

INTERVAL YEAR TO MONTH 데이터 타입

설명

INTERVAL YEAR TO MONTH 는 YEAR 및 MONTH 날짜/시간 필드를 사용하여 기간을 저장합니다. Snowflake에는 이에 상응하는 타입이 없으므로 Varchar로 변환됩니다. (Oracle SQL Language Reference INTERVAL YEAR TO MONTH 데이터 타입)

이 데이터 타입에 해당하는 데이터 타입은 Snowflake에 없으며, 현재 VARCHAR 로 변환됩니다.

INTERVAL YEAR [(year_precision)] TO MONTH
Copy

샘플 소스 패턴

Create Table의 연도 간 월 간 간격

Oracle
CREATE TABLE interval_year_to_month_table
(
	interval_year_col1 interval year to month,
	interval_year_col2 interval year(4) to month
);

INSERT INTO interval_year_to_month_table(interval_year_col1) VALUES ( INTERVAL '1-2' YEAR TO MONTH ); 
INSERT INTO interval_year_to_month_table(interval_year_col2) VALUES ( INTERVAL '1000-11' YEAR(4) TO MONTH );
Copy
Snowflake
CREATE OR REPLACE TABLE interval_year_to_month_table
	(
		interval_year_col1 VARCHAR(20) !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - INTERVAL year to month DATA TYPE CONVERTED TO VARCHAR ***/!!!,
		interval_year_col2 VARCHAR(20) !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - INTERVAL year(4) to month DATA TYPE CONVERTED TO VARCHAR ***/!!!
	)
	COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
	;

	INSERT INTO interval_year_to_month_table(interval_year_col1) VALUES ('1y, 2mm');

	INSERT INTO interval_year_to_month_table(interval_year_col2) VALUES ('1000y, 11mm');
Copy

간격 값은 지원되는 Snowflake 형식으로 변환된 다음 열 내부에 텍스트로 삽입됩니다. Snowflake는 Interval 을 데이터 타입으로 지원하지 않으므로 산술 작업에서만 지원됩니다. 이 값을 사용하려면 값을 추출하여 간격 상수 로 사용해야 합니다(가능한 경우).

원본 Oracle 값: INTERVAL '1-2' YEAR TO MONTH

Snowflake 열에 저장된 값: '1y, 2m'

Snowflake 간격 상수 값: INTERVAL '1y, 2m'

연도 간에서 월 간 열에서 데이터 검색하기

Oracle
SELECT * FROM interval_year_to_month_table;
Copy
결과

INTERVAL_YEAR_COL1

INTERVAL_YEAR_COL2

1-2

1000-11

Snowflake
SELECT * FROM
interval_year_to_month_table;
Copy
결과

INTERVAL_YEAR_COL1

INTERVAL_YEAR_COL2

1년, 2분

              |1000y, 11m        |
Copy

Known Issues

1. Only arithmetic operations are supported

Snowflake 간격에는 몇 가지 제한 사항이 있습니다. DATE 또는 TIMESTAMPInterval Constants 간의 산술 연산만 지원되며, 다른 모든 시나리오는 지원되지 않습니다.

관련 EWIs

  • SSC-EWI-0036: 다른 데이터 타입으로 변환된 데이터 타입입니다.

TIMESTAMP 데이터 타입

설명

TIMESTAMP 데이터 타입은 DATE 데이터 타입의 확장입니다. DATE 데이터 타입의 연, 월, 일과 시, 분, 초 값을 저장합니다. (Oracle SQL Language Reference 타임스탬프 데이터 타입)

Oracle과 Snowflake TIMESTAMP 데이터 타입의 전체 자릿수 범위(0~9)는 같지만 기본값이 다릅니다. Oracle의 기본값은 6이고 Snowflake의 기본값은 9입니다.

그러나 삽입된 값이 설정된 전체 자릿수를 초과하는 경우 동작에 차이가 있습니다. Oracle은 초과하는 소수를 반올림하는 반면, Snowflake는 값을 자르기만 합니다.

TIMESTAMP [(fractional_seconds_precision)] 
Copy

샘플 소스 패턴

Create Table의 타임스탬프

Oracle
CREATE TABLE timestamp_table
(
	timestamp_col1 TIMESTAMP,
	timestamp_col2 TIMESTAMP(7)
);

INSERT INTO timestamp_table(timestamp_col1, timestamp_col2) VALUES (TIMESTAMP '2010-10-10 12:00:00', TIMESTAMP '2010-10-10 12:00:00');
Copy
Snowflake
CREATE OR REPLACE TABLE timestamp_table
	(
		timestamp_col1 TIMESTAMP(6),
		timestamp_col2 TIMESTAMP(7)
	)
	COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
	;

	INSERT INTO timestamp_table(timestamp_col1, timestamp_col2) VALUES (TIMESTAMP '2010-10-10 12:00:00', TIMESTAMP '2010-10-10 12:00:00');
Copy

타임스탬프 열에서 데이터 검색하기

Oracle
SELECT * FROM timestamp_table;
Copy
결과

TIMESTAMP_COL1

TIMESTAMP_COL2

2010-10-10 12:00:00.000

2010-10-10 12:00:00.000

Snowflake
SELECT * FROM
timestamp_table;
Copy
결과

TIMESTAMP_COL1

TIMESTAMP_COL2

2010-10-10 12:00:00.000

2010-10-10 12:00:00.000

Known Issues

문제가 발견되지 않았습니다.

관련 EWIs

관련 EWIs 없음.

TIMESTAMP WITH LOCAL TIME ZONE 데이터 타입

설명

데이터베이스에 저장된 데이터가 데이터베이스 타임존으로 정규화되고 타임존 정보가 열 데이터의 일부로 저장되지 않는다는 점에서 TIMESTAMP WITH TIME ZONE 과 다릅니다. (Oracle SQL Language Reference 로컬 시간 존이 포함된 타임스탬프 데이터 타입)

Snowflake의 해당 기능은 TIMESTAMP_LTZ 입니다.

자세한 내용은 TIMESTAMP 섹션을 참조하십시오.

TIMESTAMP [(fractional_seconds_precision)] WITH LOCAL TIME ZONE

Copy

샘플 소스 패턴

Create Table의 타임존이 포함된 타임스탬프

Oracle
CREATE TABLE timestamp_with_local_time_zone_table
(
	timestamp_col1 TIMESTAMP(5) WITH LOCAL TIME ZONE
);

INSERT INTO timestamp_with_local_time_zone_table(timestamp_col1) VALUES (TIMESTAMP '2010-10-10 12:00:00');
INSERT INTO timestamp_with_local_time_zone_table(timestamp_col1) VALUES (TIMESTAMP '2010-10-10 12:00:00 -08:00');
Copy
Snowflake
CREATE OR REPLACE TABLE timestamp_with_local_time_zone_table
	(
		timestamp_col1 TIMESTAMP_LTZ(5)
	)
	COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
	;

	INSERT INTO timestamp_with_local_time_zone_table(timestamp_col1) VALUES (TIMESTAMP '2010-10-10 12:00:00');

	INSERT INTO timestamp_with_local_time_zone_table(timestamp_col1) VALUES (TIMESTAMP '2010-10-10 12:00:00 -08:00');
Copy

현지 타임존 열이 있는 타임스탬프에서 데이터 검색하기

Oracle
SELECT * FROM timestamp_with_local_time_zone_table;
Copy
결과

TIMESTAMP_COL1

2010-10-10 18:00:00.000

2010-10-10 20:00:00.000

Snowflake
SELECT * FROM
timestamp_with_local_time_zone_table;
Copy
결과

TIMESTAMP_COL1

2010-10-10 12:00:00.000 -0700

2010-10-10 12:00:00.000 -0700

참고

각 데이터베이스가 다른 타임존으로 설정되어 있기 때문에 두 엔진에서 결과 세트가 다릅니다. Oracle 타임존은 ‘+00:00’이고 Snowflake 타임존은 ‘America/Los_Angeles’입니다.

데이터베이스의 기본 시간대를 변경하려면 다음 구문을 사용합니다.

ALTER account SET timezone = timezone_string;
Copy

Known Issues

1. Default database timezone

이러한 종류의 데이터 타입을 사용하는 작업은 데이터베이스 표준 시간대의 영향을 받으며 결과가 달라질 수 있습니다. 다음 쿼리를 사용하여 기본 타임존을 확인할 수 있습니다.

Oracle
SELECT dbtimezone FROM dual;
Copy
Snowflake
SELECT dbtimezone FROM dual;
Copy
2. Oracle Timestamp with local timezone behavior

현지 타임존 데이터 타입으로 타임스탬프를 작업할 때 Oracle은 타임스탬프를 데이터베이스의 기본 타임존로 변환합니다. Snowflake에서 이 동작을 에뮬레이션하려면 TIMESTAMP_TYPE_MAPPING 세션 매개 변수를 ‘TIMESTAMP_LTZ’로 설정해야 합니다.

ALTER SESSION SET TIMESTAMP_TYPE_MAPPING = 'TIMESTAMP_LTZ';
Copy
3. Timestamp formats may be different

Snow Convert는 날짜/타임스탬프 형식 문자열에 대한 변환 성능을 수행하지 않으므로 코드를 배포할 때 오류가 발생할 수 있습니다. 예:

Oracle
INSERT INTO timestamp_with_local_time_zone_table (timestamp_col1) VALUES (TIMESTAMP '2010-10-10 12:00:00 -8:00');
Copy
Snowflake
INSERT INTO timestamp_with_local_time_zone_table(timestamp_col1) VALUES (TIMESTAMP '2010-10-10 12:00:00 -8:00');
Copy

경고

기본 타임스탬프 입력 형식이’-8:00’을 유효한 UTC 오프셋으로 인식하지 못하기 때문에 Snowflake에서 쿼리가 실패합니다. 동일한 결과를 얻으려면 ‘0800’ 또는 ‘-08:00’으로 바꿔야 합니다.

관련 EWIs

관련 EWIs 없음.

TIMESTAMP WITH TIME ZONE 데이터 타입

설명

TIMESTAMP WITH TIME ZONE 은 값에 타임존 리전 이름 또는 타임존 오프셋이 포함된 TIMESTAMP 의 베리언트입니다. Snowflake의 해당 기능은 TIMESTAMP_TZ 입니다.(Oracle SQL Language Reference 타임존 데이터 타입 포함 타임스탬프)

Snowflake의 해당 기능은 TIMESTAMP_TZ 입니다.

자세한 내용은 TIMESTAMP 섹션을 참조하십시오.

TIMESTAMP [(fractional_seconds_precision)] WITH TIME ZONE

Copy

샘플 소스 패턴

Create Table의 타임존이 포함된 타임스탬프

Oracle
CREATE TABLE timestamp_with_time_zone_table
(
	timestamp_col1 TIMESTAMP(5) WITH TIME ZONE
);


INSERT INTO timestamp_with_time_zone_table(timestamp_col1) VALUES (TIMESTAMP '2010-10-10 12:00:00');
Copy
Snowflake
CREATE OR REPLACE TABLE timestamp_with_time_zone_table
	(
		timestamp_col1 TIMESTAMP_TZ(5)
	)
	COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
	;

	INSERT INTO timestamp_with_time_zone_table(timestamp_col1) VALUES (TIMESTAMP '2010-10-10 12:00:00');
Copy

타임스탬프가 있는 타임존 열에서 데이터 검색하기

Oracle
SELECT * FROM timestamp_with_time_zone_table;
Copy
결과

TIMESTAMP_COL1

2010-10-10 12:00:00.000 -0600

Snowflake
SELECT * FROM
timestamp_with_time_zone_table;
Copy
결과

TIMESTAMP_COL1

2010-10-10 12:00:00.000 -0700

참고

시간대를 지정하지 않으면 데이터베이스의 기본 시간대가 추가되므로 두 엔진에서 시간대가 다릅니다.

데이터베이스의 기본 시간대를 변경하려면 다음 구문을 사용합니다.

ALTER account SET sqtimezone = timezone_string;
Copy

Known Issues

1. Timestamp formats may be different

Snow Convert는 날짜/타임스탬프 형식 문자열에 대한 변환 성능을 수행하지 않으므로 코드를 배포할 때 오류가 발생할 수 있습니다. 예:

Oracle
INSERT INTO timestamp_with_time_zone_table(timestamp_col1) VALUES (TIMESTAMP '2010-10-10 12:00:00 -8:00');
Copy
Snowflake
INSERT INTO timestamp_with_time_zone_table(timestamp_col1) VALUES (TIMESTAMP '2010-10-10 12:00:00 -8:00');
Copy

경고

기본 타임스탬프 입력 형식이’-8:00’을 유효한 UTC 오프셋으로 인식하지 못하기 때문에 Snowflake에서 쿼리가 실패합니다. 동일한 결과를 얻으려면’-0800’ 또는 ‘-08:00’으로 바꿔야 합니다.

관련 EWIs

관련 EWIs 없음.

날짜/시간 산술

여기에서는 날짜/시간 유형 간의 일부 산술 연산에 대한 현재 변환을 설명합니다.

설명

Oracle에서는 더하기, 빼기, 곱하기, 나누기와 같은 DateTime 유형 간에 일부 산술 연산을 수행할 수 있었습니다. 현재, SnowConvert AI는 더하기 및 빼기의 일부 사례를 처리할 수 있습니다. 이러한 사례는 아래에 설명되어 있습니다.

샘플 소스 패턴

이는 날짜, 타임스탬프, 숫자, 알 수 없는 유형을 사용하는 더하기 및 빼기 연산의 다양한 조합에 대한 현재 변환의 요약입니다.

참고

아래 예는 다음 테이블을 참조하세요.

Oracle

CREATE OR REPLACE TABLE TIMES (
AsTimeStamp TIMESTAMP(6),
AsTimestampTwo TIMESTAMP(6),
AsDate TIMESTAMP,
AsDateTwo TIMESTAMP
);

INSERT INTO TIMES
VALUES (
TO_TIMESTAMP('05/11/21, 11:00 A.M.', 'dd/mm/yy, hh:mi A.M.'),
TO_TIMESTAMP('05/11/21, 10:00 A.M.', 'dd/mm/yy, hh:mi A.M.'),
TO_DATE('06/11/21', 'dd/mm/yy'),
TO_DATE('05/11/21', 'dd/mm/yy'));
Copy
Snowflake
CREATE OR REPLACE TABLE TIMES (
 AsTimeStamp TIMESTAMP(6),
 AsTimestampTwo TIMESTAMP(6),
 AsDate TIMESTAMP(6),
 AsDateTwo TIMESTAMP(6)
 )
 COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
 ;

 INSERT INTO TIMES
 VALUES (
TO_TIMESTAMP('05/11/21, 11:00 A.M.', 'dd/mm/yy, hh:mi A.M.'),
TO_TIMESTAMP('05/11/21, 10:00 A.M.', 'dd/mm/yy, hh:mi A.M.'),
TO_DATE('06/11/21', 'dd/mm/yy'),
TO_DATE('05/11/21', 'dd/mm/yy'));
Copy

더하기

조합 행렬

다음은 마이그레이션 프로그램이 날짜, 타임스탬프, 숫자, 알 수 없는 유형을 사용하여 다양한 조합에 대한 더하기 연산을 해결하는 방법에 대한 요약입니다.

더하기

날짜

타임스탬프

숫자

간격

알 수 없음

Float

날짜

INVALID

INVALID

날짜 + 간격 일

날짜 + 간격 IntervalUnit

DATEADD_UDF

DATEADD_UDF

타임스탬프

INVALID

INVALID

타임스탬프 + 간격 일

타임스탬프 + 간격 IntervalUnit

DATEADD_UDF

DATEADD_UDF

숫자

날짜 + 간격 일

타임스탬프 + 간격 일

숫자 + 숫자

INVALID

SSC-EWI-OR0036

숫자 + 부동 소수점

간격

날짜 + 간격 IntervalUnit

타임스탬프 + 간격 IntervalUnit

INVALID

SSC-EWI-OR0036

알 수 없음 + 간격 IntervalUnit

INVALID

알 수 없음

DATEADD_UDF

DATEADD_UDF

알 수 없음 + 숫자

알 수 없음 + 간격 IntervalUnit

SSC-EWI-OR0036

SSC-EWI-OR0036

부동 소수점

DATEADD_UDF

DATEADD_UDF

부동 소수점 + 숫자

INVALID

SSC-EWI-OR0036

부동 소수점 + 부동 소수점

참고

알 수 없음 유형 열은 마이그레이터가 해당 열의 데이터 타입을 파악하지 못한 경우에 발생합니다. 이는 연산 중인 테이블에 DDLs가 누락되었거나, 뷰, CTES 또는 하위 쿼리에 대한 연산으로 인해 열이 발생한 경우 등 여러 가지 이유로 발생할 수 있습니다.

경고

기본적으로 Snow Converter는 날짜/타임스탬프 + 간격 유형의 연산을 네이티브 Snowflake 연산으로 마이그레이션하지만, 경우에 따라 UDF를 대신 사용하는 것이 유용할 수 있습니다. 이 UDF에 대한 자세한 내용은 여기에서 확인할 수 있습니다.

마이그레이터가 더하기 연산을 처리하는 데 사용할 수 있는 다양한 경로는 아래에 설명되어 있습니다.

유효하지 않음

특정 조합은 Oracle에서 더하기 연산을 수행하는 데 유효하지 않습니다.

Oracle
SELECT AsDate + AsDateTwo From TIMES;

SELECT AsDate + AsTimeStamp From TIMES;
Copy
결과
SQL Error [975] [42000]: ORA-00975: date + date not allowed

SQL Error [30087] [99999]: ORA-30087: Adding two datetime values is not allowed

Copy

날짜 + 간격 일

이는 날짜 유형과 숫자 사이의 더하기 연산에 대한 현재 변환입니다(그 반대도 마찬가지임). 예

Oracle
SELECT AsDate + 1 FROM TIMES;

SELECT 1 + AsDate FROM TIMES;
Copy
결과

ASDATE+1

2021-11-07 00:00:00.000

1+ASDATE

2021-11-07 00:00:00.000

Snowflake
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0036 - TYPES RESOLUTION ISSUES, ARITHMETIC OPERATION '+' MAY NOT BEHAVE CORRECTLY BETWEEN unknown AND Number ***/!!!
 AsDate + 1 FROM
 TIMES;


SELECT
 !!!RESOLVE EWI!!! /*** SSC-EWI-OR0036 - TYPES RESOLUTION ISSUES, ARITHMETIC OPERATION '+' MAY NOT BEHAVE CORRECTLY BETWEEN Number AND unknown ***/!!! 1 + AsDate FROM
 TIMES;
Copy
결과

ASDATE + INTERVAL ‘1 DAY’

2021-11-07

타임스탬프 + 간격 일

이는 타임스탬프 유형과 숫자 사이의 더하기 연산에 대한 현재 변환입니다(그 반대도 마찬가지임). 예

Oracle
SELECT AsTimestamp + 1 FROM TIMES;

SELECT 1 + AsTimestamp FROM TIMES;
Copy
결과

ASTIMESTAMP+1

2021-11-06 11:00:00.000

1+ASTIMESTAMP

2021-11-06 11:00:00.000

참고

참고: Oracle에서는 DATE 및 TIMESTAMP 열 모두에 시간 구성 요소가 포함되어 있지만, Oracle은 NLS_DATE_FORMAT 매개 변수에 의해 지정된 형식 마스크를 사용하여 암시적으로 날짜를 문자열로 변환하는 방법을 결정했습니다. 이것이 TIMESTAMP 및 간격 사이에서 일부 연산을 수행하는 경우 NLS_DATE_FORMAT 매개 변수가 변경되지 않는 한, 시간 구성 요소가 숨겨지고 해당 결과는 DATE로 표시되는 이유입니다.

Snowflake
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0036 - TYPES RESOLUTION ISSUES, ARITHMETIC OPERATION '+' MAY NOT BEHAVE CORRECTLY BETWEEN unknown AND Number ***/!!!
 AsTimestamp + 1 FROM
 TIMES;


SELECT
 !!!RESOLVE EWI!!! /*** SSC-EWI-OR0036 - TYPES RESOLUTION ISSUES, ARITHMETIC OPERATION '+' MAY NOT BEHAVE CORRECTLY BETWEEN Number AND unknown ***/!!! 1 + AsTimestamp FROM
 TIMES;
Copy
결과

ASTIMESTAMP + INTERVAL ‘1 DAY’

2021-11-06 11:00:00.000

DATEADD_UDF

날짜 또는 타임스탬프 유형 및 알 수 없는 유형 사이에 더하기 연산이 있는 경우 사용자 정의 함수(UDF)가 추가됩니다. 현 재 UDF 구현은 여기에서 확인할 수 있습니다. UDF는 UDFs 폴더에 있습니다. 예:

참고

다음 예에서는 하위 쿼리가 사용되어 알 수 없는 유형 열을 시뮬레이션하려고 시도합니다.

Oracle
SELECT AsDate + (SELECT EXTRACT(DAY FROM AsTimestampTwo) FROM TIMES) FROM TIMES;

SELECT AsTimestamp + (SELECT EXTRACT(DAY FROM AsTimestampTwo) FROM TIMES) FROM TIMES;
Copy
결과

ASDATE+(SELECTEXTRACT(DAYFROMASTIMESTAMPTWO)FROMTIMES)

2021-11-11 00:00:00.000

ASTIMESTAMP+(SELECTEXTRACT(DAYFROMASTIMESTAMPTWO)FROMTIMES)

2021-11-10 11:00:00.000

Snowflake
SELECT AsDate + (SELECT EXTRACT(DAY FROM AsTimestampTwo) FROM
TIMES
) FROM
TIMES;

SELECT AsTimestamp + (SELECT EXTRACT(DAY FROM AsTimestampTwo) FROM
TIMES
) FROM
TIMES;
Copy
결과

PUBLIC.DATEADD_UDF( ASDATE, (SELECT EXTRACT(DAY FROM ASTIMESTAMPTWO) FROM PUBLIC.TIMES))

2021-11-11

PUBLIC.DATEADD_UDF( ASTIMESTAMP, (SELECT EXTRACT(DAY FROM ASTIMESTAMPTWO) FROM PUBLIC.TIMES))

2021-11-10 11:00:00.000

빼기

조합 행렬

빼기

날짜

타임스탬프

숫자

간격

알 수 없음

Float

날짜

DATEDIFF

TIMESTAMP_DIFF___UDF

날짜 - 간격 일

날짜 - 간격 IntervalUnit

DATEDIFF_UDF

DATEDIFF_UDF

타임스탬프

TIMESTAMP_DIFF___UDF

TIMESTAMP_DIFF___UDF

타임스탬프 - 간격 일

타임스탬프 - 간격 IntervalUnit

DATEDIFF_UDF

DATEDIFF_UDF

숫자

INVALID

INVALID

숫자 - 숫자

INVALID

SSC-EWI-OR0036

숫자 - 부동 소수점

간격

INVALID

INVALID

INVALID

SSC-EWI-OR0036

알 수 없음 - 간격 IntervalUnit

NOT SUPPORTED IN ORACLE

알 수 없음

DATEDIFF_UDF

DATEDIFF_UDF

SSC-EWI-OR0036

알 수 없음 - 간격 IntervalUnit

SSC-EWI-OR0036

SSC-EWI-OR0036

부동 소수점

DATEDIFF_UDF

DATEDIFF_UDF

부동 소수점 - 숫자

NOT SUPPORTED IN ORACLE

SSC-EWI-OR0036

부동 소수점 - 부동 소수점

참고

알 수 없음 유형 열은 마이그레이터가 해당 열의 데이터 타입을 파악하지 못한 경우에 발생합니다. 이는 연산 중인 테이블에 DDLs가 누락되었거나, 뷰, CTES 또는 하위 쿼리에 대한 연산으로 인해 열이 발생한 경우 등 여러 가지 이유로 발생할 수 있습니다.

경고

기본적으로 Snow Converter는 날짜/타임스탬프 + 간격 유형의 연산을 네이티브 Snowflake 연산으로 마이그레이션하지만, 경우에 따라 UDF를 대신 사용하는 것이 유용할 수 있습니다. 이 UDF에 대한 자세한 내용은 여기에서 확인할 수 있습니다.

마이그레이션터가 빼기 연산을 처리하는 데 사용할 수 있는 다양한 경로는 아래에 설명되어 있습니다.

유효하지 않음

특정 조합은 Oracle에서 빼기 연산을 수행하는 데 유효하지 않습니다.

Oracle
SELECT 1 - AsDate FROM TIMES;

SELECT 1 - AsTimestamp FROM TIMES;
Copy
결과
SQL Error [932] [42000]: ORA-00932: inconsistent datatypes: expected NUMBER got DATE

SQL Error [932] [42000]: ORA-00932: inconsistent datatypes: expected NUMBER got TIMESTAMP

Copy

DATEDIFF

날짜 타입의 두 피연산자 간 빼기는 시간 단위(첫 번째 매개 변수) ‘일’을 사용하여 Snowflake DATEDIFF 함수로 변환됩니다. 예

Oracle
SELECT AsDate - AsDateTwo FROM TIMES;
Copy
결과

ASDATE-ASDATETWO

1

Snowflake
SELECT AsDate - AsDateTwo FROM
TIMES;
Copy
결과

DATEDIFF(DAY, ASDATETWO, ASDATE)

1

날짜 - 간격 일

이는 날짜 유형과 숫자 사이의 빼기 연산에 대한 현재 변환입니다. 예

Oracle
SELECT AsDate - 1 FROM TIMES;

SELECT AsDate + -1 FROM TIMES;
Copy
결과

ASDATE-1

2021-11-05 00:00:00.000

ASDATE+-1

2021-11-05 00:00:00.000

Snowflake
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0036 - TYPES RESOLUTION ISSUES, ARITHMETIC OPERATION '-' MAY NOT BEHAVE CORRECTLY BETWEEN unknown AND Number ***/!!!
 AsDate - 1 FROM
 TIMES;

SELECT
 !!!RESOLVE EWI!!! /*** SSC-EWI-OR0036 - TYPES RESOLUTION ISSUES, ARITHMETIC OPERATION '+' MAY NOT BEHAVE CORRECTLY BETWEEN unknown AND Number ***/!!! AsDate + -1 FROM
 TIMES;
Copy
결과

ASDATE - INTERVAL ‘1 DAY’

2021-11-05

ASDATE + INTERVAL ‘-1 DAY’

2021-11-05

타임스탬프 - 간격 일

이는 타임스탬프 유형과 숫자 사이의 더하기 연산에 대한 현재 변환입니다. 예

Oracle
SELECT AsTimestamp - 1 FROM TIMES;

SELECT AsTimestamp + -1 FROM TIMES;
Copy
결과

ASTIMESTAMP-1

2021-11-04 11:00:00.000

ASTIMESTAMP+-1

2021-11-04 11:00:00.000

Snowflake
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0036 - TYPES RESOLUTION ISSUES, ARITHMETIC OPERATION '-' MAY NOT BEHAVE CORRECTLY BETWEEN unknown AND Number ***/!!!
 AsTimestamp - 1 FROM
 TIMES;

SELECT
 !!!RESOLVE EWI!!! /*** SSC-EWI-OR0036 - TYPES RESOLUTION ISSUES, ARITHMETIC OPERATION '+' MAY NOT BEHAVE CORRECTLY BETWEEN unknown AND Number ***/!!! AsTimestamp + -1 FROM
 TIMES;
Copy
결과

ASTIMESTAMP - INTERVAL ‘1 DAY’

2021-11-04 11:00:00.000

ASTIMESTAMP + INTERVAL ‘-1 DAY’

2021-11-04 11:00:00.000

참고

참고: Oracle에서는 DATE 및 TIMESTAMP 열 모두에 시간 구성 요소가 포함되어 있지만, Oracle은 NLS_DATE_FORMAT 매개 변수에 의해 지정된 형식 마스크를 사용하여 암시적으로 날짜를 문자열로 변환하는 방법을 결정했습니다. 이것이 TIMESTAMP 및 간격 사이에서 일부 연산을 수행하는 경우 NLS_DATE_FORMAT 매개 변수가 변경되지 않는 한, 시간 구성 요소가 숨겨지고 해당 결과는 DATE로 표시되는 이유입니다.

NLS_DATE_FORMAT 형식에 대한 자세한 내용은 여기에서 확인할 수 있습니다.

TIMESTAMP_DIFF_UDF

타임스탬프 유형과 타임스탬프가 있는 날짜 간의 빼기(및 그 반대의 경우)는 TIMESTAMP_DIFF_UDF 사용자 정의 함수를 삽입하여 처리됩니다([여기]에서 구현(../../functions/custom_udfs.md#timestamp-diff-udf)). 예

Oracle
SELECT AsTimeStamp - AsTimeStampTwo FROM TIMES;

SELECT AsTimeStamp - AsDateTwo FROM TIMES;

SELECT AsDateTwo - AsTimeStamp FROM TIMES;
Copy
결과

ASTIMESTAMP-ASTIMESTAMPTWO

+000000000 01:00:00.000000

ASTIMESTAMP-ASDATETWO

+000000000 11:00:00.000000

ASDATETWO-ASTIMESTAMP

-000000000 11:00:00.000000

Snowflake
SELECT AsTimeStamp - AsTimeStampTwo FROM
TIMES;

SELECT AsTimeStamp - AsDateTwo FROM
TIMES;

SELECT AsDateTwo - AsTimeStamp FROM
TIMES;
Copy
결과

PUBLIC.TIMESTAMP_DIFF_UDF( ASTIMESTAMP, ASTIMESTAMPTWO)

+000000000 01:00:00.00000000

PUBLIC.TIMESTAMP_DIFF_UDF( ASTIMESTAMP, ASDATETWO)

+000000000 11:00:00.00000000

PUBLIC.TIMESTAMP_DIFF_UDF( ASDATETWO, ASTIMESTAMP)

-000000000 -11:00:00.00000000

DATEDIFF_UDF

날짜 또는 타임스탬프 유형 및 알 수 없는 유형 사이에 더하기 연산이 있는 경우 사용자 정의 함수(UDF)가 추가됩니다. UDF 구현은 여기에서 확인할 수 있지만, 필요한 연산을 수행하도록 편집할 수 있습니다. UDF는 UDFs 폴더에 있습니다. 예:

Oracle
SELECT ASDATE - (EXTRACT(DAY FROM ASDATE)) FROM TIMES;

SELECT ASTIMESTAMP - (EXTRACT(DAY FROM ASDATE)) FROM TIMES;
Copy
결과

ASDATE-(EXTRACT(DAYFROMASDATE))

2021-10-31 00:00:00.000

ASTIMESTAMP-(EXTRACT(DAYFROMASDATE))

2021-10-30 11:00:00.000

Snowflake
SELECT ASDATE - (EXTRACT(DAY FROM ASDATE)) FROM
TIMES;


SELECT ASTIMESTAMP - (EXTRACT(DAY FROM ASDATE)) FROM
TIMES;
Copy
결과

PUBLIC.DATEDIFF_UDF( ASDATE, (EXTRACT(DAY FROM ASDATE)))

2021-10-31

PUBLIC.DATEDIFF_UDF( ASTIMESTAMP, (EXTRACT(DAY FROM ASDATE)))

2021-10-30 11:00:00.000

일반적인 경우

경고: SSC-EWI-OR0036

이 경고는 피연산자 데이터 타입으로 인해 더하기 또는 빼기 연산이 올바르게 동작하지 않을 수 있는지 여부를 나타내는 데 사용됩니다. 이는 Snowflake에서의 연산 결과가 기능적으로 Oracle과 동일하지 않을 수 있음을 의미합니다. 날짜 또는 숫자 유형과 알 수 없는 유형 간의 더하기 및 빼기는 가장 일반적인 경우에 해당합니다. 예

Oracle
SELECT AsDate - (EXTRACT(DAY FROM ASDATE)) FROM TIMES;
Copy
Snowflake
SELECT AsDate - (EXTRACT(DAY FROM ASDATE)) FROM
TIMES;
Copy

이 EWI는 열 유형을 확인할 수 없는 작업에 추가됩니다. 열 유형이 INTERVAL이고 다른 간격으로만 작동하는 경우, EWI가 추가되지만 코드는 주석 처리되지 않습니다. 다음 예에서는 이 동작을 설명합니다.

Oracle
SELECT INTERVAL '1' DAY + interval_column FROM UNKNOWN_TABLE;
Copy
Snowflake
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0036 - TYPES RESOLUTION ISSUES, ARITHMETIC OPERATION '+' MAY NOT BEHAVE CORRECTLY BETWEEN Unknown AND Interval ***/!!!
interval_column + INTERVAL '1 day' FROM
UNKNOWN_TABLE;
Copy

Known Issues

1. TIMESTAMP DIFF UDF improvement

TIMESTAMP_DIFF_UDF는 반환 유형을 지정할 수 있도록 개선되어야 합니다. 이는 시간 부분(예: 일, 시간, 월 등)을 지정할 수 있는 세 번째 매개 변수의 추가를 의미합니다.

2. Built-in functions as operators

현재, 날짜 유형을 반환하는 기본 제공 함수 사이의 날짜 작업에 대한 관리 기능은 없습니다.

3. Multiple operands

현재, 3개 이상의 피연산자를 사용하는 날짜 연산에 대한 관리 기능은 없으며, 작동할 수도 있지만 문제가 발생할 수 있습니다.

4. Comparison operators

현재, 보다 큼, 보다 작음 등과 같은 비교 연산자를 사용하는 날짜 연산에 대한 관리 기능은 없습니다.

5. Output format

산술 연산의 결과 형식은 Snowflake의 ALTER SESSION SET DATE_OUTPUT_FORMAT = 'DESIRED-FORMAT'; 명령을 사용하여 변경할 수 있습니다.

6. Issues in interval operations with seconds precision

일부 연산, 특히 초 전체 자릿수가 있는 간격을 포함하는 연산의 경우는 Oracle에서 전체 자릿수에 따라 반올림하기 때문에 전체 자릿수가 다를 수 있습니다. Snowflake의 간격은 소수점 이하 자릿수가 있는 초를 지원하지 않으므로 동일한 결과를 얻으려면 Oracle에서 수행하는 반올림을 고려하여 간격에서 소수점 이하 자릿수를 밀리초 단위로 표시해야 합니다. 다음 예에서는 이 문제를 보여줍니다.

Oracle
SELECT AsTimeStamp+INTERVAL '15.6789' SECOND(2,3) FROM times;

SELECT AsTimeStamp+INTERVAL '15.6783' SECOND(2,3) FROM times;
Copy
결과

ASTIMESTAMP+INTERVAL’15.6789’SECOND(2,3)

2021-11-05 11:00:15.679

ASTIMESTAMP+INTERVAL’15.6783’SECOND(2,3)

2021-11-05 11:00:15.678

Snowflake
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0036 - TYPES RESOLUTION ISSUES, ARITHMETIC OPERATION '+' MAY NOT BEHAVE CORRECTLY BETWEEN Unknown AND Interval ***/!!!
 AsTimeStamp + INTERVAL '15.6789 second'
FROM
 times;

SELECT
 !!!RESOLVE EWI!!! /*** SSC-EWI-OR0036 - TYPES RESOLUTION ISSUES, ARITHMETIC OPERATION '+' MAY NOT BEHAVE CORRECTLY BETWEEN Unknown AND Interval ***/!!! AsTimeStamp + INTERVAL '15.6783 second'
FROM
 times;
Copy
결과

ASTIMESTAMP + INTERVAL ‘15.6789 SECOND’

2021-11-05 11:00:16.000

ASTIMESTAMP + INTERVAL ‘15.6783 SECOND’

2021-11-05 11:00:16.000

ASTIMESTAMP + INTERVAL ‘15 SECOND, 679 MILLISECOND’

2021-11-05 11:00:15.679

ASTIMESTAMP + INTERVAL ‘15 SECOND, 678 MILLISECOND’

2021-11-05 11:00:15.678

관련 EWIs

  1. SSC-EWI-0108: 다음 하위 쿼리는 유효하지 않은 것으로 간주되는 패턴 중 하나 이상과 일치하며 컴파일 오류를 생성할 수 있습니다.

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

Interval UDFs 및 Snowflake 기본 간격 작업 비교

설명

다음 테이블은 간격 산술을 위한 DATEADD_UDFINTERVALDATEDIFF_UDFINTERVALSnowflake 네이티브 작업을 비교한 것입니다.

필요한 코드

비교 테이블의 쿼리를 실행하려면 다음 코드를 실행해야 합니다.

CREATE OR REPLACE TABLE TIMES(
AsTimeStamp TIMESTAMP,
AsTimestampTwo TIMESTAMP,
AsDate DATE,
AsDateTwo DATE
);

INSERT INTO TIMES VALUES (
  TO_TIMESTAMP('05/11/21, 11:00 A.M.', 'dd/mm/yy, hh:mi A.M.'), 
  TO_TIMESTAMP('05/11/21, 10:00 A.M.', 'dd/mm/yy, hh:mi A.M.'), 
  TO_DATE('06/11/21', 'dd/mm/yy'), 
  TO_DATE('05/11/21', 'dd/mm/yy'));

CREATE TABLE UNKNOWN_TABLE(
  Unknown timestamp
);

INSERT INTO UNKNOWN_TABLE VALUES (
  TO_TIMESTAMP('01/10/09, 12:00 P.M.', 'dd/mm/yy, hh:mi P.M.')
);
Copy
CREATE OR REPLACE TABLE TIMES (
  AsTimeStamp TIMESTAMP(6),
  AsTimestampTwo TIMESTAMP(6),
  AsDate TIMESTAMP /*** SSC-FDM-OR0042 - DATE TYPE COLUMN HAS A DIFFERENT BEHAVIOR IN SNOWFLAKE. ***/,
  AsDateTwo 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"}}'
  ;

  INSERT INTO TIMES
  VALUES (
  TO_TIMESTAMP('05/11/21, 11:00 A.M.', 'dd/mm/yy, hh:mi A.M.'),
  TO_TIMESTAMP('05/11/21, 10:00 A.M.', 'dd/mm/yy, hh:mi A.M.'),
  TO_DATE('06/11/21', 'dd/mm/yy'),
  TO_DATE('05/11/21', 'dd/mm/yy'));

  CREATE OR REPLACE TABLE UNKNOWN_TABLE (
  Unknown TIMESTAMP(6)
  )
  COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
  ;

  INSERT INTO UNKNOWN_TABLE
  VALUES (
  TO_TIMESTAMP('01/10/09, 12:00 P.M.', 'dd/mm/yy, hh:mi P.M.')
);
Copy

비교 테이블

Oracle

SELECT AsTimeStamp+INTERVAL '1-1' YEAR(2) TO MONTH FROM TIMES;
SELECT AsTimeStamp-INTERVAL '1-1' YEAR(2) TO MONTH FROM TIMES;
SELECT AsTimeStamp+INTERVAL '2-1' YEAR(4) TO MONTH FROM TIMES;
SELECT AsTimeStamp-INTERVAL '2-1' YEAR(4) TO MONTH FROM TIMES;
SELECT AsTimeStamp+INTERVAL '1' MONTH FROM TIMES;
SELECT AsTimeStamp-INTERVAL '1' MONTH FROM TIMES;
SELECT AsTimeStamp+INTERVAL '2' MONTH FROM TIMES;
SELECT AsTimeStamp-INTERVAL '2' MONTH FROM TIMES;
SELECT AsTimeStamp+INTERVAL '1 01:00:00.222' DAY TO SECOND(3) FROM TIMES;
SELECT AsTimeStamp-INTERVAL '1 01:00:00.222' DAY TO SECOND(3) FROM TIMES;
SELECT AsTimeStamp+INTERVAL '1 01:10' DAY TO MINUTE FROM TIMES;
SELECT AsTimeStamp-INTERVAL '1 01:10' DAY TO MINUTE FROM TIMES;
SELECT AsTimeStamp+INTERVAL '1 1' DAY TO HOUR FROM TIMES;
SELECT AsTimeStamp-INTERVAL '1 1' DAY TO HOUR FROM TIMES;
SELECT AsTimeStamp+INTERVAL '10' DAY FROM TIMES;
SELECT AsTimeStamp-INTERVAL '10' DAY FROM TIMES;
SELECT AsTimeStamp+INTERVAL '3:05' HOUR TO MINUTE FROM TIMES;
SELECT AsTimeStamp-INTERVAL '3:05' HOUR TO MINUTE FROM TIMES;
SELECT AsTimeStamp+INTERVAL '5' HOUR FROM TIMES;
SELECT AsTimeStamp-INTERVAL '5' HOUR FROM TIMES;
SELECT AsTimeStamp+INTERVAL '5:10' MINUTE TO SECOND FROM TIMES;
SELECT AsTimeStamp-INTERVAL '5:10' MINUTE TO SECOND FROM TIMES;
SELECT AsTimeStamp+INTERVAL '30' MINUTE FROM TIMES;
SELECT AsTimeStamp-INTERVAL '30' MINUTE FROM TIMES;
SELECT AsTimeStamp+INTERVAL '333' HOUR(3) FROM TIMES;
SELECT AsTimeStamp-INTERVAL '333' HOUR(3) FROM TIMES;
SELECT AsTimeStamp+INTERVAL '15.6789' SECOND(2,3) FROM TIMES;
SELECT AsTimeStamp-INTERVAL '15.6789' SECOND(2,3) FROM TIMES;
SELECT AsDate+INTERVAL '1-1' YEAR(2) TO MONTH FROM TIMES;
SELECT AsDate-INTERVAL '1-1' YEAR(2) TO MONTH FROM TIMES;
SELECT AsDate+INTERVAL '2-1' YEAR(4) TO MONTH FROM TIMES;
SELECT AsDate-INTERVAL '2-1' YEAR(4) TO MONTH FROM TIMES;
SELECT AsDate+INTERVAL '1' MONTH FROM TIMES;
SELECT AsDate-INTERVAL '1' MONTH FROM TIMES;
SELECT AsDate+INTERVAL '2' MONTH FROM TIMES;
SELECT AsDate-INTERVAL '2' MONTH FROM TIMES;
SELECT AsDate+INTERVAL '1 01:00:00.222' DAY TO SECOND(3) FROM TIMES;
SELECT AsDate-INTERVAL '1 01:00:00.222' DAY TO SECOND(3) FROM TIMES;
SELECT AsDate+INTERVAL '1 01:10' DAY TO MINUTE FROM TIMES;
SELECT AsDate-INTERVAL '1 01:10' DAY TO MINUTE FROM TIMES;
SELECT AsDate+INTERVAL '1 1' DAY TO HOUR FROM TIMES;
SELECT AsDate-INTERVAL '1 1' DAY TO HOUR FROM TIMES;
SELECT AsDate+INTERVAL '10' DAY FROM TIMES;
SELECT AsDate-INTERVAL '10' DAY FROM TIMES;
SELECT AsDate+INTERVAL '3:05' HOUR TO MINUTE FROM TIMES;
SELECT AsDate-INTERVAL '3:05' HOUR TO MINUTE FROM TIMES;
SELECT AsDate+INTERVAL '5' HOUR FROM TIMES;
SELECT AsDate-INTERVAL '5' HOUR FROM TIMES;
SELECT AsDate+INTERVAL '5:10' MINUTE TO SECOND FROM TIMES;
SELECT AsDate-INTERVAL '5:10' MINUTE TO SECOND FROM TIMES;
SELECT AsDate+INTERVAL '30' MINUTE FROM TIMES;
SELECT AsDate-INTERVAL '30' MINUTE FROM TIMES;
SELECT AsDate+INTERVAL '333' HOUR(3) FROM TIMES;
SELECT AsDate-INTERVAL '333' HOUR(3) FROM TIMES;
SELECT AsDate+INTERVAL '15.6789' SECOND(2,3) FROM TIMES;
SELECT AsDate-INTERVAL '15.6789' SECOND(2,3) FROM TIMES;
SELECT Unknown+INTERVAL '1-1' YEAR(2) TO MONTH FROM UNKNOWN_TABLE;
SELECT Unknown-INTERVAL '1-1' YEAR(2) TO MONTH FROM UNKNOWN_TABLE;
SELECT Unknown+INTERVAL '2-1' YEAR(4) TO MONTH FROM UNKNOWN_TABLE;
SELECT Unknown-INTERVAL '2-1' YEAR(4) TO MONTH FROM UNKNOWN_TABLE;
SELECT Unknown+INTERVAL '1' MONTH FROM UNKNOWN_TABLE;
SELECT Unknown-INTERVAL '1' MONTH FROM UNKNOWN_TABLE;
SELECT Unknown+INTERVAL '2' MONTH FROM UNKNOWN_TABLE;
SELECT Unknown-INTERVAL '2' MONTH FROM UNKNOWN_TABLE;
SELECT Unknown+INTERVAL '1 01:00:00.222' DAY TO SECOND(3) FROM UNKNOWN_TABLE;
SELECT Unknown-INTERVAL '1 01:00:00.222' DAY TO SECOND(3) FROM UNKNOWN_TABLE;
SELECT Unknown+INTERVAL '1 01:10' DAY TO MINUTE FROM UNKNOWN_TABLE;
SELECT Unknown-INTERVAL '1 01:10' DAY TO MINUTE FROM UNKNOWN_TABLE;
SELECT Unknown+INTERVAL '1 1' DAY TO HOUR FROM UNKNOWN_TABLE;
SELECT Unknown-INTERVAL '1 1' DAY TO HOUR FROM UNKNOWN_TABLE;
SELECT Unknown+INTERVAL '10' DAY FROM UNKNOWN_TABLE;
SELECT Unknown-INTERVAL '10' DAY FROM UNKNOWN_TABLE;
SELECT Unknown+INTERVAL '3:05' HOUR TO MINUTE FROM UNKNOWN_TABLE;
SELECT Unknown-INTERVAL '3:05' HOUR TO MINUTE FROM UNKNOWN_TABLE;
SELECT Unknown+INTERVAL '5' HOUR FROM UNKNOWN_TABLE;
SELECT Unknown-INTERVAL '5' HOUR FROM UNKNOWN_TABLE;
SELECT Unknown+INTERVAL '5:10' MINUTE TO SECOND FROM UNKNOWN_TABLE;
SELECT Unknown-INTERVAL '5:10' MINUTE TO SECOND FROM UNKNOWN_TABLE;
SELECT Unknown+INTERVAL '30' MINUTE FROM UNKNOWN_TABLE;
SELECT Unknown-INTERVAL '30' MINUTE FROM UNKNOWN_TABLE;
SELECT Unknown+INTERVAL '333' HOUR(3) FROM UNKNOWN_TABLE;
SELECT Unknown-INTERVAL '333' HOUR(3) FROM UNKNOWN_TABLE;
SELECT Unknown+INTERVAL '15.6789' SECOND(2,3) FROM UNKNOWN_TABLE;
SELECT Unknown-INTERVAL '15.6789' SECOND(2,3) FROM UNKNOWN_TABLE;
SELECT INTERVAL '1-1' YEAR(2) TO MONTH+ AsTimeStamp FROM TIMES;
SELECT INTERVAL '1-1' YEAR(2) TO MONTH+AsDate FROM TIMES;
SELECT INTERVAL '1-1' YEAR(2) TO MONTH+Unknown FROM UNKNOWN_TABLE;
SELECT INTERVAL '2-1' YEAR(4) TO MONTH+AsTimeStamp FROM TIMES;
SELECT INTERVAL '2-1' YEAR(4) TO MONTH+AsDate FROM TIMES;
SELECT INTERVAL '2-1' YEAR(4) TO MONTH+Unknown FROM UNKNOWN_TABLE;
SELECT INTERVAL '1' MONTH+AsTimeStamp FROM TIMES;
SELECT INTERVAL '1' MONTH+AsDate FROM TIMES;
SELECT INTERVAL '1' MONTH+Unknown FROM UNKNOWN_TABLE;
SELECT INTERVAL '2' MONTH+AsTimeStamp FROM TIMES;
SELECT INTERVAL '2' MONTH+AsDate FROM TIMES;
SELECT INTERVAL '2' MONTH+Unknown FROM UNKNOWN_TABLE;
SELECT INTERVAL '1 01:00:00.222' DAY TO SECOND(3)+AsTimeStamp FROM TIMES;
SELECT INTERVAL '1 01:00:00.222' DAY TO SECOND(3)+AsDate FROM TIMES;
SELECT INTERVAL '1 01:00:00.222' DAY TO SECOND(3)+Unknown FROM UNKNOWN_TABLE;
SELECT INTERVAL '1 01:10' DAY TO MINUTE+AsTimeStamp FROM TIMES;
SELECT INTERVAL '1 01:10' DAY TO MINUTE+AsDate FROM TIMES;
SELECT INTERVAL '1 01:10' DAY TO MINUTE+Unknown FROM UNKNOWN_TABLE;
SELECT INTERVAL '1 1' DAY TO HOUR+AsTimeStamp FROM TIMES;
SELECT INTERVAL '1 1' DAY TO HOUR+AsDate FROM TIMES;
SELECT INTERVAL '1 1' DAY TO HOUR+Unknown FROM UNKNOWN_TABLE;
SELECT INTERVAL '10' DAY+AsTimeStamp FROM TIMES;
SELECT INTERVAL '10' DAY+AsDate FROM TIMES;
SELECT INTERVAL '10' DAY+Unknown FROM UNKNOWN_TABLE;
SELECT INTERVAL '3:05' HOUR TO MINUTE+AsTimeStamp FROM TIMES;
SELECT INTERVAL '3:05' HOUR TO MINUTE+AsDate FROM TIMES;
SELECT INTERVAL '3:05' HOUR TO MINUTE+Unknown FROM UNKNOWN_TABLE;
SELECT INTERVAL '5' HOUR+AsTimeStamp FROM TIMES;
SELECT INTERVAL '5' HOUR+AsDate FROM TIMES;
SELECT INTERVAL '5' HOUR+Unknown FROM UNKNOWN_TABLE;
SELECT INTERVAL '5:10' MINUTE TO SECOND+AsTimeStamp FROM TIMES;
SELECT INTERVAL '5:10' MINUTE TO SECOND+AsDate FROM TIMES;
SELECT INTERVAL '5:10' MINUTE TO SECOND+Unknown FROM UNKNOWN_TABLE;
SELECT INTERVAL '30' MINUTE+AsTimeStamp FROM TIMES;
SELECT INTERVAL '30' MINUTE+AsDate FROM TIMES;
SELECT INTERVAL '30' MINUTE+Unknown FROM UNKNOWN_TABLE;
SELECT INTERVAL '333' HOUR(3)+AsTimeStamp FROM TIMES;
SELECT INTERVAL '333' HOUR(3)+AsDate FROM TIMES;
SELECT INTERVAL '333' HOUR(3)+Unknown FROM UNKNOWN_TABLE;
SELECT INTERVAL '15.6789' SECOND(2,3)+AsTimeStamp FROM TIMES;
SELECT INTERVAL '15.6789' SECOND(2,3)+AsDate FROM TIMES;
SELECT INTERVAL '15.6789' SECOND(2,3)+Unknown FROM UNKNOWN_TABLE;
Copy

Snowflake

SELECT AsTimeStamp + INTERVAL '1y, 1mm' FROM PUBLIC.TIMES;
SELECT AsTimeStamp - INTERVAL '1y, 1mm' FROM PUBLIC.TIMES;
SELECT AsTimeStamp + INTERVAL '2y, 1mm' FROM PUBLIC.TIMES;
SELECT AsTimeStamp - INTERVAL '2y, 1mm' FROM PUBLIC.TIMES;
SELECT AsTimeStamp + INTERVAL '1 month' FROM PUBLIC.TIMES;
SELECT AsTimeStamp - INTERVAL '1 month' FROM PUBLIC.TIMES;
SELECT AsTimeStamp + INTERVAL '2 month' FROM PUBLIC.TIMES;
SELECT AsTimeStamp - INTERVAL '2 month' FROM PUBLIC.TIMES;
SELECT AsTimeStamp + INTERVAL '1d, 01h, 00m, 00s, 222ms' FROM PUBLIC.TIMES;
SELECT AsTimeStamp - INTERVAL '1d, 01h, 00m, 00s, 222ms' FROM PUBLIC.TIMES;
SELECT AsTimeStamp + INTERVAL '1d, 01h, 10m' FROM PUBLIC.TIMES;
SELECT AsTimeStamp - INTERVAL '1d, 01h, 10m' FROM PUBLIC.TIMES;
SELECT AsTimeStamp + INTERVAL '1d, 1h' FROM PUBLIC.TIMES;
SELECT AsTimeStamp - INTERVAL '1d, 1h' FROM PUBLIC.TIMES;
SELECT AsTimeStamp + INTERVAL '10 day' FROM PUBLIC.TIMES;
SELECT AsTimeStamp - INTERVAL '10 day' FROM PUBLIC.TIMES;
SELECT AsTimeStamp + INTERVAL '3h, 05m' FROM PUBLIC.TIMES;
SELECT AsTimeStamp - INTERVAL '3h, 05m' FROM PUBLIC.TIMES;
SELECT AsTimeStamp + INTERVAL '5 hour' FROM PUBLIC.TIMES;
SELECT AsTimeStamp - INTERVAL '5 hour' FROM PUBLIC.TIMES;
SELECT AsTimeStamp + INTERVAL '5m, 10s' FROM PUBLIC.TIMES;
SELECT AsTimeStamp - INTERVAL '5m, 10s' FROM PUBLIC.TIMES;
SELECT AsTimeStamp + INTERVAL '30 minute' FROM PUBLIC.TIMES;
SELECT AsTimeStamp - INTERVAL '30 minute' FROM PUBLIC.TIMES;
SELECT AsTimeStamp + INTERVAL '333 hour' FROM PUBLIC.TIMES;
SELECT AsTimeStamp - INTERVAL '333 hour' FROM PUBLIC.TIMES;
SELECT AsTimeStamp + INTERVAL '15.6789 second' FROM PUBLIC.TIMES;
SELECT AsTimeStamp - INTERVAL '15.6789 second' FROM PUBLIC.TIMES;
SELECT AsDate + INTERVAL '1y, 1mm' FROM PUBLIC.TIMES;
SELECT AsDate - INTERVAL '1y, 1mm' FROM PUBLIC.TIMES;
SELECT AsDate + INTERVAL '2y, 1mm' FROM PUBLIC.TIMES;
SELECT AsDate - INTERVAL '2y, 1mm' FROM PUBLIC.TIMES;
SELECT AsDate + INTERVAL '1 month' FROM PUBLIC.TIMES;
SELECT AsDate - INTERVAL '1 month' FROM PUBLIC.TIMES;
SELECT AsDate + INTERVAL '2 month' FROM PUBLIC.TIMES;
SELECT AsDate - INTERVAL '2 month' FROM PUBLIC.TIMES;
SELECT AsDate + INTERVAL '1d, 01h, 00m, 00s, 222ms' FROM PUBLIC.TIMES;
SELECT AsDate - INTERVAL '1d, 01h, 00m, 00s, 222ms' FROM PUBLIC.TIMES;
SELECT AsDate + INTERVAL '1d, 01h, 10m' FROM PUBLIC.TIMES;
SELECT AsDate - INTERVAL '1d, 01h, 10m' FROM PUBLIC.TIMES;
SELECT AsDate + INTERVAL '1d, 1h' FROM PUBLIC.TIMES;
SELECT AsDate - INTERVAL '1d, 1h' FROM PUBLIC.TIMES;
SELECT AsDate + INTERVAL '10 day' FROM PUBLIC.TIMES;
SELECT AsDate - INTERVAL '10 day' FROM PUBLIC.TIMES;
SELECT AsDate + INTERVAL '3h, 05m' FROM PUBLIC.TIMES;
SELECT AsDate - INTERVAL '3h, 05m' FROM PUBLIC.TIMES;
SELECT AsDate + INTERVAL '5 hour' FROM PUBLIC.TIMES;
SELECT AsDate - INTERVAL '5 hour' FROM PUBLIC.TIMES;
SELECT AsDate + INTERVAL '5m, 10s' FROM PUBLIC.TIMES;
SELECT AsDate - INTERVAL '5m, 10s' FROM PUBLIC.TIMES;
SELECT AsDate + INTERVAL '30 minute' FROM PUBLIC.TIMES;
SELECT AsDate - INTERVAL '30 minute' FROM PUBLIC.TIMES;
SELECT AsDate + INTERVAL '333 hour' FROM PUBLIC.TIMES;
SELECT AsDate - INTERVAL '333 hour' FROM PUBLIC.TIMES;
SELECT AsDate + INTERVAL '15.6789 second' FROM PUBLIC.TIMES;
SELECT AsDate - INTERVAL '15.6789 second' FROM PUBLIC.TIMES;
SELECT Unknown + INTERVAL '1y, 1mm' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown - INTERVAL '1y, 1mm' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown + INTERVAL '2y, 1mm' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown - INTERVAL '2y, 1mm' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown + INTERVAL '1 month' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown - INTERVAL '1 month' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown + INTERVAL '2 month' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown - INTERVAL '2 month' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown + INTERVAL '1d, 01h, 00m, 00s, 222ms' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown - INTERVAL '1d, 01h, 00m, 00s, 222ms' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown + INTERVAL '1d, 01h, 10m' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown - INTERVAL '1d, 01h, 10m' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown + INTERVAL '1d, 1h' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown - INTERVAL '1d, 1h' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown + INTERVAL '10 day' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown - INTERVAL '10 day' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown + INTERVAL '3h, 05m' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown - INTERVAL '3h, 05m' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown + INTERVAL '5 hour' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown - INTERVAL '5 hour' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown + INTERVAL '5m, 10s' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown - INTERVAL '5m, 10s' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown + INTERVAL '30 minute' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown - INTERVAL '30 minute' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown + INTERVAL '333 hour' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown - INTERVAL '333 hour' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown + INTERVAL '15.6789 second' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown - INTERVAL '15.6789 second' FROM PUBLIC.UNKNOWN_TABLE;
Copy

Snowflake UDF

SELECT DATEADD_UDF(AsTimeStamp,'INTERVAL ''1-1'' YEAR(2) TO MONTH') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsTimeStamp,'INTERVAL ''1-1'' YEAR(2) TO MONTH') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsTimeStamp,'INTERVAL ''2-1'' YEAR(4) TO MONTH') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsTimeStamp,'INTERVAL ''2-1'' YEAR(4) TO MONTH') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsTimeStamp,'INTERVAL ''1'' MONTH') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsTimeStamp,'INTERVAL ''1'' MONTH') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsTimeStamp,'INTERVAL ''2'' MONTH') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsTimeStamp,'INTERVAL ''2'' MONTH') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsTimeStamp,'INTERVAL ''1 01:00:00.222'' DAY TO SECOND(3)') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsTimeStamp,'INTERVAL ''1 01:00:00.222'' DAY TO SECOND(3)') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsTimeStamp,'INTERVAL ''1 01:10'' DAY TO MINUTE') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsTimeStamp,'INTERVAL ''1 01:10'' DAY TO MINUTE') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsTimeStamp,'INTERVAL ''1 1'' DAY TO HOUR') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsTimeStamp,'INTERVAL ''1 1'' DAY TO HOUR') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsTimeStamp,'INTERVAL ''10'' DAY') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsTimeStamp,'INTERVAL ''10'' DAY') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsTimeStamp,'INTERVAL ''3:05'' HOUR TO MINUTE') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsTimeStamp,'INTERVAL ''3:05'' HOUR TO MINUTE') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsTimeStamp,'INTERVAL ''5'' HOUR') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsTimeStamp,'INTERVAL ''5'' HOUR') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsTimeStamp,'INTERVAL ''5:10'' MINUTE TO SECOND') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsTimeStamp,'INTERVAL ''5:10'' MINUTE TO SECOND') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsTimeStamp,'INTERVAL ''30'' MINUTE') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsTimeStamp,'INTERVAL ''30'' MINUTE') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsTimeStamp,'INTERVAL ''333'' HOUR(3)') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsTimeStamp,'INTERVAL ''333'' HOUR(3)') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsTimeStamp,'INTERVAL ''15.6789'' SECOND(2,3)') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsTimeStamp,'INTERVAL ''15.6789'' SECOND(2,3)') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsDate,'INTERVAL ''1-1'' YEAR(2) TO MONTH') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsDate,'INTERVAL ''1-1'' YEAR(2) TO MONTH') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsDate,'INTERVAL ''2-1'' YEAR(4) TO MONTH') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsDate,'INTERVAL ''2-1'' YEAR(4) TO MONTH') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsDate,'INTERVAL ''1'' MONTH') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsDate,'INTERVAL ''1'' MONTH') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsDate,'INTERVAL ''2'' MONTH') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsDate,'INTERVAL ''2'' MONTH') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsDate,'INTERVAL ''1 01:00:00.222'' DAY TO SECOND(3)') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsDate,'INTERVAL ''1 01:00:00.222'' DAY TO SECOND(3)') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsDate,'INTERVAL ''1 01:10'' DAY TO MINUTE') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsDate,'INTERVAL ''1 01:10'' DAY TO MINUTE') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsDate,'INTERVAL ''1 1'' DAY TO HOUR') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsDate,'INTERVAL ''1 1'' DAY TO HOUR') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsDate,'INTERVAL ''10'' DAY') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsDate,'INTERVAL ''10'' DAY') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsDate,'INTERVAL ''3:05'' HOUR TO MINUTE') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsDate,'INTERVAL ''3:05'' HOUR TO MINUTE') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsDate,'INTERVAL ''5'' HOUR') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsDate,'INTERVAL ''5'' HOUR') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsDate,'INTERVAL ''5:10'' MINUTE TO SECOND') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsDate,'INTERVAL ''5:10'' MINUTE TO SECOND') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsDate,'INTERVAL ''30'' MINUTE') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsDate,'INTERVAL ''30'' MINUTE') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsDate,'INTERVAL ''333'' HOUR(3)') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsDate,'INTERVAL ''333'' HOUR(3)') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsDate,'INTERVAL ''15.6789'' SECOND(2,3)') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsDate,'INTERVAL ''15.6789'' SECOND(2,3)') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(UnKnown,'INTERVAL ''1-1'' YEAR(2) TO MONTH') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEDIFF_UDF(UnKnown,'INTERVAL ''1-1'' YEAR(2) TO MONTH') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEADD_UDF(UnKnown,'INTERVAL ''2-1'' YEAR(4) TO MONTH') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEDIFF_UDF(UnKnown,'INTERVAL ''2-1'' YEAR(4) TO MONTH') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEADD_UDF(UnKnown,'INTERVAL ''1'' MONTH') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEDIFF_UDF(UnKnown,'INTERVAL ''1'' MONTH') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEADD_UDF(UnKnown,'INTERVAL ''2'' MONTH') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEDIFF_UDF(UnKnown,'INTERVAL ''2'' MONTH') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEADD_UDF(UnKnown,'INTERVAL ''1 01:00:00.222'' DAY TO SECOND(3)') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEDIFF_UDF(UnKnown,'INTERVAL ''1 01:00:00.222'' DAY TO SECOND(3)') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEADD_UDF(UnKnown,'INTERVAL ''1 01:10'' DAY TO MINUTE') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEDIFF_UDF(UnKnown,'INTERVAL ''1 01:10'' DAY TO MINUTE') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEADD_UDF(UnKnown,'INTERVAL ''1 1'' DAY TO HOUR') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEDIFF_UDF(UnKnown,'INTERVAL ''1 1'' DAY TO HOUR') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEADD_UDF(UnKnown,'INTERVAL ''10'' DAY') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEDIFF_UDF(UnKnown,'INTERVAL ''10'' DAY') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEADD_UDF(UnKnown,'INTERVAL ''3:05'' HOUR TO MINUTE') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEDIFF_UDF(UnKnown,'INTERVAL ''3:05'' HOUR TO MINUTE') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEADD_UDF(UnKnown,'INTERVAL ''5'' HOUR') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEDIFF_UDF(UnKnown,'INTERVAL ''5'' HOUR') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEADD_UDF(UnKnown,'INTERVAL ''5:10'' MINUTE TO SECOND') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEDIFF_UDF(UnKnown,'INTERVAL ''5:10'' MINUTE TO SECOND') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEADD_UDF(UnKnown,'INTERVAL ''30'' MINUTE') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEDIFF_UDF(UnKnown,'INTERVAL ''30'' MINUTE') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEADD_UDF(UnKnown,'INTERVAL ''333'' HOUR(3)') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEDIFF_UDF(UnKnown,'INTERVAL ''333'' HOUR(3)') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEADD_UDF(UnKnown,'INTERVAL ''15.6789'' SECOND(2,3)') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEDIFF_UDF(UnKnown,'INTERVAL ''15.6789'' SECOND(2,3)') FROM PUBLIC.UNKNOWN_TABLE;
Copy

결과

Oracle

Snowflake 작업

UDF

2022-12-05 11:00:00.000

2022-12-05 11:00:00.000

2022-12-05 11:00:00.000

2020-10-05 11:00:00.000

2020-10-05 11:00:00.000

2020-10-05 11:00:00.000

2023-12-05 11:00:00.000

2023-12-05 11:00:00.000

2023-12-05 11:00:00.000

2019-10-05 11:00:00.000

2019-10-05 11:00:00.000

2019-10-05 11:00:00.000

2021-12-05 11:00:00.000

2021-12-05 11:00:00.000

2021-12-05 11:00:00.000

2021-10-05 11:00:00.000

2021-10-05 11:00:00.000

2021-10-05 11:00:00.000

2022-01-05 11:00:00.000

2022-01-05 11:00:00.000

2022-01-05 11:00:00.000

2021-09-05 11:00:00.000

2021-09-05 11:00:00.000

2021-09-05 11:00:00.000

2021-11-06 12:00:00.222

2021-11-06 12:00:00.222

2021-11-06 12:00:00.222

2021-11-04 09:59:59.778

2021-11-04 09:59:59.778

2021-11-04 09:59:59.778

2021-11-06 12:10:00.000

2021-11-06 12:10:00.000

2021-11-06 12:10:00.000

2021-11-04 09:50:00.000

2021-11-04 09:50:00.000

2021-11-04 09:50:00.000

2021-11-06 12:00:00.000

2021-11-06 12:00:00.000

2021-11-06 12:00:00.000

2021-11-04 10:00:00.000

2021-11-04 10:00:00.000

2021-11-04 10:00:00.000

2021-11-15 11:00:00.000

2021-11-15 11:00:00.000

2021-11-15 11:00:00.000

2021-10-26 11:00:00.000

2021-10-26 11:00:00.000

2021-10-26 11:00:00.000

2021-11-05 14:05:00.000

2021-11-05 14:05:00.000

2021-11-05 14:05:00.000

2021-11-05 07:55:00.000

2021-11-05 07:55:00.000

2021-11-05 07:55:00.000

2021-11-05 16:00:00.000

2021-11-05 16:00:00.000

2021-11-05 16:00:00.000

2021-11-05 06:00:00.000

2021-11-05 06:00:00.000

2021-11-05 06:00:00.000

2021-11-05 11:05:10.000

2021-11-05 11:05:10.000

2021-11-05 11:05:10.000

2021-11-05 10:54:50.000

2021-11-05 10:54:50.000

2021-11-05 10:54:50.000

2021-11-05 11:30:00.000

2021-11-05 11:30:00.000

2021-11-05 11:30:00.000

2021-11-05 10:30:00.000

2021-11-05 10:30:00.000

2021-11-05 10:30:00.000

2021-11-19 08:00:00.000

2021-11-19 08:00:00.000

2021-11-19 08:00:00.000

2021-10-22 14:00:00.000

2021-10-22 14:00:00.000

2021-10-22 14:00:00.000

2021-11-05 11:00:15.679

2021-11-05 11:00:16.000

2021-11-05 11:00:15.678

2021-11-05 10:59:44.321

2021-11-05 10:59:44.000

2021-11-05 11:00:15.678

2022-12-06 00:00:00.000

2022-12-06

2022-12-06

2020-10-06 00:00:00.000

2020-10-06

2020-10-06

2023-12-06 00:00:00.000

2023-12-06

2023-12-06

2019-10-06 00:00:00.000

2019-10-06

2019-10-06

2021-12-06 00:00:00.000

2021-12-06

2021-12-06

2021-12-06 00:00:00.000

2021-10-06

2021-10-06

2022-01-06 00:00:00.000

2022-01-06

2022-01-06

2021-09-06 00:00:00.000

2021-09-06

2021-09-06

2021-11-07 01:00:00.000

2021-11-07 01:00:00.222

2021-11-07

2021-11-04 22:59:59.000

2021-11-04 22:59:59.778

2021-11-04

2021-11-07 01:10:00.000

2021-11-07 01:10:00.000

2021-11-07

2021-11-04 22:50:00.000

2021-11-04 22:50:00.000

2021-11-04

2021-11-07 01:00:00.000

2021-11-07 01:00:00.000

2021-11-07

2021-11-04 23:00:00.000

2021-11-04 23:00:00.000

2021-11-04

2021-11-16 00:00:00.000

2021-11-16

2021-11-16

2021-10-27 00:00:00.000

2021-10-27

2021-10-27

2021-11-06 03:05:00.000

2021-11-06 03:05:00.000

2021-11-06

2021-11-05 20:55:00.000

2021-11-05 20:55:00.000

2021-11-05

2021-11-06 05:00:00.000

2021-11-06 05:00:00.000

2021-11-06

2021-11-05 19:00:00.000

2021-11-05 19:00:00.000

2021-11-05

2021-11-06 00:05:10.000

2021-11-06 00:05:10.000

2021-11-06

2021-11-05 23:54:50.000

2021-11-05 23:54:50.000

2021-11-05

2021-11-06 00:30:00.000

2021-11-06 00:30:00.000

2021-11-06

2021-11-05 23:30:00.000

2021-11-05 23:30:00.000

2021-11-05

2021-11-19 21:00:00.000

2021-11-19 21:00:00.000

2021-11-19

2021-10-23 03:00:00.000

2021-10-23 03:00:00.000

2021-10-23

2021-11-06 00:00:15.000

2021-11-06 00:00:16.000

2021-11-06

2021-11-05 23:59:44.000

2021-11-05 23:59:44.000

2021-11-05

2010-11-01 12:00:00.000

2010-11-01 12:00:00.000

2010-11-01 12:00:00.000

2008-09-01 12:00:00.000

2008-09-01 12:00:00.000

2008-09-01 12:00:00.000

2011-11-01 12:00:00.000

2011-11-01 12:00:00.000

2011-11-01 12:00:00.000

2007-09-01 12:00:00.000

2007-09-01 12:00:00.000

2007-09-01 12:00:00.000

2009-11-01 12:00:00.000

2009-11-01 12:00:00.000

2009-11-01 12:00:00.000

2009-09-01 12:00:00.000

2009-09-01 12:00:00.000

2009-09-01 12:00:00.000

2009-12-01 12:00:00.000

2009-12-01 12:00:00.000

2009-12-01 12:00:00.000

2009-08-01 12:00:00.000

2009-08-01 12:00:00.000

2009-08-01 12:00:00.000

2009-10-02 13:00:00.222

2009-10-02 13:00:00.222

2009-10-02 13:00:00.222

2009-09-30 10:59:59.778

2009-09-30 10:59:59.778

2009-09-30 10:59:59.778

2009-10-02 13:10:00.000

2009-10-02 13:10:00.000

2009-10-02 13:10:00.000

2009-09-30 10:50:00.000

2009-09-30 10:50:00.000

2009-09-30 10:50:00.000

2009-10-02 13:00:00.000

2009-10-02 13:00:00.000

2009-10-02 13:00:00.000

2009-09-30 11:00:00.000

2009-09-30 11:00:00.000

2009-09-30 11:00:00.000

2009-10-11 12:00:00.000

2009-10-11 12:00:00.000

2009-10-11 12:00:00.000

2009-09-21 12:00:00.000

2009-09-21 12:00:00.000

2009-09-21 12:00:00.000

2009-10-01 15:05:00.000

2009-10-01 15:05:00.000

2009-10-01 15:05:00.000

2009-10-01 08:55:00.000

2009-10-01 08:55:00.000

2009-10-01 08:55:00.000

2009-10-01 17:00:00.000

2009-10-01 17:00:00.000

2009-10-01 17:00:00.000

2009-10-01 07:00:00.000

2009-10-01 07:00:00.000

2009-10-01 07:00:00.000

2009-10-01 12:05:10.000

2009-10-01 12:05:10.000

2009-10-01 12:05:10.000

2009-10-01 11:54:50.000

2009-10-01 11:54:50.000

2009-10-01 11:54:50.000

2009-10-01 12:30:00.000

2009-10-01 12:30:00.000

2009-10-01 12:30:00.000

2009-10-01 11:30:00.000

2009-10-01 11:30:00.000

2009-10-01 11:30:00.000

2009-10-15 09:00:00.000

2009-10-15 09:00:00.000

2009-10-15 09:00:00.000

2009-09-17 15:00:00.000

2009-09-17 15:00:00.000

2009-09-17 15:00:00.000

2009-10-01 12:00:15.679

2009-10-01 12:00:16.000

2009-10-01 12:00:15.678

2009-10-01 11:59:44.321

2009-10-01 11:59:44.000

2009-10-01 11:59:44.321

Known Issues

문제가 발견되지 않았습니다.

관련 EWIs

  1. SSC-FDM-OR0042: 타임스탬프로 변환된 날짜 유형의 동작이 다름

PL SQL 데이터 타입

BINARY_INTEGER 데이터 타입

이 데이터 타입은 PLS_INTEGER 데이터 타입과 동일합니다.

PLS_INTEGER 데이터 타입

설명

PLS_INTEGER 데이터 타입은 32비트로 표현되는 -2,147,483,648 ~ 2,147,483,647 범위의 부호 있는 정수를 저장합니다. (Oracle Language Reference PLS_INTEGER 데이터 타입)

PLS_INTEGER 데이터 타입은 NUMBER 로 변환됩니다. 이 변환은 각 PLS_INTEGER 하위 유형에도 적용됩니다.

  • NATURAL

  • NATURALN

  • POSITIVE

  • POSITIVEN

  • SIGNTYPE

  • SIMPLE_INTEGER

경고

이러한 하위 유형 중 일부는 현재 SnowConvert AI에서 인식되지 않으므로 VARIANT로 변환되고 사용자 정의 유형으로 간주됩니다. 문제를 해결하기 위한 작업 항목이 이미 있습니다.

샘플 소스 패턴

아래 예제에서 다음 테이블과 삽입 내용을 참조하십시오.

코드

CREATE TABLE PLS_INTEGER_TABLE(
	COL NUMBER
);
Copy

프로시저 블록에서 PLS_INTEGER 사용법

Oracle
CREATE OR REPLACE PROCEDURE PLS_INTEGER_EXAMPLE
IS
-- PLS_INTEGER AND BINARY INTEGER ALIASES
PLS_INTEGER_VAR PLS_INTEGER;
BINARY_INTEGER_VAR BINARY_INTEGER;

NUMBER_VAR NUMBER;
BEGIN
	NUMBER_VAR := 2;

	-- maximum possible value
	PLS_INTEGER_VAR := 2147483647;
	
	-- implicit cast to number
	INSERT INTO PLS_INTEGER_TABLE (COL) VALUES (PLS_INTEGER_VAR);
	PLS_INTEGER_VAR := 2147483647;
	
	-- operations with other numeric expressions
	INSERT INTO PLS_INTEGER_TABLE (COL) VALUES (PLS_INTEGER_VAR + 1);
	INSERT INTO PLS_INTEGER_TABLE (COL) VALUES (PLS_INTEGER_VAR + NUMBER_VAR);
END;

CALL PLS_INTEGER_EXAMPLE();
SELECT * FROM PLS_INTEGER_TABLE;
Copy
결과

COL

2147483647

2147483648

2147483649

Snowflake
CREATE OR REPLACE PROCEDURE PLS_INTEGER_EXAMPLE ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
	DECLARE
		-- PLS_INTEGER AND BINARY INTEGER ALIASES
		PLS_INTEGER_VAR NUMBER;
		BINARY_INTEGER_VAR NUMBER;

		NUMBER_VAR NUMBER(38, 18);
	BEGIN
		NUMBER_VAR := 2;
	-- maximum possible value
		PLS_INTEGER_VAR := 2147483647;

		-- implicit cast to number
		INSERT INTO PLS_INTEGER_TABLE(COL) VALUES (:PLS_INTEGER_VAR);
		PLS_INTEGER_VAR := 2147483647;

	-- operations with other numeric expressions
	INSERT INTO PLS_INTEGER_TABLE(COL) VALUES (:PLS_INTEGER_VAR + 1);
	INSERT INTO PLS_INTEGER_TABLE(COL) VALUES (:PLS_INTEGER_VAR + :NUMBER_VAR);
	END;
$$;

CALL PLS_INTEGER_EXAMPLE();

SELECT * FROM
	PLS_INTEGER_TABLE;
Copy
결과

COL

2147483647

2147483648

2147483649

Known Issues

1. Storage and performance features were not preserved

Oracle PLS_INTEGER 는 저장소 크기와 산술 작업의 성능 측면에서 몇 가지 장점이 있습니다. 이러한 기능은 Snowflake NUMBER 에 없기 때문에 에뮬레이션하지 않았습니다. 자세한 내용은 PLS_INTEGER 설명서를 참조하십시오.

관련 EWIs

관련 EWIs 없음.

문자 데이터 타입

문자 데이터 타입은 데이터베이스 문자 세트 또는 국가별 문자 세트에 단어와 자유 형식 텍스트인 문자(영숫자) 데이터를 저장합니다. (Oracle SQL 언어 참조 문자 데이터 타입)

CHAR 데이터 타입

설명

CHAR 데이터 타입은 데이터베이스 문자 세트에서 수정된 길이 문자 문자열을 지정합니다. (Oracle SQL Language Reference CHAR 데이터 타입)

Oracle 설명서의 설명과 같이 CHAR 데이터 타입의 크기는 길이 제약 조건이며 용량과 혼동해서는 안 됩니다. CHAR 에 저장할 수 있는 총 문자는 데이터베이스 문자 세트 및 구성에 따라 다를 수 있지만 일반적으로 허용되는 최대 크기는 2000입니다.

다음에서 확인할 수 있듯이 Snowflake에서 CHAR 유형은 VARCHAR 과 동의어입니다.

Snowflake SQL Language Reference 텍스트 데이터 타입

표준 최대 크기는 상당히 큽니다. 그러나 설명서의 설명과 같이 Snowflake VARCHAR 이 더 많은 저장소를 소비한다는 의미는 아닙니다.

VARCHAR(16777216) 열의 1문자 문자열은 한 문자만 소비합니다.

CHAR [ (size [ BYTE | CHAR ]) ]
Copy

샘플 소스 패턴

Create Table의 문자 데이터 타입

Oracle
CREATE TABLE char_data_types
(
	char_column1 CHAR,
	char_column2 CHAR(15),
	char_column3 CHAR(15 BYTE),
	char_column4 CHAR(15 CHAR)
);

INSERT INTO char_data_types VALUES ('H', 'Hello world', 'Hello world', 'Hello world');
Copy
Snowflake
CREATE OR REPLACE TABLE char_data_types
(
	char_column1 CHAR,
	char_column2 CHAR(15),
	char_column3 CHAR(15),
	char_column4 CHAR(15)
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;

INSERT INTO char_data_types
VALUES ('H', 'Hello world', 'Hello world', 'Hello world');
Copy

문자 열에서 데이터 검색하기

Oracle
SELECT * FROM char_data_types;
Copy
결과

CHAR_COLUMN1

CHAR_COLUMN2

CHAR_COLUMN3

CHAR_COLUMN4

H

Hello world

Hello world

Hello world

Snowflake
SELECT * FROM
char_data_types;
Copy
결과

CHAR_COLUMN1

CHAR_COLUMN2

CHAR_COLUMN3

CHAR_COLUMN4

H

Hello world

Hello world

Hello world

참고

Oracle에서는 열 정의에서 결정된 수정된 크기에 맞게 값이 빈 공간으로 채워집니다. 반면에 Snowflakes는 동적 크기(길이 제한 유지)를 사용하여 값을 저장합니다.

CHAR 의 내부 데이터 타입 확인

서두에서 언급했듯이 Snowflake는 내부적으로 CHAR 유형 열에 VARCHAR 를 사용하며, 테이블을 설명하면 이를 확인할 수 있습니다.

Oracle

Snowflake

참고

길이 제한은 유지되지만, 각 DBMS 에서 열이 사용하는 메모리 양은 다릅니다.

각 열의 크기를 바이트 단위로 검색하기:

Oracle
SELECT 
LENGTHB(char_column1),
LENGTHB(char_column2),
LENGTHB(char_column3),
LENGTHB(char_column4)  
FROM char_data_types;
Copy
결과

LENGTHB(CHAR_COLUMN1)

LENGTHB(CHAR_COLUMN2)

LENGTHB(CHAR_COLUMN3)

LENGTHB(CHAR_COLUMN4)

1

15

15

15

Snowflake
SELECT
OCTET_LENGTH(char_column1) /*** SSC-FDM-OR0015 - LENGTHB TRANSFORMED TO OCTET_LENGTH RESULTS MAY VARY DUE TO MEMORY MANAGEMENT OF DBMS ***/,
OCTET_LENGTH(char_column2) /*** SSC-FDM-OR0015 - LENGTHB TRANSFORMED TO OCTET_LENGTH RESULTS MAY VARY DUE TO MEMORY MANAGEMENT OF DBMS ***/,
OCTET_LENGTH(char_column3) /*** SSC-FDM-OR0015 - LENGTHB TRANSFORMED TO OCTET_LENGTH RESULTS MAY VARY DUE TO MEMORY MANAGEMENT OF DBMS ***/,
OCTET_LENGTH(char_column4) /*** SSC-FDM-OR0015 - LENGTHB TRANSFORMED TO OCTET_LENGTH RESULTS MAY VARY DUE TO MEMORY MANAGEMENT OF DBMS ***/
FROM
char_data_types;
Copy
결과

OCTET_LENGTH(CHAR_COLUMN1)

OCTET_LENGTH(CHAR_COLUMN2)

OCTET_LENGTH(CHAR_COLUMN3)

OCTET_LENGTH(CHAR_COLUMN4)

1

11

11

11

참고

이러한 미세한 차이 외에도 데이터의 무결성은 그대로 유지됩니다.

Known Issues

1. 일부 기본 제공 함수에서 얻은 결과는 다를 수 있습니다

이전 섹션에서 설명한 것처럼 열에 기본 제공 함수를 사용하면 다른 결과가 검색되는 경우가 있을 수 있습니다. 예를 들어, 열의 길이를 구합니다.

관련 EWIs

  1. SSC-FDM-OR0015: LENGTHB가 OCTET_LENGTH로 변환되었습니다.

NCHAR 데이터 타입

설명

NCHAR 데이터 타입은 국가 문자 세트에서 고정 길이 문자 문자열을 지정합니다. (Oracle SQL Language Reference NCHAR)

NCHAR 을 사용하면 특수 문자를 Unicode와 함께 저장할 수 있으므로 이러한 특수 문자를 저장하는 데 더 많은 비트가 필요할 수 있으므로 기본적으로 NCHAR 문자 세트는 AL16UTF16 이며, 일반적으로 CHAR 에 대한 일반적인 문자 데이터 세트는 AL32UTF8 입니다.

Snowflake에서 NCHAR 은 NCHAR 로 유지되지만, 백그라운드에서 Snowflake는 VARCHAR 을 사용합니다. CHAR 과 관련된 변환 정보는 NCHAR 에도 유효합니다.

NCHAR [ (size) ]

Copy

샘플 소스 패턴

Create Table의 Nchar 데이터 타입

Oracle
CREATE TABLE nchar_data_types
(
	nchar_column1 NCHAR,
	nchar_column2 NCHAR(5)
);

INSERT INTO nchar_data_types VALUES ('ភ', 'ភាសាខ');
Copy
Snowflake
CREATE OR REPLACE TABLE nchar_data_types
(
	nchar_column1 NCHAR,
	nchar_column2 NCHAR(5)
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;

INSERT INTO nchar_data_types
VALUES ('ភ', 'ភាសាខ');
Copy

참고

Oracle에서 이러한 값을 CHAR 열에 같은 크기로 삽입하려고 하면 오류가 트리거됩니다. 값이 열에 비해 너무 큽니다.

Nchar 열에서 정보 검색하기

Oracle
SELECT * FROM nchar_data_types;
Copy
결과

NCHAR_COLUMN1

NCHAR_COLUMN2

ភាសាខ

Snowflake
SELECT * FROM
nchar_data_types;
Copy
결과

NCHAR_COLUMN1

NCHAR_COLUMN2

ភាសាខ

각 열의 바이트 단위 크기 검색하기

Oracle
SELECT 
LENGTHB(nchar_column1),
LENGTHB(nchar_column2)
FROM nchar_data_types;
Copy
결과

LENGTHB(NCHAR_COLUMN1)

LENGTHB(NCHAR_COLUMN2)

                 2|                    10|
Copy
Snowflake
SELECT
OCTET_LENGTH(nchar_column1) /*** SSC-FDM-OR0015 - LENGTHB TRANSFORMED TO OCTET_LENGTH RESULTS MAY VARY DUE TO MEMORY MANAGEMENT OF DBMS ***/,
OCTET_LENGTH(nchar_column2) /*** SSC-FDM-OR0015 - LENGTHB TRANSFORMED TO OCTET_LENGTH RESULTS MAY VARY DUE TO MEMORY MANAGEMENT OF DBMS ***/
FROM
nchar_data_types;
Copy
결과

OCTET_LENGTH(NCHAR_COLUMN1)

OCTET_LENGTH(NCHAR_COLUMN2)

                      3|                         15|
Copy

열 선언에 지정된 숫자는 바이트 단위가 아닌 문자 단위의 크기이므로 특수 문자를 저장하는 데 더 많은 공간이 사용되는 것을 볼 수 있습니다.

참고

Snowflake에서 VARCHAR 은 UTF-8 을 사용하며, 크기는 1, 2, 3 또는 4 바이트 단위로 표현할 수 있는 Unicode 문자에 따라 달라질 수 있습니다. 이 경우 캄보디아어 문자는 3바이트를 사용하여 저장됩니다.

참고

이러한 미세한 차이 외에도 데이터의 무결성은 그대로 유지됩니다.

Known Issues

1. 일부 기본 제공 함수에서 얻은 결과는 다를 수 있습니다

이전 섹션에서 설명한 것처럼 열에 기본 제공 함수를 사용하면 다른 결과가 검색되는 경우가 있을 수 있습니다. 예를 들어, 열의 길이를 구합니다.

관련 EWIs

  1. SSC-FDM-OR0015: LENGTHB가 OCTET_LENGTH로 변환되었습니다.

NVARCHAR2 데이터 타입

설명

NVARCHAR2 데이터 타입은 국가 문자 세트에서 가변 길이의 문자열을 지정합니다. (Oracle SQL Language Reference NVARCHAR2)

NVARCHAR2 (size)

Copy

NVARCHAR2 를 사용하면 특수 문자를 Unicode와 함께 저장할 수 있으므로 이러한 특수 문자를 저장하는 데 더 많은 비트가 필요할 수 있으므로 기본적으로 NVARCHAR2 문자 세트는 AL16UTF16 이며, 일반적으로 VARCHAR2 에 대한 일반적인 문자 데이터 세트는 AL32UTF8 입니다.

NVARCHAR에서 Snowflake VARCHAR로의 변환 VARCHAR2와 관련된 변환 정보도 NVARCHAR2에 유효합니다.

NVARCHAR2 (size)

Copy

샘플 소스 패턴

Create Table의 Nvarchar2 데이터 타입

Oracle
CREATE TABLE nvarchar2_data_types
(
	nvarchar2_column NVARCHAR2 (5)
);

INSERT INTO nvarchar2_data_types VALUES ('ភាសាខ');
Copy
Snowflake
CREATE OR REPLACE TABLE nvarchar2_data_types
	(
		nvarchar2_column VARCHAR(5)
	)
	COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
	;

	INSERT INTO nvarchar2_data_types
	VALUES ('ភាសាខ');
Copy

참고

Oracle에서 이러한 값을 VARCHAR2 열에 같은 크기로 삽입하려고 하면 오류가 트리거됩니다. 값이 열에 비해 너무 큽니다.

Nchar 열에서 정보 검색하기

Oracle
SELECT * FROM nvarchar2_data_types;
Copy
결과

NVARCHAR2_COLUMN

ភាសាខ

Snowflake
SELECT * FROM
nvarchar2_data_types;
Copy
결과

NVARCHAR2_COLUMN

ភាសាខ

각 열의 바이트 단위 크기 검색하기

Oracle
SELECT 
LENGTHB(nvarchar2_column)
FROM nvarchar2_data_types;
Copy
결과

LENGTHB(NVARCHAR2_COLUMN)

10

Snowflake
SELECT
OCTET_LENGTH(nvarchar2_column) /*** SSC-FDM-OR0015 - LENGTHB TRANSFORMED TO OCTET_LENGTH RESULTS MAY VARY DUE TO MEMORY MANAGEMENT OF DBMS ***/
FROM
nvarchar2_data_types;
Copy
결과

OCTET_LENGTH(NVARCHAR2_COLUMN)

15

열 선언에 지정된 숫자는 바이트 단위가 아닌 문자 단위의 크기이므로 특수 문자를 저장하는 데 더 많은 공간이 사용되는 것을 볼 수 있습니다.

참고

Snowflake에서 VARCHAR 은 UTF-8 을 사용하며, 크기는 1, 2, 3 또는 4 바이트 단위로 표현할 수 있는 Unicode 문자에 따라 달라질 수 있습니다. 이 경우 캄보디아어 문자는 3바이트를 사용하여 저장됩니다.

참고

이러한 미세한 차이 외에도 데이터의 무결성은 그대로 유지됩니다.

Known Issues

1. 일부 기본 제공 함수에서 얻은 결과는 다를 수 있습니다

이전 섹션에서 설명한 것처럼 열에 기본 제공 함수를 사용하면 다른 결과가 검색되는 경우가 있을 수 있습니다. 예를 들어, 열의 길이를 구합니다.

관련 EWIs

  1. SSC-FDM-OR0015: LENGTHB가 OCTET_LENGTH로 변환되었습니다.

VARCHAR 데이터 타입

설명

Oracle은 설명서의 설명과 같이 VARCHAR 대신 VARCHAR2 을 사용할 것을 권장합니다.

Oracle SQL Language reference Varchar

그럼에도, 구문은 ANSI, DB2 및 SQL/DS 데이터 타입을 사용하여 구문 분석되고 변환됩니다.

VARCHAR2 데이터 타입

설명

VARCHAR2 데이터 타입은 데이터베이스 문자 세트에 변수 길이 문자열을 지정합니다. (Oracle SQL Language Reference VARCHAR2)

Oracle 설명서의 설명과 같이 VARCHAR2 데이터 타입의 크기는 길이 제약 조건이며 용량과 혼동해서는 안 됩니다. VARCHAR2 에 저장할 수 있는 총 문자는 데이터베이스 문자 세트 및 구성에 따라 다를 수 있지만 일반적으로 허용되는 최대 크기는 4000자입니다.

VARCHAR2 는 기본적으로 더 많은 바이트/문자를 저장할 수 있는 Snowflake VARCHAR 로 변환됩니다. 어느 쪽이든 사용되는 메모리는 Oracle에서와 마찬가지로 열에 저장된 값의 크기를 사용하여 가변적입니다.

VARCHAR2 (size [ BYTE | CHAR ])
Copy

샘플 소스 패턴

Create Table의 Varchar2 데이터 타입

Oracle
CREATE TABLE varchar2_data_types
(
	varchar2_column1 VARCHAR2(5),
	varchar2_column2 VARCHAR2(5 BYTE),
	varchar2_column3 VARCHAR2(5 CHAR)
);

INSERT INTO varchar2_data_types VALUES ('H', 'Hello', 'Hell');
Copy
Snowflake
CREATE OR REPLACE TABLE varchar2_data_types
	(
		varchar2_column1 VARCHAR(5),
		varchar2_column2 VARCHAR(5),
		varchar2_column3 VARCHAR(5)
	)
	COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
	;

	INSERT INTO varchar2_data_types
	VALUES ('H', 'Hello', 'Hell');
Copy

varchar 열에서 데이터 검색하기

Oracle
SELECT * FROM varchar2_data_types;
Copy
결과

VARCHAR2_COLUMN1

VARCHAR2_COLUMN2

VARCHAR2_COLUMN3

H

Hello

Hell

Snowflake
SELECT * FROM
varchar2_data_types;
Copy
결과

VARCHAR2_COLUMN1

VARCHAR2_COLUMN2

VARCHAR2_COLUMN3

H

Hello

Hell

열의 변수 크기 검토하기

Oracle
SELECT
LENGTHB(varchar2_column1),
LENGTHB(varchar2_column2),
LENGTHB(varchar2_column3) 
FROM VARCHAR2_DATA_TYPES;
Copy
결과

LENGTHB(VARCHAR2_COLUMN1)

LENGTHB(VARCHAR2_COLUMN2)

LENGTHB(VARCHAR2_COLUMN3)

1

5

4

Snowflake
SELECT
OCTET_LENGTH(varchar2_column1) /*** SSC-FDM-OR0015 - LENGTHB TRANSFORMED TO OCTET_LENGTH RESULTS MAY VARY DUE TO MEMORY MANAGEMENT OF DBMS ***/,
OCTET_LENGTH(varchar2_column2) /*** SSC-FDM-OR0015 - LENGTHB TRANSFORMED TO OCTET_LENGTH RESULTS MAY VARY DUE TO MEMORY MANAGEMENT OF DBMS ***/,
OCTET_LENGTH(varchar2_column3) /*** SSC-FDM-OR0015 - LENGTHB TRANSFORMED TO OCTET_LENGTH RESULTS MAY VARY DUE TO MEMORY MANAGEMENT OF DBMS ***/
FROM
VARCHAR2_DATA_TYPES;
Copy
결과

OCTET_LENGTH(VARCHAR2_COLUMN1)

OCTET_LENGTH(VARCHAR2_COLUMN2)

OCTET_LENGTH(VARCHAR2_COLUMN3)

1

5

4

Known Issues

문제가 발견되지 않았습니다.

관련 EWIs

  1. SSC-FDM-OR0015: LENGTHB가 OCTET_LENGTH로 변환되었습니다.

LOB 데이터 타입

설명

기본 제공 LOB 데이터 타입 BLOB, CLOB, NCLOB(내부에 저장됨) 및 BFILE(외부에 저장됨)은 텍스트, 이미지, 비디오, 공간 데이터와 같은 대규모 비정형 데이터를 저장할 수 있습니다(Oracle SQL 언어 참조 LOB 데이터 타입).

BFILE
BLOB
CLOB
NCLOB
Copy

경고

LOB 데이터 타입은 Snowflake에서 지원되지 않습니다. Snowflake 설명서에 따라 CLOBVARCHAR로, BLOBBINARY로 변환하는 것이 좋지만 몇 가지 제한 사항이 있습니다. {% endhint %}

경고

테이블에 대한 LOB 속성도 Snowflake에서 지원되지 않습니다. {% endhint %}

BFILE 데이터 타입

Description

데이터베이스 외부에 저장된 큰 이진 파일에 대한 로케이터가 포함되어 있습니다. 데이터베이스 서버에 있는 외부 LOBs 에 대한 바이트 스트림 I/O 액세스를 활성화합니다. BFILE 열 또는 특성은 서버 파일 시스템의 이진 파일에 대한 포인터 역할을 하는 BFILE 로케이터를 저장합니다. 로케이터는 디렉터리 이름과 파일 이름을 유지합니다. (Oracle SQL Language Reference BFILE 데이터 타입).

경고

BFILE 데이터 타입은 Snowflake에서 지원되지 않습니다. VARCHAR 이 대신 사용됩니다.

샘플 소스 패턴

Create Table의 Bfile 데이터 타입

경고

Oracle BFILE 열은 디렉터리 및 파일 이름과 함께 로케이터를 저장하는 데 사용됩니다. 디렉터리와 파일 이름을 열에 저장하기 위해 Snowflake VARCHAR 로 변경합니다. 그러나 파일의 내용을 로딩하는 작업은 수동으로 수행해야 합니다.

Oracle
--Create Table
CREATE TABLE bfile_table 
(
    col1 BFILE 
);

--Insert Bfilename
INSERT INTO bfile_table VALUES (
    BFILENAME('mydirectory', 'myfile.png')
);

--Select
SELECT * FROM bfile_table;
Copy
결과

COL1

[BFILE:myfile.png]

Snowflake
--Create Table
CREATE OR REPLACE TABLE bfile_table
    (
        col1
    !!!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 Bfilename
INSERT INTO bfile_table
VALUES (PUBLIC.BFILENAME_UDF('mydirectory', 'myfile.png')
);

--Select
SELECT * FROM
    bfile_table;
Copy
결과

COL1

mydirectory\myfile.png

경고

UDF 는 BFILENAME() 을 대체하기 위해 추가되었습니다.

UDF 추가됨

CREATE OR REPLACE FUNCTION PUBLIC.BFILENAME_UDF (DIRECTORYNAME STRING, FILENAME STRING)
RETURNS STRING
LANGUAGE SQL
IMMUTABLE 
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"udf"}}'
AS
$$
	DIRECTORYNAME || '\\' || FILENAME
$$;
Copy

Known Issues

1. No access to the DBMS_LOB built-in package

LOB 데이터 타입은 Snowflake에서 지원되지 않으므로 DBMS_LOB 함수에 상응하는 기능이 없으며 아직 구현된 해결 방법이 없습니다.

관련 EWIs

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

BLOB 데이터 타입

설명

BLOB 데이터 타입은 비정형 이진 대형 오브젝트를 저장합니다. BLOB 오브젝트는 문자 집합 의미 체계가 없는 비트스트림으로 생각할 수 있습니다. (Oracle SQL Language Reference BLOB 데이터 타입).

경고

BLOB 데이터 타입은 Snowflake에서 지원되지 않습니다. BINARY 가 대신 사용됩니다.

샘플 소스 패턴

Create Table의 BLOB

Oracle
CREATE TABLE blobtable( blob_column BLOB, empty_column BLOB );

INSERT INTO blobtable VALUES (NULL, EMPTY_BLOB());
Copy
Snowflake
CREATE OR REPLACE TABLE blobtable ( blob_column BINARY,
empty_column BINARY
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;

INSERT INTO blobtable
VALUES (NULL, TO_BINARY(' '));
Copy

데이터 검색하기

Oracle
SELECT * FROM blobtable;
Copy
결과

BLOB_COLUMN

EMPTY_COLUMN

[NULL]

[BLOB]

Snowflake
SELECT * FROM
blobtable;
Copy
결과

BLOB_COLUMN

EMPTY_COLUMN

NULL

함수 예제

경고

이 예는 SnowConvert AI의 변환이 아니며, Oracle BLOB과 Snowflake BINARY 간의 기능적 동등성을 보여주는 데만 사용됩니다.

경고

Snowflake는 “utl_raw.cast_to_raw” 및 “DBMS_LOB.SUBSTR” 함수를 사용합니다. 이러한 함수에 대한 변환은 현재 SnowConvert 에서 지원되지 않습니다.

Oracle
INSERT INTO blobtable VALUES(
utl_raw.cast_to_raw('hello world'), EMPTY_BLOB());

SELECT DBMS_LOB.SUBSTR(blob_column) AS result
FROM blobtable;
Copy
결과

RESULT

[NULL]

hello world

Snowflake
INSERT INTO blobtable
VALUES(
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0076 - TRANSLATION FOR BUILT-IN PACKAGE 'utl_raw.cast_to_raw' IS NOT CURRENTLY SUPPORTED. ***/!!!
'' AS cast_to_raw, TO_BINARY(' '));


SELECT
SUBSTR(blob_column, 1) AS result
FROM
blobtable;
Copy
결과

RESULT

[NULL]

hello world

Known Issues

1. The difference in max length BLOB (Oracle) and BINARY (Snowflake)

Oracle BLOB 열의 최대 크기는 (4기가바이트-1) * (데이터베이스 블록 크기) 이지만, Snowflake BINARY 8MB 로 제한됩니다.

2. Empty value with EMPTY_BLOB

EMPTY_BLOB() 을 사용하여 열을 초기화하면 빈 LOB 위치가 반환됩니다. 변환 후 열은 ‘ ‘ 문자열을 반환합니다.

3. No access to the DBMS_LOB built-in package

LOB 데이터 타입은 Snowflake에서 지원되지 않으므로 DBMS_LOB 함수에 상응하는 기능이 없으며 아직 구현된 해결 방법이 없습니다.

관련 EWIs

  1. SSC-EWI-OR0076: 기본 제공 패키지는 지원되지 않습니다.

CLOB 데이터 타입

설명

단일 바이트 또는 멀티바이트 문자를 포함하는 문자 크기 오브젝트입니다. 데이터베이스 문자 세트를 사용하여 고정 너비 및 가변 너비 문자 세트가 모두 지원됩니다. (Oracle SQL Language Reference CLOB 데이터 타입).

경고

CLOB 데이터 타입은 Snowflake에서 지원되지 않습니다. VARCHAR 이 대신 사용됩니다.

샘플 소스 패턴

Create Table의 CLOB

Oracle
CREATE TABLE clobtable ( clob_column CLOB, empty_column CLOB );

INSERT INTO clobtable VALUES ( 'THIS IS A TEST', EMPTY_CLOB() );
Copy
Snowflake
CREATE OR REPLACE TABLE clobtable ( clob_column VARCHAR,
empty_column VARCHAR
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;

INSERT INTO clobtable
VALUES ( 'THIS IS A TEST', TO_VARCHAR(' - '));
Copy

데이터 검색하기

Oracle
SELECT * FROM clobtable;
Copy
결과

CLOB_COLUMN

EMPTY_COLUMN

THIS IS A TEST

Snowflake
SELECT * FROM
clobtable;
Copy
결과

CLOB_COLUMN

EMPTY_COLUMN

THIS IS A TEST

-

Known Issues

1. The difference in max length CLOB (Oracle) and VARCHAR (Snowflake)

Oracle CLOB 열의 최대 크기는 (4기가바이트-1) * (데이터베이스 블록 크기) 이지만, Snowflake VARCHAR 16MB 로 제한됩니다.

2. Empty value with EMPTY_CLOB

EMPTY_CLOB() 을 사용하여 열을 초기화하면 빈 LOB 위치가 반환됩니다. Snowflake에서 변환 후 열은 ‘-’ 문자열을 반환합니다.

3. No access to the DBMS_LOB built-in package

LOB 데이터 타입은 Snowflake에서 지원되지 않으므로 DBMS_LOB 함수에 상응하는 기능이 없으며 아직 구현된 해결 방법이 없습니다.

관련 EWIs

관련 EWIs 없음.

NCLOB 데이터 타입

설명

유니코드 문자를 포함하는 문자 대형 오브젝트입니다. 데이터베이스 국가 문자 세트를 사용하여 고정 너비 및 가변 너비 문자 세트가 모두 지원됩니다. (Oracle SQL Language Reference NCLOB 데이터 타입).

경고

NCLOB 데이터 타입은 Snowflake에서 지원되지 않습니다. VARCHAR 이 대신 사용됩니다.

샘플 소스 패턴

Create Table의 NCLOB

Oracle
CREATE TABLE nclobtable ( nclob_column NCLOB, empty_column NCLOB );

INSERT INTO nclobtable VALUES ( 'THIS IS A TEST', EMPTY_CLOB() );
Copy
Snowflake
CREATE OR REPLACE TABLE nclobtable ( nclob_column VARCHAR,
empty_column VARCHAR
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;

INSERT INTO nclobtable
VALUES ( 'THIS IS A TEST', TO_VARCHAR(' - '));
Copy

데이터 검색하기

Oracle
SELECT * FROM nclobtable;
Copy
결과

NCLOB_COLUMN

EMPTY_COLUMN

THIS IS A TEST

Snowflake
SELECT * FROM
nclobtable;
Copy
결과

NCLOB_COLUMN

EMPTY_COLUMN

THIS IS A TEST

-

Known Issues

1. The difference in max length CLOB (Oracle) and VARCHAR (Snowflake)

Oracle NCLOB 열의 최대 크기는 (4기가바이트 - 1) * (데이터베이스 블록 크기) 이지만, Snowflake VARCHAR 16MB 로 제한됩니다.

2. Empty value with EMPTY_CLOB

EMPTY_CLOB() 을 사용하여 열을 초기화하면 빈 LOB 위치가 반환됩니다. 변환 후 열은 ‘-’ 문자열을 반환합니다.

3. No access to the DBMS_LOB built-in package

LOB 데이터 타입은 Snowflake에서 지원되지 않으므로 DBMS_LOB 함수에 상응하는 기능이 없으며 아직 구현된 해결 방법이 없습니다.

관련 EWIs

관련 EWIs 없음.