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 데이터 타입).
The JSON data types are transformed to VARIANT to emulate the Oracle behavior.
샘플 소스 패턴¶
Create Table의 JSON 데이터 타입을 열로 사용¶
Oracle¶
결과¶
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¶
경고
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¶
결과 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¶
결과 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 데이터 타입)
샘플 소스 패턴¶
Create Table의 long¶
Oracle¶
Snowflake¶
긴 열에서 데이터 검색하기¶
Oracle¶
결과¶
LONG_COLUMN |
|---|
텍스트입니다 |
Snowflake¶
결과¶
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¶
The Long data type can only be cast to a CLOB data type by using the TO_LOB function. This function only works when used in the select list of a subquery in an INSERT statement. Consider the following sample
Oracle¶
경고
대상 테이블 열 데이터 타입이 CLOB 와 다른 경우 데이터를 삽입하려고 할 때 Oracle에서 null 값을 삽입하거나 오류를 표시할 수 있습니다.
관련 EWIs¶
SSC-FDM-0006: 숫자 유형 열이 Snowflake에서 유사하게 동작하지 않을 수 있음
RAW 및 LONG RAW 데이터 타입¶
설명¶
RAW및LONGRAW데이터 타입은 서로 다른 시스템 간에 데이터를 이동할 때 Oracle 데이터베이스에서 명시적으로 변환하지 않는 데이터를 저장합니다. 이러한 데이터 타입은 이진 데이터 또는 바이트 문자열을 위한 것입니다. (Oracle SQL Language Reference 행 및 Long 원시 데이터 타입)
샘플 소스 패턴¶
Create Table의 원시 및 Long 원시¶
Oracle¶
Snowflake CREATE OR REPLACE TABLE raw_table¶
원시 및 Long 원시 열에서 데이터 검색하기¶
Oracle¶
결과¶
ID |
RAW_COLUMN |
LONG_RAW_COLUMN |
|---|---|---|
1 |
ªº««««© 2 B7 :ºººº«ºª»¬ßý |
|
2 |
ªªªªª |
«««««««««««««««««««ªººªºººººººººº |
3 |
ªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªª |
ªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªª |
Snowflake¶
결과¶
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¶
Snowflake¶
FLOAT¶
전체 자릿수가 없는 FLOAT 데이터 타입의 경우 Oracle과 Snowflake 간에 차이가 없습니다.
Oracle¶
결과¶
col1 |
|---|
100.55555 |
1.9 |
Snowflake¶
결과¶
col1 |
|---|
100.55555 |
1.9 |
FLOAT ( p )¶
FLOAT 데이터 타입에 (p) 전체 자릿수가 지정되면 쿼리 결과가 동일하지 않을 수 있습니다. 작은 반올림 차이가 있습니다.
Oracle¶
결과¶
col2 |
|---|
1.2 |
7.9 |
13 |
120 |
col3 |
—————————————————————————————————- |
1111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000 |
Snowflake¶
결과¶
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¶
Snowflake¶
NUMBER (기본 케이스)¶
전체 자릿수와 스케일이 지정되지 않은 경우 기본값은 사용 가능한 최대 NUMBER(38, 127) 입니다. 기본 케이스의 현재 변환은 NUMBER(38,19) 입니다.
경고
Oracle에서는 전체 자릿수나 스케일을 정의하지 않으면 기본값이 “정의되지 않은 전체 자릿수 및 스케일”로 설정됩니다. 입력값을 ‘받은 대로’ 저장하는 방식으로 작동하므로 정수와 부동 소수점 숫자를 모두 처리할 수 있습니다. 38, 18 을 사용하여 정수에 20을 사용하고 부동 소수점 자릿수에 18을 남겨서 두 가지를 모두 처리하려고 시도합니다.
Oracle¶
결과¶
col1 |
|---|
100 |
Snowflake¶
결과¶
col1 |
|---|
100.0000000000000000000 |
NUMBER ( p )¶
이 경우 전체 자릿수는 소수점 왼쪽에 숫자가 가질 수 있는 자릿수를 지정합니다.
Oracle¶
결과¶
col2 |
|---|
2 |
Snowflake¶
결과¶
col2 |
|---|
2 |
NUMBER ( p, s ) p > s¶
s 가 p 보다 낮은 경우 전체 자릿수는 숫자가 가질 수 있는 자릿수를 지정합니다. 스케일은 소수점 오른쪽의 유효 자릿수를 지정하므로 소수점 왼쪽의 자릿수는 지정된 스케일에 따라 달라집니다.
Oracle¶
결과¶
col3 |
|---|
12345.12345 |
Snowflake¶
결과¶
col3 |
|---|
12345.12345 |
NUMBER ( p, -s )¶
음수 스케일은 소수점 왼쪽의 소수 자릿수에서 가장 작은 자릿수를 제외한 나머지 자릿수입니다. 음수 스케일의 경우 실제 데이터가 소수점 왼쪽에서 지정된 소수점 이하 자리 수로 반올림되므로 소수점 이하 자릿수가 소수점 왼쪽에 있습니다. 현재 변환은 음수 스케일을 제거하는 것입니다.
Oracle¶
결과¶
col4 |
|---|
16400 |
17600 |
Snowflake¶
결과¶
col4 |
|---|
16431 |
17551 |
NUMBER ( p, s ) s > p¶
스케일이 전체 자릿수보다 큰 경우 다음 측면을 고려하십시오.
삽입할 숫자의 소수점 왼쪽에는 소수 자릿수가 있을 수 없습니다. 0만 사용할 수 있습니다.
소수점 오른쪽의 첫 번째 자릿수는 0이어야 합니다.
전체 자릿수는 소수점 오른쪽에 있는 최대 유효 자릿수를 지정합니다.
Oracle¶
결과¶
col5 |
|---|
0.00009 |
0.00002 |
0.01268 |
Snowflake¶
결과¶
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¶
관련 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¶
Snowflake¶
참고
‘NaN’ 은 _ Not a Number _를 의미하며, 이 값은 Oracle의 BINARY_DOUBLE 데이터 타입과 Snowflake의 FLOAT 데이터 타입에서 허용됩니다.
BINARY_DOUBLE -> FLOAT¶
BINARY_DOUBLE 데이터 타입은 Snowflake에서 지원되지 않으므로 FLOAT 로 변환하는 중입니다.
Oracle¶
결과¶
col1 |
|---|
0 |
179769313486231000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 |
NaN |
Snowflake¶
결과¶
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¶
Snowflake¶
참고
‘NaN’ 은 _ Not a Number _를 의미하며, 이 값은 Oracle의 BINARY_FLOAT 데이터 타입과 Snowflake의 FLOAT 데이터 타입에서 허용됩니다.
BINARY_FLOAT -> FLOAT¶
BINARY_FLOAT 데이터 타입은 Snowflake에서 지원되지 않으므로 FLOAT 로 변환하는 중입니다.
Oracle¶
결과¶
col1 |
|---|
0 |
340282001837565600000000000000000000000 |
NaN |
Snowflake¶
결과¶
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 날짜 데이터 타입)
The default transformation for Oracle DATE is to Snowflake TIMESTAMP. You can add the disableDateAsTimestamp flag (SnowConvert AI Command Line Interface) or disable the Transform Date as Timestamp setting (SnowConvert AI desktop application) to transform the DATE type to TIMESTAMP. Keep in mind that Snowflake DATE only stores date information and Oracle stores date and time information, if you want to avoid losing information you should transform DATE to TIMESTAMP.
참고
중요한 반올림 동작 차이점: 날짜/타임스탬프 데이터 타입과 초가 포함된 간격 사이에서 연산을 수행할 때, Oracle은 초를 반올림하지 않고 지정된 대로 전체 자릿수를 유지하는 반면, Snowflake는 초를 가장 가까운 정수 초로 반올림합니다. 반올림 동작의 이러한 차이로 인해 다른 결과가 발생할 수 있습니다.
샘플 소스 패턴¶
Create Table의 날짜¶
Oracle¶
–disableDateAsTimestamp 플래그가 없거나 “날짜를 타임스탬프로 변환” 설정이 활성화된 Snowflake¶
–disableDateAsTimestamp 플래그가 있거나 “날짜를 타임스탬프로 변환” 설정이 비활성화된 Snowflake¶
날짜 열에서 데이터 검색하기¶
Oracle¶
결과¶
DATE_COL |
|---|
2010-10-10 00:00:00.000 |
Snowflake¶
결과¶
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 에서 날짜를 텍스트로 추가할 때 사용자가 특정 형식을 사용하도록 강제하기 때문에 삽입이 실패할 수 있습니다. 다음 구문을 사용하여 이러한 변수를 수정할 수 있습니다.
관련 EWIs¶
SSC-FDM-OR0042: 타임스탬프로 변환된 날짜 유형의 동작이 다름
INTERVAL DAY TO SECOND 데이터 타입¶
설명¶
INTERVAL DAY TO SECOND 는 기간을 일, 시간, 분, 초 단위로 저장합니다. (Oracle SQL Language Reference INTERVAL DAY TO SECOND 데이터 타입)
By default, there is no equivalent for this data type in Snowflake and it is transformed to VARCHAR.
참고
Preview Feature: When the --UseIntervalDatatype preview flag is enabled, Oracle INTERVAL DAY TO SECOND columns are preserved as native Snowflake INTERVAL DAY TO SECOND types. See the Interval Data Types translation reference for complete transformation details.
샘플 소스 패턴¶
Create Table에서 일에서 초 사이의 간격¶
Oracle¶
Snowflake¶
The Interval value is transformed to a supported Snowflake format and then inserted as text inside the column. Since Snowflake does not support Interval as a data type, it is only supported in arithmetic operations. To use the value, it needs to be extracted and used as an Interval constant (if possible).
원본 Oracle 값: INTERVAL '1 2:3:4.567' DAY TO SECOND
Snowflake 열에 저장된 값: '1d, 2h, 3m, 4s, 567ms'
Snowflake 간격 상수 값: INTERVAL '1d, 2h, 3m, 4s, 567ms'
간격 일에서 두 번째 열로 데이터 검색하기¶
Oracle¶
결과¶
INTERVAL_DAY_COL1 |
INTERVAL_DAY_COL2 |
|---|---|
1 2:3:4.567 |
|
1 2:3:4.567 |
Snowflake¶
결과¶
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 데이터 타입)
By default, there is no equivalent for this data type in Snowflake and it is transformed to VARCHAR.
참고
Preview Feature: When the --UseIntervalDatatype preview flag is enabled, Oracle INTERVAL YEAR TO MONTH columns are preserved as native Snowflake INTERVAL YEAR TO MONTH types. See the Interval Data Types translation reference for complete transformation details.
샘플 소스 패턴¶
Create Table의 연도 간 월 간 간격¶
Oracle¶
Snowflake¶
The Interval value is transformed to a supported Snowflake format and then inserted as text inside the column. Since Snowflake does not support Interval as a data type, it is only supported in arithmetic operations. To use the value, it needs to be extracted and used as an Interval constant (if possible).
원본 Oracle 값: INTERVAL '1-2' YEAR TO MONTH
Snowflake 열에 저장된 값: '1y, 2m'
Snowflake 간격 상수 값: INTERVAL '1y, 2m'
연도 간에서 월 간 열에서 데이터 검색하기¶
Oracle¶
결과¶
INTERVAL_YEAR_COL1 |
INTERVAL_YEAR_COL2 |
|---|---|
1-2 |
|
1000-11 |
Snowflake¶
결과¶
INTERVAL_YEAR_COL1 |
INTERVAL_YEAR_COL2 |
|---|---|
1년, 2분 |
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는 값을 자르기만 합니다.
샘플 소스 패턴¶
Create Table의 타임스탬프¶
Oracle¶
Snowflake¶
타임스탬프 열에서 데이터 검색하기¶
Oracle¶
결과¶
TIMESTAMP_COL1 |
TIMESTAMP_COL2 |
|---|---|
2010-10-10 12:00:00.000 |
2010-10-10 12:00:00.000 |
Snowflake¶
결과¶
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 섹션을 참조하십시오.
샘플 소스 패턴¶
Create Table의 타임존이 포함된 타임스탬프¶
Oracle¶
Snowflake¶
현지 타임존 열이 있는 타임스탬프에서 데이터 검색하기¶
Oracle¶
결과¶
TIMESTAMP_COL1 |
|---|
2010-10-10 18:00:00.000 |
2010-10-10 20:00:00.000 |
Snowflake¶
결과¶
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’입니다.
데이터베이스의 기본 시간대를 변경하려면 다음 구문을 사용합니다.
Known Issues¶
1. Default database timezone¶
이러한 종류의 데이터 타입을 사용하는 작업은 데이터베이스 표준 시간대의 영향을 받으며 결과가 달라질 수 있습니다. 다음 쿼리를 사용하여 기본 타임존을 확인할 수 있습니다.
Oracle¶
Snowflake¶
2. Oracle Timestamp with local timezone behavior¶
When operating timestamps with local timezone data types, Oracle converts the timestamps to the default timezone of the database. To emulate this behavior in Snowflake, the TIMESTAMP_TYPE_MAPPING session parameter should be set to ‘TIMESTAMP_LTZ’.
3. Timestamp formats may be different¶
Snow Convert는 날짜/타임스탬프 형식 문자열에 대한 변환 성능을 수행하지 않으므로 코드를 배포할 때 오류가 발생할 수 있습니다. 예:
Oracle¶
Snowflake¶
경고
The query will fail in Snowflake because the default timestamp input format does not recognize ‘-8:00’ as a valid UTC offset. It should be replaced with ‘0800’ or ‘-08:00’ to get the same result.
관련 EWIs¶
관련 EWIs 없음.
TIMESTAMP WITH TIME ZONE 데이터 타입¶
설명¶
TIMESTAMP WITH TIME ZONE 은 값에 타임존 리전 이름 또는 타임존 오프셋이 포함된 TIMESTAMP 의 베리언트입니다. Snowflake의 해당 기능은 TIMESTAMP_TZ 입니다.(Oracle SQL Language Reference 타임존 데이터 타입 포함 타임스탬프)
Snowflake의 해당 기능은 TIMESTAMP_TZ 입니다.
자세한 내용은 TIMESTAMP 섹션을 참조하십시오.
샘플 소스 패턴¶
Create Table의 타임존이 포함된 타임스탬프¶
Oracle¶
Snowflake¶
타임스탬프가 있는 타임존 열에서 데이터 검색하기¶
Oracle¶
결과¶
TIMESTAMP_COL1 |
|---|
2010-10-10 12:00:00.000 -0600 |
Snowflake¶
결과¶
TIMESTAMP_COL1 |
|---|
2010-10-10 12:00:00.000 -0700 |
참고
시간대를 지정하지 않으면 데이터베이스의 기본 시간대가 추가되므로 두 엔진에서 시간대가 다릅니다.
데이터베이스의 기본 시간대를 변경하려면 다음 구문을 사용합니다.
Known Issues¶
1. Timestamp formats may be different¶
Snow Convert는 날짜/타임스탬프 형식 문자열에 대한 변환 성능을 수행하지 않으므로 코드를 배포할 때 오류가 발생할 수 있습니다. 예:
Oracle¶
Snowflake¶
경고
The query will fail in Snowflake because the default timestamp input format does not recognize ‘-8:00’ as a valid UTC offset. It should be replaced with ‘-0800’ or ‘-08:00’ to get the same result.
관련 EWIs¶
관련 EWIs 없음.
날짜/시간 산술¶
여기에서는 날짜/시간 유형 간의 일부 산술 연산에 대한 현재 변환을 설명합니다.
설명¶
Oracle에서는 더하기, 빼기, 곱하기, 나누기와 같은 DateTime 유형 간에 일부 산술 연산을 수행할 수 있었습니다. 현재, SnowConvert AI는 더하기 및 빼기의 일부 사례를 처리할 수 있습니다. 이러한 사례는 아래에 설명되어 있습니다.
샘플 소스 패턴¶
이는 날짜, 타임스탬프, 숫자, 알 수 없는 유형을 사용하는 더하기 및 빼기 연산의 다양한 조합에 대한 현재 변환의 요약입니다.
참고
아래 예는 다음 테이블을 참조하세요.
Oracle¶
Snowflake¶
더하기¶
조합 행렬¶
다음은 마이그레이션 프로그램이 날짜, 타임스탬프, 숫자, 알 수 없는 유형을 사용하여 다양한 조합에 대한 더하기 연산을 해결하는 방법에 대한 요약입니다.
더하기 |
날짜 |
타임스탬프 |
숫자 |
간격 |
알 수 없음 |
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 |
부동 소수점 + 부동 소수점 |
참고
An Unknown Type column is the result of the migrator being unable to establish the data type that the column contains. This can happen for many reasons, for example, missing DDLs for the tables being operated on, or columns resulting from operations on views, CTEs, or subqueries.
경고
By default, Snow Convert migrates operations of type Date/Timestamp + Interval to the native Snowflake operations, but in some cases may be useful to use UDF instead. For further details, see Interval UDFs vs. Snowflake native interval operation.
마이그레이터가 더하기 연산을 처리하는 데 사용할 수 있는 다양한 경로는 아래에 설명되어 있습니다.
유효하지 않음¶
특정 조합은 Oracle에서 더하기 연산을 수행하는 데 유효하지 않습니다.
Oracle¶
결과¶
날짜 + 간격 일¶
이는 날짜 유형과 숫자 사이의 더하기 연산에 대한 현재 변환입니다(그 반대도 마찬가지임). 예
Oracle¶
결과¶
ASDATE+1 |
|---|
2021-11-07 00:00:00.000 |
1+ASDATE |
|---|
2021-11-07 00:00:00.000 |
Snowflake¶
결과¶
ASDATE + INTERVAL ‘1 DAY’ |
|---|
2021-11-07 |
타임스탬프 + 간격 일¶
이는 타임스탬프 유형과 숫자 사이의 더하기 연산에 대한 현재 변환입니다(그 반대도 마찬가지임). 예
Oracle¶
결과¶
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¶
결과¶
ASTIMESTAMP + INTERVAL ‘1 DAY’ |
|---|
2021-11-06 11:00:00.000 |
DATEADD_UDF¶
For those cases where there is an addition operation between a date or timestamp type and an unknown type, a user-defined function (UDF) is added. See the DATEADD_UDF implementation for details. The UDF is located in the UDFs folder. For example:
참고
다음 예에서는 하위 쿼리가 사용되어 알 수 없는 유형 열을 시뮬레이션하려고 시도합니다.
Oracle¶
결과¶
ASDATE+(SELECTEXTRACT(DAYFROMASTIMESTAMPTWO)FROMTIMES) |
|---|
2021-11-11 00:00:00.000 |
ASTIMESTAMP+(SELECTEXTRACT(DAYFROMASTIMESTAMPTWO)FROMTIMES) |
|---|
2021-11-10 11:00:00.000 |
Snowflake¶
결과¶
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 |
부동 소수점 - 부동 소수점 |
참고
An Unknown Type column is the result of the migrator being unable to establish the data type that the column contains. This can happen for many reasons, for example, missing DDLs for the tables being operated on, or columns resulting from operations on views, CTEs, or subqueries.
경고
By default, Snow Convert migrates operations of type Date/Timestamp + Interval to the native Snowflake operations, but in some cases may be useful to use UDF instead. For further details, see Interval UDFs vs. Snowflake native interval operation.
마이그레이션터가 빼기 연산을 처리하는 데 사용할 수 있는 다양한 경로는 아래에 설명되어 있습니다.
유효하지 않음¶
특정 조합은 Oracle에서 빼기 연산을 수행하는 데 유효하지 않습니다.
Oracle¶
결과¶
DATEDIFF¶
날짜 타입의 두 피연산자 간 빼기는 시간 단위(첫 번째 매개 변수) ‘일’을 사용하여 Snowflake DATEDIFF 함수로 변환됩니다. 예
Oracle¶
결과¶
ASDATE-ASDATETWO |
|---|
1 |
Snowflake¶
결과¶
DATEDIFF(DAY, ASDATETWO, ASDATE) |
|---|
1 |
날짜 - 간격 일¶
이는 날짜 유형과 숫자 사이의 빼기 연산에 대한 현재 변환입니다. 예
Oracle¶
결과¶
ASDATE-1 |
|---|
2021-11-05 00:00:00.000 |
ASDATE+-1 |
|---|
2021-11-05 00:00:00.000 |
Snowflake¶
결과¶
ASDATE - INTERVAL ‘1 DAY’ |
|---|
2021-11-05 |
ASDATE + INTERVAL ‘-1 DAY’ |
|---|
2021-11-05 |
타임스탬프 - 간격 일¶
이는 타임스탬프 유형과 숫자 사이의 더하기 연산에 대한 현재 변환입니다. 예
Oracle¶
결과¶
ASTIMESTAMP-1 |
|---|
2021-11-04 11:00:00.000 |
ASTIMESTAMP+-1 |
|---|
2021-11-04 11:00:00.000 |
Snowflake¶
결과¶
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로 표시되는 이유입니다.
For more information, see the Oracle NLS_DATE_FORMAT documentation.
TIMESTAMP_DIFF_UDF¶
The subtractions between timestamp types and dates with a timestamp and vice versa; are resolved by inserting the TIMESTAMP_DIFF_UDF user-defined function, (see the TIMESTAMP_DIFF_UDF implementation). For example
Oracle¶
결과¶
ASTIMESTAMP-ASTIMESTAMPTWO |
|---|
+000000000 01:00:00.000000 |
ASTIMESTAMP-ASDATETWO |
|---|
+000000000 11:00:00.000000 |
ASDATETWO-ASTIMESTAMP |
|---|
-000000000 11:00:00.000000 |
Snowflake¶
결과¶
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¶
For those cases where there is an addition operation between a date or timestamp type and an unknown type, a user-defined function (UDF) is added. See the DATEDIFF_UDF implementation, which could be edited to perform what is required. The UDF is located in the UDFs folder. For example:
Oracle¶
결과¶
ASDATE-(EXTRACT(DAYFROMASDATE)) |
|---|
2021-10-31 00:00:00.000 |
ASTIMESTAMP-(EXTRACT(DAYFROMASDATE)) |
|---|
2021-10-30 11:00:00.000 |
Snowflake¶
결과¶
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¶
Snowflake¶
이 EWI는 열 유형을 확인할 수 없는 작업에 추가됩니다. 열 유형이 INTERVAL이고 다른 간격으로만 작동하는 경우, EWI가 추가되지만 코드는 주석 처리되지 않습니다. 다음 예에서는 이 동작을 설명합니다.
Oracle¶
Snowflake¶
Known Issues¶
1. TIMESTAMP DIFF UDF improvement¶
The TIMESTAMP_DIFF_UDF must be improved to be able to specify the return type. It means adding a third parameter where it is possible to specify the time part, such as day, hour, or month.
2. Built-in functions as operators¶
현재, 날짜 유형을 반환하는 기본 제공 함수 사이의 날짜 작업에 대한 관리 기능은 없습니다.
3. Multiple operands¶
현재, 3개 이상의 피연산자를 사용하는 날짜 연산에 대한 관리 기능은 없으며, 작동할 수도 있지만 문제가 발생할 수 있습니다.
4. Comparison operators¶
Currently, there is no management for date operations with comparison operators, such as greater than or less than.
5. Output format¶
산술 연산의 결과 형식은 Snowflake의 ALTER SESSION SET DATE_OUTPUT_FORMAT = 'DESIRED-FORMAT'; 명령을 사용하여 변경할 수 있습니다.
6. Issues in interval operations with seconds precision¶
Some operations may differ in precision, specifically those that include intervals with seconds precision, this is because Oracle rounds depending on the precision, Snowflake’s interval does not support seconds with decimal places, to have the same result, it is necessary to change the second decimal places by milliseconds in intervals considering the rounding that Oracle performs. The following example shows this issue
Oracle¶
결과¶
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¶
결과¶
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 네이티브 작업을 비교한 것입니다.
필요한 코드¶
비교 테이블의 쿼리를 실행하려면 다음 코드를 실행해야 합니다.
비교 테이블¶
Oracle¶
Snowflake¶
Snowflake UDF¶
결과¶
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로 변환되고 사용자 정의 유형으로 간주됩니다. 문제를 해결하기 위한 작업 항목이 이미 있습니다.
샘플 소스 패턴¶
아래 예제에서 다음 테이블과 삽입 내용을 참조하십시오.
코드¶
프로시저 블록에서 PLS_INTEGER 사용법¶
Oracle¶
결과¶
COL |
|---|
2147483647 |
2147483648 |
2147483649 |
Snowflake¶
결과¶
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문자 문자열은 한 문자만 소비합니다.
샘플 소스 패턴¶
Create Table의 문자 데이터 타입¶
Oracle¶
Snowflake¶
문자 열에서 데이터 검색하기¶
Oracle¶
결과¶
CHAR_COLUMN1 |
CHAR_COLUMN2 |
CHAR_COLUMN3 |
CHAR_COLUMN4 |
|---|---|---|---|
H |
Hello world |
Hello world |
Hello world |
Snowflake¶
결과¶
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¶
결과¶
LENGTHB(CHAR_COLUMN1) |
LENGTHB(CHAR_COLUMN2) |
LENGTHB(CHAR_COLUMN3) |
LENGTHB(CHAR_COLUMN4) |
|---|---|---|---|
1 |
15 |
15 |
15 |
Snowflake¶
결과¶
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 에도 유효합니다.
샘플 소스 패턴¶
Create Table의 Nchar 데이터 타입¶
Oracle¶
Snowflake¶
참고
Oracle에서 이러한 값을 CHAR 열에 같은 크기로 삽입하려고 하면 오류가 트리거됩니다. 값이 열에 비해 너무 큽니다.
Nchar 열에서 정보 검색하기¶
Oracle¶
결과¶
NCHAR_COLUMN1 |
NCHAR_COLUMN2 |
|---|---|
ភ |
ភាសាខ |
Snowflake¶
결과¶
NCHAR_COLUMN1 |
NCHAR_COLUMN2 |
|---|---|
ភ |
ភាសាខ |
각 열의 바이트 단위 크기 검색하기¶
Oracle¶
결과¶
LENGTHB(NCHAR_COLUMN1) |
LENGTHB(NCHAR_COLUMN2) |
|---|
Snowflake¶
결과¶
OCTET_LENGTH(NCHAR_COLUMN1) |
OCTET_LENGTH(NCHAR_COLUMN2) |
|---|
열 선언에 지정된 숫자는 바이트 단위가 아닌 문자 단위의 크기이므로 특수 문자를 저장하는 데 더 많은 공간이 사용되는 것을 볼 수 있습니다.
참고
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 를 사용하면 특수 문자를 Unicode와 함께 저장할 수 있으므로 이러한 특수 문자를 저장하는 데 더 많은 비트가 필요할 수 있으므로 기본적으로 NVARCHAR2 문자 세트는 AL16UTF16 이며, 일반적으로 VARCHAR2 에 대한 일반적인 문자 데이터 세트는 AL32UTF8 입니다.
NVARCHAR에서 Snowflake VARCHAR로의 변환 VARCHAR2와 관련된 변환 정보도 NVARCHAR2에 유효합니다.
샘플 소스 패턴¶
Create Table의 Nvarchar2 데이터 타입¶
Oracle¶
Snowflake¶
참고
Oracle에서 이러한 값을 VARCHAR2 열에 같은 크기로 삽입하려고 하면 오류가 트리거됩니다. 값이 열에 비해 너무 큽니다.
Nchar 열에서 정보 검색하기¶
Oracle¶
결과¶
NVARCHAR2_COLUMN |
|---|
ភាសាខ |
Snowflake¶
결과¶
NVARCHAR2_COLUMN |
|---|
ភាសាខ |
각 열의 바이트 단위 크기 검색하기¶
Oracle¶
결과¶
LENGTHB(NVARCHAR2_COLUMN) |
|---|
10 |
Snowflake¶
결과¶
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에서와 마찬가지로 열에 저장된 값의 크기를 사용하여 가변적입니다.
샘플 소스 패턴¶
Create Table의 Varchar2 데이터 타입¶
Oracle¶
Snowflake¶
varchar 열에서 데이터 검색하기¶
Oracle¶
결과¶
VARCHAR2_COLUMN1 |
VARCHAR2_COLUMN2 |
VARCHAR2_COLUMN3 |
|---|---|---|
H |
Hello |
Hell |
Snowflake¶
결과¶
VARCHAR2_COLUMN1 |
VARCHAR2_COLUMN2 |
VARCHAR2_COLUMN3 |
|---|---|---|
H |
Hello |
Hell |
열의 변수 크기 검토하기¶
Oracle¶
결과¶
LENGTHB(VARCHAR2_COLUMN1) |
LENGTHB(VARCHAR2_COLUMN2) |
LENGTHB(VARCHAR2_COLUMN3) |
|---|---|---|
1 |
5 |
4 |
Snowflake¶
결과¶
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 데이터 타입).
경고
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 columns are used to store a locator with the directory and filename. They are changed to Snowflake VARCHAR to store the directory and filename into the column. However, loading the content of the file must be done manually.
Oracle¶
결과¶
COL1 |
|---|
[BFILE:myfile.png] |
Snowflake¶
결과¶
COL1 |
|---|
mydirectory\myfile.png |
경고
UDF 는 BFILENAME() 을 대체하기 위해 추가되었습니다.
UDF 추가됨
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¶
Snowflake¶
데이터 검색하기¶
Oracle¶
결과¶
BLOB_COLUMN |
EMPTY_COLUMN |
|---|---|
[NULL] |
[BLOB] |
Snowflake¶
결과¶
BLOB_COLUMN |
EMPTY_COLUMN |
|---|---|
NULL |
함수 예제¶
경고
이 예는 SnowConvert AI의 변환이 아니며, Oracle BLOB과 Snowflake BINARY 간의 기능적 동등성을 보여주는 데만 사용됩니다.
경고
Snowflake는 “utl_raw.cast_to_raw” 및 “DBMS_LOB.SUBSTR” 함수를 사용합니다. 이러한 함수에 대한 변환은 현재 SnowConvert 에서 지원되지 않습니다.
Oracle¶
결과¶
RESULT |
|---|
[NULL] |
hello world |
Snowflake¶
결과¶
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¶
Snowflake¶
데이터 검색하기¶
Oracle¶
결과¶
CLOB_COLUMN |
EMPTY_COLUMN |
|---|---|
THIS IS A TEST |
Snowflake¶
결과¶
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¶
Snowflake¶
데이터 검색하기¶
Oracle¶
결과¶
NCLOB_COLUMN |
EMPTY_COLUMN |
|---|---|
THIS IS A TEST |
Snowflake¶
결과¶
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 없음.