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, NVARCHAR2 및 RAW 확장 데이터 타입은 Snowflake에서 지원되지 않으며, 일반 VARCHAR2, NVARCHAR2 및 RAW 데이터 타입처럼 변환됩니다. 자세한 내용은 문자 데이터 타입 및 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
샘플 소스 패턴¶
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;
결과¶
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;
경고
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;
결과 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;
결과 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¶
SSC-EWI-0073: 기능적 동등성 검토 보류 중
LONG 데이터 타입¶
LONG열은 최대 2기가바이트 -1 또는 231-1 바이트의 가변 길이 문자 문자열을 저장합니다.LONG열은VARCHAR2열의 많은 특성을 가지고 있습니다.LONG열을 사용하여 긴 텍스트 문자열을 저장할 수 있습니다.LONG값의 길이는 컴퓨터에서 사용 가능한 메모리에 의해 제한될 수 있습니다. (Oracle SQL Language Reference long 데이터 타입)
LONG
샘플 소스 패턴¶
Create Table의 long¶
Oracle¶
CREATE TABLE long_table
(
id NUMBER,
long_column LONG
);
INSERT INTO long_table VALUES (1, 'this is a text');
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');
긴 열에서 데이터 검색하기¶
Oracle¶
SELECT long_column FROM long_table;
결과¶
LONG_COLUMN |
|---|
텍스트입니다 |
Snowflake¶
SELECT long_column FROM
long_table;
결과¶
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);
경고
대상 테이블 열 데이터 타입이 CLOB 와 다른 경우 데이터를 삽입하려고 할 때 Oracle에서 null 값을 삽입하거나 오류를 표시할 수 있습니다.
관련 EWIs¶
SSC-FDM-0006: 숫자 유형 열이 Snowflake에서 유사하게 동작하지 않을 수 있음
RAW 및 LONG RAW 데이터 타입¶
설명¶
RAW및LONGRAW데이터 타입은 서로 다른 시스템 간에 데이터를 이동할 때 Oracle 데이터베이스에서 명시적으로 변환하지 않는 데이터를 저장합니다. 이러한 데이터 타입은 이진 데이터 또는 바이트 문자열을 위한 것입니다. (Oracle SQL Language Reference 행 및 Long 원시 데이터 타입)
{ LONG RAW | RAW (size) }
샘플 소스 패턴¶
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')
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');
원시 및 Long 원시 열에서 데이터 검색하기¶
Oracle¶
SELECT * FROM raw_table ORDER BY id;
결과¶
ID |
RAW_COLUMN |
LONG_RAW_COLUMN |
|---|---|---|
1 |
ªº««««© 2 B7 :ºººº«ºª»¬ßý |
|
2 |
ªªªªª |
«««««««««««««««««««ªººªºººººººººº |
3 |
ªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªª |
ªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªª |
Snowflake¶
SELECT * FROM
raw_table
ORDER BY id;
결과¶
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);
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);
FLOAT¶
전체 자릿수가 없는 FLOAT 데이터 타입의 경우 Oracle과 Snowflake 간에 차이가 없습니다.
Oracle¶
SELECT col1 FROM float_data_type_table;
결과¶
col1 |
|---|
100.55555 |
1.9 |
Snowflake¶
SELECT col1 FROM
float_data_type_table;
결과¶
col1 |
|---|
100.55555 |
1.9 |
FLOAT ( p )¶
FLOAT 데이터 타입에 (p) 전체 자릿수가 지정되면 쿼리 결과가 동일하지 않을 수 있습니다. 작은 반올림 차이가 있습니다.
Oracle¶
SELECT col2 FROM float_data_type_table;
SELECT col3 FROM float_data_type_table;
결과¶
col2 |
|---|
1.2 |
7.9 |
13 |
120 |
col3 |
—————————————————————————————————- |
1111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000 |
Snowflake¶
SELECT col2 FROM
float_data_type_table;
SELECT col3 FROM
float_data_type_table;
결과¶
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);
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);
NUMBER (기본 케이스)¶
전체 자릿수와 스케일이 지정되지 않은 경우 기본값은 사용 가능한 최대 NUMBER(38, 127) 입니다. 기본 케이스의 현재 변환은 NUMBER(38,19) 입니다.
경고
Oracle에서는 전체 자릿수나 스케일을 정의하지 않으면 기본값이 “정의되지 않은 전체 자릿수 및 스케일”로 설정됩니다. 입력값을 ‘받은 대로’ 저장하는 방식으로 작동하므로 정수와 부동 소수점 숫자를 모두 처리할 수 있습니다. 38, 18 을 사용하여 정수에 20을 사용하고 부동 소수점 자릿수에 18을 남겨서 두 가지를 모두 처리하려고 시도합니다.
Oracle¶
SELECT col1 FROM number_data_type_table;
결과¶
col1 |
|---|
100 |
Snowflake¶
SELECT col1 FROM
number_data_type_table;
결과¶
col1 |
|---|
100.0000000000000000000 |
NUMBER ( p )¶
이 경우 전체 자릿수는 소수점 왼쪽에 숫자가 가질 수 있는 자릿수를 지정합니다.
Oracle¶
SELECT col2 FROM number_data_type_table;
결과¶
col2 |
|---|
2 |
Snowflake¶
SELECT col2 FROM
number_data_type_table;
결과¶
col2 |
|---|
2 |
NUMBER ( p, s ) p > s¶
s 가 p 보다 낮은 경우 전체 자릿수는 숫자가 가질 수 있는 자릿수를 지정합니다. 스케일은 소수점 오른쪽의 유효 자릿수를 지정하므로 소수점 왼쪽의 자릿수는 지정된 스케일에 따라 달라집니다.
Oracle¶
SELECT col3 FROM number_data_type_table;
결과¶
col3 |
|---|
12345.12345 |
Snowflake¶
SELECT col3 FROM
number_data_type_table;
결과¶
col3 |
|---|
12345.12345 |
NUMBER ( p, -s )¶
음수 스케일은 소수점 왼쪽의 소수 자릿수에서 가장 작은 자릿수를 제외한 나머지 자릿수입니다. 음수 스케일의 경우 실제 데이터가 소수점 왼쪽에서 지정된 소수점 이하 자리 수로 반올림되므로 소수점 이하 자릿수가 소수점 왼쪽에 있습니다. 현재 변환은 음수 스케일을 제거하는 것입니다.
Oracle¶
SELECT col4 FROM number_data_type_table;
결과¶
col4 |
|---|
16400 |
17600 |
Snowflake¶
SELECT col4 FROM
number_data_type_table;
결과¶
col4 |
|---|
16431 |
17551 |
NUMBER ( p, s ) s > p¶
스케일이 전체 자릿수보다 큰 경우 다음 측면을 고려하십시오.
삽입할 숫자의 소수점 왼쪽에는 소수 자릿수가 있을 수 없습니다. 0만 사용할 수 있습니다.
소수점 오른쪽의 첫 번째 자릿수는 0이어야 합니다.
전체 자릿수는 소수점 오른쪽에 있는 최대 유효 자릿수를 지정합니다.
Oracle¶
SELECT col5 FROM number_data_type_table;
결과¶
col5 |
|---|
0.00009 |
0.00002 |
0.01268 |
Snowflake¶
SELECT col5 FROM
number_data_type_table;
결과¶
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);
}
}';
관련 EWIs¶
SSC-EWI-OR0092 숫자 데이터 타입 음수 소수 자릿수가 출력에서 제거되었습니다.
SSC-FDM-0006: 숫자 유형 열이 Snowflake에서 유사하게 동작하지 않을 수 있음
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');
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');
참고
‘NaN’ 은 _ Not a Number _를 의미하며, 이 값은 Oracle의 BINARY_DOUBLE 데이터 타입과 Snowflake의 FLOAT 데이터 타입에서 허용됩니다.
BINARY_DOUBLE -> FLOAT¶
BINARY_DOUBLE 데이터 타입은 Snowflake에서 지원되지 않으므로 FLOAT 로 변환하는 중입니다.
Oracle¶
SELECT * FROM binary_double_data_type_table;
결과¶
col1 |
|---|
0 |
179769313486231000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 |
NaN |
Snowflake¶
SELECT * FROM
binary_double_data_type_table;
결과¶
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');
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');
참고
‘NaN’ 은 _ Not a Number _를 의미하며, 이 값은 Oracle의 BINARY_FLOAT 데이터 타입과 Snowflake의 FLOAT 데이터 타입에서 허용됩니다.
BINARY_FLOAT -> FLOAT¶
BINARY_FLOAT 데이터 타입은 Snowflake에서 지원되지 않으므로 FLOAT 로 변환하는 중입니다.
Oracle¶
SELECT * FROM binary_float_data_type_table;
결과¶
col1 |
|---|
0 |
340282001837565600000000000000000000000 |
NaN |
Snowflake¶
SELECT * FROM binary_float_data_type_table;
결과¶
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,TIMESTAMPWITHTIMEZONE,TIMESTAMPWITHLOCALTIMEZONE입니다. 날짜/시간 데이터 타입의 값을 날짜/시간이라고도 합니다. 간격 데이터 타입은INTERVALYEARTOMONTH,INTERVALDAYTOSECOND입니다. 간격 데이터 타입의 값을 간격이라고도 합니다(Oracle SQL 언어 참조 날짜/시간 및 간격 데이터 타입).
DATE 데이터 타입¶
설명¶
Oracle의 날짜 데이터 타입은 날짜와 시간 정보를 모두 저장하지만, Snowflake의 날짜 데이터 타입은 날짜 정보만 저장합니다. (Oracle SQL Language Reference 날짜 데이터 타입)
Oracle DATE의 기본 변환은 Snowflake TIMESTAMP로의 변환입니다. DATE 타입을 TIMESTAMP로 변환하기 위해 disableDateAsTimestamp 플래그(SnowConvert AI 명령줄 인터페이스)를 추가하거나 날짜를 타임스탬프로 변환 설정(SnowConvert AI 데스크톱 애플리케이션)을 비활성화할 수 있습니다. Snowflake DATE는 날짜 정보만 저장하고 Oracle은 날짜 및 시간 정보를 저장하므로, 정보 손실을 방지하려면 DATE를 TIMESTAMP로 변환해야 합니다.
참고
중요한 반올림 동작 차이점: 날짜/타임스탬프 데이터 타입과 초가 포함된 간격 사이에서 연산을 수행할 때, Oracle은 초를 반올림하지 않고 지정된 대로 전체 자릿수를 유지하는 반면, Snowflake는 초를 가장 가까운 정수 초로 반올림합니다. 반올림 동작의 이러한 차이로 인해 다른 결과가 발생할 수 있습니다.
샘플 소스 패턴¶
Create Table의 날짜¶
Oracle¶
CREATE TABLE date_table
(
date_col date
);
INSERT INTO date_table(date_col) VALUES (DATE '2010-10-10');
–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');
–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');
날짜 열에서 데이터 검색하기¶
Oracle¶
SELECT date_col FROM date_table;
결과¶
DATE_COL |
|---|
2010-10-10 00:00:00.000 |
Snowflake¶
SELECT date_col FROM
date_table;
결과¶
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';
관련 EWIs¶
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)]
샘플 소스 패턴¶
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) );
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');
간격 값은 지원되는 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;
결과¶
INTERVAL_DAY_COL1 |
INTERVAL_DAY_COL2 |
|---|---|
1 2:3:4.567 |
|
1 2:3:4.567 |
Snowflake¶
SELECT * FROM
interval_day_to_second_table;
결과¶
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 또는 TIMESTAMP 및 Interval Constants 간의 산술 연산만 지원되며, 다른 모든 시나리오는 지원되지 않습니다.
관련 EWIs¶
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
샘플 소스 패턴¶
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 );
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');
간격 값은 지원되는 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;
결과¶
INTERVAL_YEAR_COL1 |
INTERVAL_YEAR_COL2 |
|---|---|
1-2 |
|
1000-11 |
Snowflake¶
SELECT * FROM
interval_year_to_month_table;
결과¶
INTERVAL_YEAR_COL1 |
INTERVAL_YEAR_COL2 |
|---|---|
1년, 2분 |
|1000y, 11m |
Known Issues¶
1. Only arithmetic operations are supported¶
Snowflake 간격에는 몇 가지 제한 사항이 있습니다. DATE 또는 TIMESTAMP 및 Interval 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)]
샘플 소스 패턴¶
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');
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');
타임스탬프 열에서 데이터 검색하기¶
Oracle¶
SELECT * FROM timestamp_table;
결과¶
TIMESTAMP_COL1 |
TIMESTAMP_COL2 |
|---|---|
2010-10-10 12:00:00.000 |
2010-10-10 12:00:00.000 |
Snowflake¶
SELECT * FROM
timestamp_table;
결과¶
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
샘플 소스 패턴¶
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');
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');
현지 타임존 열이 있는 타임스탬프에서 데이터 검색하기¶
Oracle¶
SELECT * FROM timestamp_with_local_time_zone_table;
결과¶
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;
결과¶
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;
Known Issues¶
1. Default database timezone¶
이러한 종류의 데이터 타입을 사용하는 작업은 데이터베이스 표준 시간대의 영향을 받으며 결과가 달라질 수 있습니다. 다음 쿼리를 사용하여 기본 타임존을 확인할 수 있습니다.
Oracle¶
SELECT dbtimezone FROM dual;
Snowflake¶
SELECT dbtimezone FROM dual;
2. Oracle Timestamp with local timezone behavior¶
현지 타임존 데이터 타입으로 타임스탬프를 작업할 때 Oracle은 타임스탬프를 데이터베이스의 기본 타임존로 변환합니다. Snowflake에서 이 동작을 에뮬레이션하려면 TIMESTAMP_TYPE_MAPPING 세션 매개 변수를 ‘TIMESTAMP_LTZ’로 설정해야 합니다.
ALTER SESSION SET TIMESTAMP_TYPE_MAPPING = 'TIMESTAMP_LTZ';
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');
Snowflake¶
INSERT INTO timestamp_with_local_time_zone_table(timestamp_col1) VALUES (TIMESTAMP '2010-10-10 12:00:00 -8:00');
경고
기본 타임스탬프 입력 형식이’-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
샘플 소스 패턴¶
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');
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');
타임스탬프가 있는 타임존 열에서 데이터 검색하기¶
Oracle¶
SELECT * FROM timestamp_with_time_zone_table;
결과¶
TIMESTAMP_COL1 |
|---|
2010-10-10 12:00:00.000 -0600 |
Snowflake¶
SELECT * FROM
timestamp_with_time_zone_table;
결과¶
TIMESTAMP_COL1 |
|---|
2010-10-10 12:00:00.000 -0700 |
참고
시간대를 지정하지 않으면 데이터베이스의 기본 시간대가 추가되므로 두 엔진에서 시간대가 다릅니다.
데이터베이스의 기본 시간대를 변경하려면 다음 구문을 사용합니다.
ALTER account SET sqtimezone = timezone_string;
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');
Snowflake¶
INSERT INTO timestamp_with_time_zone_table(timestamp_col1) VALUES (TIMESTAMP '2010-10-10 12:00:00 -8:00');
경고
기본 타임스탬프 입력 형식이’-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'));
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'));
더하기¶
조합 행렬¶
다음은 마이그레이션 프로그램이 날짜, 타임스탬프, 숫자, 알 수 없는 유형을 사용하여 다양한 조합에 대한 더하기 연산을 해결하는 방법에 대한 요약입니다.
더하기 |
날짜 |
타임스탬프 |
숫자 |
간격 |
알 수 없음 |
Float |
|---|---|---|---|---|---|---|
날짜 |
INVALID |
INVALID |
날짜 + 간격 일 |
날짜 + 간격 IntervalUnit |
DATEADD_UDF |
DATEADD_UDF |
타임스탬프 |
INVALID |
INVALID |
타임스탬프 + 간격 일 |
타임스탬프 + 간격 IntervalUnit |
DATEADD_UDF |
DATEADD_UDF |
숫자 |
날짜 + 간격 일 |
타임스탬프 + 간격 일 |
숫자 + 숫자 |
INVALID |
숫자 + 부동 소수점 |
|
간격 |
날짜 + 간격 IntervalUnit |
타임스탬프 + 간격 IntervalUnit |
INVALID |
알 수 없음 + 간격 IntervalUnit |
INVALID |
|
알 수 없음 |
DATEADD_UDF |
DATEADD_UDF |
알 수 없음 + 숫자 |
알 수 없음 + 간격 IntervalUnit |
||
부동 소수점 |
DATEADD_UDF |
DATEADD_UDF |
부동 소수점 + 숫자 |
INVALID |
부동 소수점 + 부동 소수점 |
참고
알 수 없음 유형 열은 마이그레이터가 해당 열의 데이터 타입을 파악하지 못한 경우에 발생합니다. 이는 연산 중인 테이블에 DDLs가 누락되었거나, 뷰, CTES 또는 하위 쿼리에 대한 연산으로 인해 열이 발생한 경우 등 여러 가지 이유로 발생할 수 있습니다.
경고
기본적으로 Snow Converter는 날짜/타임스탬프 + 간격 유형의 연산을 네이티브 Snowflake 연산으로 마이그레이션하지만, 경우에 따라 UDF를 대신 사용하는 것이 유용할 수 있습니다. 이 UDF에 대한 자세한 내용은 여기에서 확인할 수 있습니다.
마이그레이터가 더하기 연산을 처리하는 데 사용할 수 있는 다양한 경로는 아래에 설명되어 있습니다.
유효하지 않음¶
특정 조합은 Oracle에서 더하기 연산을 수행하는 데 유효하지 않습니다.
Oracle¶
SELECT AsDate + AsDateTwo From TIMES;
SELECT AsDate + AsTimeStamp From TIMES;
결과¶
SQL Error [975] [42000]: ORA-00975: date + date not allowed
SQL Error [30087] [99999]: ORA-30087: Adding two datetime values is not allowed
날짜 + 간격 일¶
이는 날짜 유형과 숫자 사이의 더하기 연산에 대한 현재 변환입니다(그 반대도 마찬가지임). 예
Oracle¶
SELECT AsDate + 1 FROM TIMES;
SELECT 1 + AsDate FROM TIMES;
결과¶
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;
결과¶
ASDATE + INTERVAL ‘1 DAY’ |
|---|
2021-11-07 |
타임스탬프 + 간격 일¶
이는 타임스탬프 유형과 숫자 사이의 더하기 연산에 대한 현재 변환입니다(그 반대도 마찬가지임). 예
Oracle¶
SELECT AsTimestamp + 1 FROM TIMES;
SELECT 1 + AsTimestamp FROM TIMES;
결과¶
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;
결과¶
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;
결과¶
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;
결과¶
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 |
숫자 - 부동 소수점 |
|
간격 |
INVALID |
INVALID |
INVALID |
알 수 없음 - 간격 IntervalUnit |
NOT SUPPORTED IN ORACLE |
|
알 수 없음 |
DATEDIFF_UDF |
DATEDIFF_UDF |
알 수 없음 - 간격 IntervalUnit |
|||
부동 소수점 |
DATEDIFF_UDF |
DATEDIFF_UDF |
부동 소수점 - 숫자 |
NOT SUPPORTED IN ORACLE |
부동 소수점 - 부동 소수점 |
참고
알 수 없음 유형 열은 마이그레이터가 해당 열의 데이터 타입을 파악하지 못한 경우에 발생합니다. 이는 연산 중인 테이블에 DDLs가 누락되었거나, 뷰, CTES 또는 하위 쿼리에 대한 연산으로 인해 열이 발생한 경우 등 여러 가지 이유로 발생할 수 있습니다.
경고
기본적으로 Snow Converter는 날짜/타임스탬프 + 간격 유형의 연산을 네이티브 Snowflake 연산으로 마이그레이션하지만, 경우에 따라 UDF를 대신 사용하는 것이 유용할 수 있습니다. 이 UDF에 대한 자세한 내용은 여기에서 확인할 수 있습니다.
마이그레이션터가 빼기 연산을 처리하는 데 사용할 수 있는 다양한 경로는 아래에 설명되어 있습니다.
유효하지 않음¶
특정 조합은 Oracle에서 빼기 연산을 수행하는 데 유효하지 않습니다.
Oracle¶
SELECT 1 - AsDate FROM TIMES;
SELECT 1 - AsTimestamp FROM TIMES;
결과¶
SQL Error [932] [42000]: ORA-00932: inconsistent datatypes: expected NUMBER got DATE
SQL Error [932] [42000]: ORA-00932: inconsistent datatypes: expected NUMBER got TIMESTAMP
DATEDIFF¶
날짜 타입의 두 피연산자 간 빼기는 시간 단위(첫 번째 매개 변수) ‘일’을 사용하여 Snowflake DATEDIFF 함수로 변환됩니다. 예
Oracle¶
SELECT AsDate - AsDateTwo FROM TIMES;
결과¶
ASDATE-ASDATETWO |
|---|
1 |
Snowflake¶
SELECT AsDate - AsDateTwo FROM
TIMES;
결과¶
DATEDIFF(DAY, ASDATETWO, ASDATE) |
|---|
1 |
날짜 - 간격 일¶
이는 날짜 유형과 숫자 사이의 빼기 연산에 대한 현재 변환입니다. 예
Oracle¶
SELECT AsDate - 1 FROM TIMES;
SELECT AsDate + -1 FROM TIMES;
결과¶
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;
결과¶
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;
결과¶
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;
결과¶
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;
결과¶
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;
결과¶
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;
결과¶
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;
결과¶
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;
Snowflake¶
SELECT AsDate - (EXTRACT(DAY FROM ASDATE)) FROM
TIMES;
이 EWI는 열 유형을 확인할 수 없는 작업에 추가됩니다. 열 유형이 INTERVAL이고 다른 간격으로만 작동하는 경우, EWI가 추가되지만 코드는 주석 처리되지 않습니다. 다음 예에서는 이 동작을 설명합니다.
Oracle¶
SELECT INTERVAL '1' DAY + interval_column FROM UNKNOWN_TABLE;
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;
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;
결과¶
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;
결과¶
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¶
SSC-EWI-0108: 다음 하위 쿼리는 유효하지 않은 것으로 간주되는 패턴 중 하나 이상과 일치하며 컴파일 오류를 생성할 수 있습니다.
SSC-EWI-OR0036: 유형 확인 문제로 인해 문자열과 날짜 사이에서 산술 연산이 올바르게 동작하지 않을 수 있습니다.
Interval UDFs 및 Snowflake 기본 간격 작업 비교¶
설명¶
다음 테이블은 간격 산술을 위한 DATEADD_UDFINTERVAL 및 DATEDIFF_UDFINTERVAL 대 Snowflake 네이티브 작업을 비교한 것입니다.
필요한 코드¶
비교 테이블의 쿼리를 실행하려면 다음 코드를 실행해야 합니다.
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.')
);
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.')
);
비교 테이블¶
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;
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;
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;
결과¶
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¶
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 하위 유형에도 적용됩니다.
NATURALNATURALNPOSITIVEPOSITIVENSIGNTYPESIMPLE_INTEGER
경고
이러한 하위 유형 중 일부는 현재 SnowConvert AI에서 인식되지 않으므로 VARIANT로 변환되고 사용자 정의 유형으로 간주됩니다. 문제를 해결하기 위한 작업 항목이 이미 있습니다.
샘플 소스 패턴¶
아래 예제에서 다음 테이블과 삽입 내용을 참조하십시오.
코드¶
CREATE TABLE PLS_INTEGER_TABLE(
COL NUMBER
);
프로시저 블록에서 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;
결과¶
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;
결과¶
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 ]) ]
샘플 소스 패턴¶
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');
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');
문자 열에서 데이터 검색하기¶
Oracle¶
SELECT * FROM char_data_types;
결과¶
CHAR_COLUMN1 |
CHAR_COLUMN2 |
CHAR_COLUMN3 |
CHAR_COLUMN4 |
|---|---|---|---|
H |
Hello world |
Hello world |
Hello world |
Snowflake¶
SELECT * FROM
char_data_types;
결과¶
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;
결과¶
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;
결과¶
OCTET_LENGTH(CHAR_COLUMN1) |
OCTET_LENGTH(CHAR_COLUMN2) |
OCTET_LENGTH(CHAR_COLUMN3) |
OCTET_LENGTH(CHAR_COLUMN4) |
|---|---|---|---|
1 |
11 |
11 |
11 |
참고
이러한 미세한 차이 외에도 데이터의 무결성은 그대로 유지됩니다.
Known Issues¶
1. 일부 기본 제공 함수에서 얻은 결과는 다를 수 있습니다
이전 섹션에서 설명한 것처럼 열에 기본 제공 함수를 사용하면 다른 결과가 검색되는 경우가 있을 수 있습니다. 예를 들어, 열의 길이를 구합니다.
관련 EWIs¶
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) ]
샘플 소스 패턴¶
Create Table의 Nchar 데이터 타입¶
Oracle¶
CREATE TABLE nchar_data_types
(
nchar_column1 NCHAR,
nchar_column2 NCHAR(5)
);
INSERT INTO nchar_data_types VALUES ('ភ', 'ភាសាខ');
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 ('ភ', 'ភាសាខ');
참고
Oracle에서 이러한 값을 CHAR 열에 같은 크기로 삽입하려고 하면 오류가 트리거됩니다. 값이 열에 비해 너무 큽니다.
Nchar 열에서 정보 검색하기¶
Oracle¶
SELECT * FROM nchar_data_types;
결과¶
NCHAR_COLUMN1 |
NCHAR_COLUMN2 |
|---|---|
ភ |
ភាសាខ |
Snowflake¶
SELECT * FROM
nchar_data_types;
결과¶
NCHAR_COLUMN1 |
NCHAR_COLUMN2 |
|---|---|
ភ |
ភាសាខ |
각 열의 바이트 단위 크기 검색하기¶
Oracle¶
SELECT
LENGTHB(nchar_column1),
LENGTHB(nchar_column2)
FROM nchar_data_types;
결과¶
LENGTHB(NCHAR_COLUMN1) |
LENGTHB(NCHAR_COLUMN2) |
|---|
2| 10|
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;
결과¶
OCTET_LENGTH(NCHAR_COLUMN1) |
OCTET_LENGTH(NCHAR_COLUMN2) |
|---|
3| 15|
열 선언에 지정된 숫자는 바이트 단위가 아닌 문자 단위의 크기이므로 특수 문자를 저장하는 데 더 많은 공간이 사용되는 것을 볼 수 있습니다.
참고
Snowflake에서 VARCHAR 은 UTF-8 을 사용하며, 크기는 1, 2, 3 또는 4 바이트 단위로 표현할 수 있는 Unicode 문자에 따라 달라질 수 있습니다. 이 경우 캄보디아어 문자는 3바이트를 사용하여 저장됩니다.
참고
이러한 미세한 차이 외에도 데이터의 무결성은 그대로 유지됩니다.
Known Issues¶
1. 일부 기본 제공 함수에서 얻은 결과는 다를 수 있습니다
이전 섹션에서 설명한 것처럼 열에 기본 제공 함수를 사용하면 다른 결과가 검색되는 경우가 있을 수 있습니다. 예를 들어, 열의 길이를 구합니다.
관련 EWIs¶
SSC-FDM-OR0015: LENGTHB가 OCTET_LENGTH로 변환되었습니다.
NVARCHAR2 데이터 타입¶
설명¶
NVARCHAR2데이터 타입은 국가 문자 세트에서 가변 길이의 문자열을 지정합니다. (Oracle SQL Language Reference NVARCHAR2)
NVARCHAR2 (size)
NVARCHAR2 를 사용하면 특수 문자를 Unicode와 함께 저장할 수 있으므로 이러한 특수 문자를 저장하는 데 더 많은 비트가 필요할 수 있으므로 기본적으로 NVARCHAR2 문자 세트는 AL16UTF16 이며, 일반적으로 VARCHAR2 에 대한 일반적인 문자 데이터 세트는 AL32UTF8 입니다.
NVARCHAR에서 Snowflake VARCHAR로의 변환 VARCHAR2와 관련된 변환 정보도 NVARCHAR2에 유효합니다.
NVARCHAR2 (size)
샘플 소스 패턴¶
Create Table의 Nvarchar2 데이터 타입¶
Oracle¶
CREATE TABLE nvarchar2_data_types
(
nvarchar2_column NVARCHAR2 (5)
);
INSERT INTO nvarchar2_data_types VALUES ('ភាសាខ');
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 ('ភាសាខ');
참고
Oracle에서 이러한 값을 VARCHAR2 열에 같은 크기로 삽입하려고 하면 오류가 트리거됩니다. 값이 열에 비해 너무 큽니다.
Nchar 열에서 정보 검색하기¶
Oracle¶
SELECT * FROM nvarchar2_data_types;
결과¶
NVARCHAR2_COLUMN |
|---|
ភាសាខ |
Snowflake¶
SELECT * FROM
nvarchar2_data_types;
결과¶
NVARCHAR2_COLUMN |
|---|
ភាសាខ |
각 열의 바이트 단위 크기 검색하기¶
Oracle¶
SELECT
LENGTHB(nvarchar2_column)
FROM nvarchar2_data_types;
결과¶
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;
결과¶
OCTET_LENGTH(NVARCHAR2_COLUMN) |
|---|
15 |
열 선언에 지정된 숫자는 바이트 단위가 아닌 문자 단위의 크기이므로 특수 문자를 저장하는 데 더 많은 공간이 사용되는 것을 볼 수 있습니다.
참고
Snowflake에서 VARCHAR 은 UTF-8 을 사용하며, 크기는 1, 2, 3 또는 4 바이트 단위로 표현할 수 있는 Unicode 문자에 따라 달라질 수 있습니다. 이 경우 캄보디아어 문자는 3바이트를 사용하여 저장됩니다.
참고
이러한 미세한 차이 외에도 데이터의 무결성은 그대로 유지됩니다.
Known Issues¶
1. 일부 기본 제공 함수에서 얻은 결과는 다를 수 있습니다
이전 섹션에서 설명한 것처럼 열에 기본 제공 함수를 사용하면 다른 결과가 검색되는 경우가 있을 수 있습니다. 예를 들어, 열의 길이를 구합니다.
관련 EWIs¶
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 ])
샘플 소스 패턴¶
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');
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');
varchar 열에서 데이터 검색하기¶
Oracle¶
SELECT * FROM varchar2_data_types;
결과¶
VARCHAR2_COLUMN1 |
VARCHAR2_COLUMN2 |
VARCHAR2_COLUMN3 |
|---|---|---|
H |
Hello |
Hell |
Snowflake¶
SELECT * FROM
varchar2_data_types;
결과¶
VARCHAR2_COLUMN1 |
VARCHAR2_COLUMN2 |
VARCHAR2_COLUMN3 |
|---|---|---|
H |
Hello |
Hell |
열의 변수 크기 검토하기¶
Oracle¶
SELECT
LENGTHB(varchar2_column1),
LENGTHB(varchar2_column2),
LENGTHB(varchar2_column3)
FROM VARCHAR2_DATA_TYPES;
결과¶
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;
결과¶
OCTET_LENGTH(VARCHAR2_COLUMN1) |
OCTET_LENGTH(VARCHAR2_COLUMN2) |
OCTET_LENGTH(VARCHAR2_COLUMN3) |
|---|---|---|
1 |
5 |
4 |
Known Issues¶
문제가 발견되지 않았습니다.
관련 EWIs¶
SSC-FDM-OR0015: LENGTHB가 OCTET_LENGTH로 변환되었습니다.
LOB 데이터 타입¶
설명¶
기본 제공 LOB 데이터 타입
BLOB,CLOB,NCLOB(내부에 저장됨) 및BFILE(외부에 저장됨)은 텍스트, 이미지, 비디오, 공간 데이터와 같은 대규모 비정형 데이터를 저장할 수 있습니다(Oracle SQL 언어 참조 LOB 데이터 타입).
BFILE
BLOB
CLOB
NCLOB
경고
LOB 데이터 타입은 Snowflake에서 지원되지 않습니다. Snowflake 설명서에 따라 CLOB을 VARCHAR로, BLOB을 BINARY로 변환하는 것이 좋지만 몇 가지 제한 사항이 있습니다. {% 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;
결과¶
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;
결과¶
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
$$;
Known Issues¶
1. No access to the DBMS_LOB built-in package¶
LOB 데이터 타입은 Snowflake에서 지원되지 않으므로 DBMS_LOB 함수에 상응하는 기능이 없으며 아직 구현된 해결 방법이 없습니다.
관련 EWIs¶
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());
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(' '));
데이터 검색하기¶
Oracle¶
SELECT * FROM blobtable;
결과¶
BLOB_COLUMN |
EMPTY_COLUMN |
|---|---|
[NULL] |
[BLOB] |
Snowflake¶
SELECT * FROM
blobtable;
결과¶
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;
결과¶
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;
결과¶
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¶
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() );
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(' - '));
데이터 검색하기¶
Oracle¶
SELECT * FROM clobtable;
결과¶
CLOB_COLUMN |
EMPTY_COLUMN |
|---|---|
THIS IS A TEST |
Snowflake¶
SELECT * FROM
clobtable;
결과¶
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() );
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(' - '));
데이터 검색하기¶
Oracle¶
SELECT * FROM nclobtable;
결과¶
NCLOB_COLUMN |
EMPTY_COLUMN |
|---|---|
THIS IS A TEST |
Snowflake¶
SELECT * FROM
nclobtable;
결과¶
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 없음.