Type 참조 안내서
o2types extension 설치 후 신규 데이터 타입들이 추가되며, 아래의 2가지 형식으로 사용하여야 한다.
1. search_path를 설정하지 않은 경우
스키마(기본 oracle
)의 이름을 타입 앞에 추가하여 사용한다.
{schema_name}.{type_name}
-- 예시) o2types extension 설치 후, 새로 추가된 date라는 타입을 사용
-- create table T (col1 oracle.date);
2. search_path를 설정한 경우
스키마(기본 oracle
)를 가장 높은 우선순위 search_path로 설정한 경우, 스키마를 생략하고 사용할 수 있다.
-- 현재 접속 세션에서 스미카 'oracle'를 가장 우선순위 높은 search_path로 설정
set search_path to oracle, public;
{type_name}
-- 예시) o2types extension 설치 후, 새로 추가된 date라는 타입을 사용
-- create table T (col1 date);
아래 사양들은 스키마를 생략한 형태로 기술한다
DATE
DATE 타입은 특정 날짜와 초 단위까지의 시간을 표현하는 데이터 타입이다. TIMESTAMP(0)과 표현 범위가 동일하다.
DATE
DATE 타입은 다음과 같은 특징이 있다.
연도, 월, 일, 시, 분, 초를 표현할 수 있다.
연도는 BC 4,713 ~ AD 294,276까지 표현할 수 있다.
시간은 24시간 단위로 표현된다.
CREATE TABLE T (a date);
INSERT INTO T VALUES ('4713-01-01 01:11:30 BC');
INSERT INTO T VALUES ('2023-03-19 13:29:30');
VARCHAR2
VARCHAR2 타입도 CHARACTER VARYING 타입과 마찬가지로 문자열 길이가 일정하지 않은 가변 길이를 갖는다.
VARCHAR2[(size)]
VARCHAR2 타입은 다음과 같은 특징이 있다.
문자열은 최대 10,485,760 byte(=10MB)까지 선언할 수 있다. 변환된 문자열의 길이가 해당 크기를 넘으면 에러가 발생한다.
문자열의 크기를 지정하지 않은 경우 Postgresql native type인 TEXT 처럼 동작한다.
문자열의 길이는 byte를 기준으로 지정할 수 있다.
SQL 문장에서 VARCHAR2 타입의 값을 표현할 때에는 항상 작은 따옴표(' ')를 사용한다.
Postgresql의 기본 동작을 고려하여, ORACLE과는 다르게 빈 문자열('')과 NULL을 다른 값으로 간주한다.
다음은 VARCHAR2 타입을 설명하는 예이다.
EMP_NAME VARCHAR2(10)
위 예제에서 보듯이 EMP_NAME 컬럼은 10byte의 문자열 길이를 갖는다. 예를 들어 'Peter' 문자열이 입력되었다면 'Peter' 문자열이 저장된다. 다시 말해 EMP_NAME 컬럼의 문자열 길이는 10byte로 선언되었지만 실제로 저장된 문자열 길이는 5byte이다. 이처럼 VARCHAR2 타입은 선언된 문자열 길이의 범위 내에서 입력된 문자열 길이와 동일한 길이를 갖는다.
NVARCHAR2
NVARCHAR2 타입은 유니코드 문자열을 저장하기 위한 타입이다. 문자열 길이가 일정하지 않은 가변 길이를 갖는다는 특징이 있다.
NVARCHAR(size)
NVARCHAR2 타입은 다음과 같은 특징이 있다.
기본적으로 VARCHAR2 타입과 유사하지만, 문자열의 길이가 문자 기준이다.
데이터베이스에 저장되는 타입의 길이는 다국어 문자 집합에 따라 달라진다. 예를 들어 UTF8인 경우엔 size의 최대 3배, UTF16인 경우엔 size의 최대 2배가 된다.
NVARCHAR2 타입의 문자열의 최대 길이는 10,485,760자이다.
SQL 문장에서 NVARCHAR2 타입의 값을 표현할 때에는 항상 작은 따옴표(' ')를 사용한다.
Postgresql의 기본 동작을 고려하여, ORACLE과는 다르게 빈 문자열('')과 NULL을 다른 값으로 간주한다.
CLOB
CLOB(Character Large Object)은 대용량의 문자열 데이터를 저장하기 위한 데이터 타입이다.
clob
특징
내부적으로 PostgreSQL의
text
타입을 기반으로 한다.최대 크기는 바이트수 기준으로 약 1 GB이다.
UTF-8 멀티바이트 문자(예: 한글, 일본어, 이모지 등)를 사용할 경우, 최대 문자열 길이가 싱글바이트 문자인 영문보다 훨씬 더 적어질 수 있음에 유의해야 한다.
문자열 결합 연산자
||
를 제공한다.SQL 문장에서 CLOB 타입의 값을 표현할 때에는 항상 작은따옴표(' ')를 사용한다.
사용 예시
SELECT 'Hello, '::clob || 'World!'::clob;
BLOB
BLOB(Binary Large Object)은 이진 데이터를 저장하기 위한 Oracle의 데이터 타입이다.
blob
BLOB은 일반적으로 이미지, 바이너리 파일, 실행 파일 등 다양한 형태의 이진 데이터를 저장하는 데 사용된다.
특징
내부적으로 PostgreSQL의
bytea
타입을 기반으로 한다.최대 크기는 PostgreSQL
bytea
타입의 한계와 동일하게 약 1GB이다.가공 함수, 연산자 등은 기본적으로 PostgreSQL
bytea
타입의 연산을 그대로 사용할 수 있다.SQL 문장에서 BLOB 타입의 값을 표현할 때에는 항상 작은따옴표(' ')를 사용하며, 이진 데이터를 직접 SQL에 넣을 경우 이스케이프 처리(
E’’
)가 필요하다.예)
\xDEADBEEF
를 SQL에서 표현하는 BLOB →E'\\xDEADBEEF'::blob
사용 예시
INSERT INTO files (data) VALUES (E'\\xDEADBEEF'::blob);
Last updated