[Oracle] 오라클 데이터 타입(Data Type) 정리

데이터 타입(Data Type)이란?

데이터베이스는 다양한 종류의 데이터를 저장하고 관리한다. 따라서 이 데이터를 어떤 형식 혹은 형태로 저장할지 결정해야 한다. 이처럼 데이터베이스에서 데이터 타입이란 데이터가 저장되는 형식 혹은 형태를 뜻한다.

 

오라클에서의 데이터 타입도 마찬가지로 데이터가 저장되는 형식 혹은 형태를 의미한다. 오라클에서는 문자형, 날짜, 숫자 등 다양한 기본 데이터 타입을 지원한다. 사용자는 이러한 기본 데이터 타입을 혼합하여 사용자 정의 데이터 타입을 만들 수도 있다.

 

오라클에서 지원하는 기본 데이터 타입(Oracle Built-in Data Types)은 다음과 같다.

 

Oracle Built-in Data Types
[그림 1] Oracle Built-in Data Types (출처 : 참고1 )

 

문자 데이터 타입(Character Data Types)

문자 데이터 타입은 문자(character) 혹은 자유 형식 텍스트를 저장한다. 

 

문자 데이터 타입은 다른 데이터 타입에 비해 제한성이 적어 유연한 사용이 가능하다.

예를 들어 문자 데이터 타입은 숫자 값을 저장할 수 있지만 숫자 값에는 숫자만 저장이 가능하다.

 

문자 데이터 타입에는 아래와 같은 타입들이 존재한다.

 

데이터타입 설명
CHAR 최대 2000 byte의 고정 길이 문자를 저장. 기본(최소) 크기는 1byte. 
처음 정한 크기보다 더 적은 문자열을 입력하면 공백으로 채워짐.
ex) CHAR(5) <- 'hi' 입력하면 'hi   '로 저장
VARCHAR2 최대 4000 byte의 가변 길이 문자를 저장. 최소 사이즈는 1byte 혹은 1 character.
길이를 가변적으로 정하므로 CHAR 보다 메모리 절약이 가능하다.
ex) VARCHAR2(5) <- 'hi' 입력하면 'hi' 로 저장

※ Oracle Database 12c 부터 특정 조건을 만족하면 32767 byte를 저장 가능하다.
NCHAR 최대 2000 byte의 고정 길이 유니코드 문자를 저장. 
NVARCHAR 가변 길이 유니코드 문자를 저장. 최대 크기는 2000~32767 바이트로 MAX_STRING_SIZE에 따라 다름.

 

 

숫자 데이터 타입 (Numeric Data Types)

숫자 데이터 타입은 양수, 음수, 소수, 0, 무한대, 그리고 연산에 의한 정의되지 않은 값("not a number" or NAN)등을 저장한다. 

 

숫자 데이터 타입에는 아래와 같은 타입들이 존재한다.

 

데이터 타입 설명
NUMBER 0을 포함한 음수와 양수 등의 숫자를 저장. 1.0 * 10^(-130) ~부터 1.0 * 10^126 미만 까지 저장할 수 있다. 그 이상의 절댓값을 가진 수는 에러를 반환한다. 

NUMBER 타입은 NUMBER(p,s)와 같이 사용하는데, 여기서 p는 정밀도(precision)로 소수점을 포함한 자릿수를 의미하고, s는 배율(scale)로 소수점의 자릿수를 의미한다.

1~22 byte를 필요로 한다.

FLOAT NUMBER의 하위 타입이다. NUMBER와 다르게 배율 s를 사용하지 않고, p의 범위가 1~126 이진수이다. FLOAT은 정확도가 떨어져 BINARY_FLOAT나 BINARY_DOUBLE을 사용하는게 좋다.
BINARY_FLOAT 32 bit의 부동소수점 수이다.  4byte가 필요하다.
BINARY_DOUBLE 64 bit의 부동소수점 수이다.  8byte가  필요하지만 더 정확하다.

 

NUMBER는 s 값을 지정하지 않으면 자동으로 integer로 저장한다. 

이해를 돕기 위해 예시를 가져왔다.

 

NUMBER 예시
[그림 2] NUMBER 예시 (출처 : 참고 1)

 

LONG과 RAW 데이터 타입

LONG 데이터 타입은 최대 2^31-1 byte의 문자를 저장할 수 있는 데이터 타입이다.

하지만 오라클 공식 문서에서는 LONG 데이터 타입을 사용하지 말고 LOB 데이터 타입을 사용할 것을 권장하고 있다.

LONG 타입보다 LOB 타입이 제한이 적고, 더 기능이 발전했기 때문이다.

 

RAW 데이터 타입은 오라클과 다른 시스템 간에 데이터를 이동할 때 오라클에서 명시적으로 변환하지 않는 데이터를 저장한다. 예를 들어 그래픽, 사운드, 이진 데이터 배열 등을 저장할 수 있다. 

 

이런 경우 해석은 용도에 따라 달라지게 된다.

 

 

날짜 데이터 타입 (Datetime Data Type)

날짜 데이터 타입은 날짜와 시간 등을 저장할 수 있는 데이터 타입이다.

 

날짜 데이터 타입에는 아래와 같은 타입들이 존재한다.

 

데이터 타입 설명
DATE BC 4712년부터 AD 9999년 까지의 날짜를 저장. 7byte로 저장한다.

Datetime 필드인 YEAR, MONTH, DAY, HOUR, MINUTE, SECOND를 포함한다. 
TIMESTAMP DATE 타입의 확장된 타입이다. 9자리의 밀리초까지 저장이 가능하다. 
TIMESTAMP WITH TIME ZONE 시간대의 지역 이름 혹은 주소 등을 포함한 TIMESTAMP
TIMESTAMP WITH LOCAL TIME ZONE 클라이언트 시스템의 TIME ZONE 정보를 포함한 TIMESTAMP.
TIMESTAMP WITH TIME ZONE과 다른 점은 유저가 해당 데이터를 요청하면, 언
제나 클라이언트 시스템의 지역을 고려해 결괏값을 보여준다는 것이다. 

 

Large Object(LOB) 데이터 타입

Large Object 데이터 타입은 BLOB, CLOB, NCLOB(내부 저장), BFILE(외부 저장) 등을 의미한다.

매우 큰 용량의 텍스트, 이미지, 비디오나 특별한 데이터를 저장할 수 있다. 

 

BLOB, CLOB, NCLOB은 (2^32-1 byte)*(LOB 저장소의 CHUNK 파라미터 값) 만큼의 데이터를 저장할 수 있다. 

BFILE은 최대 2^64-1 byte까지 저장이 가능하다.

 

Large Object 데이터 타입은 아래와 같은 타입들이 존재한다.

 

데이터 타입 설명
BLOB 구조화되지 않은(unstructed) 대용량 이진 객체를 저장한다. 
CLOB 단일 바이트와 멀티 바이트 character 데이터를 저장한다. 고정 길이와 가변 길이 character set을 모두 지원한다. 
NCLOB 유니코드 데이터를 저장한다. 고정 길이와 가변 길이 character set을 모두 지원한다. 
BFILE 오라클 데이터베이스 밖에 위치한 파일시스템에 저장된 LOB 이진 파일에 접근할 수 있다. 즉 이진 파일에 대한 포인터와 같은 역할을 한다. 

 

 

ROWID 데이터 타입

데이터베이스의 모든 행(row)은 주소를 가진다.

오라클 데이터베이스에서는 아래와 같이 두 가지 형태로 행 주소를 저장한다.

 

데이터 타입 설명
ROWID 데이터 행(row)의 주소를 나타낸다. 아래와 같은 정보들을 포함한다.

1) 행을 포함하는 데이터 파일의 데이터 블록(data block)
2) 데이터 블록의 행(row)
3) 행을 포함하는 데이터베이스 파일
4) 데이터 객체 번호
UROWID 범용 ROWID(Universal ROWID), ROWID가 없는 타 데이터베이스에서 게이트웨이를 거쳐 액세스하는 테이블에서 사용한다.

 

 

 


참고

 

 

1.https://docs.oracle.com/en/database/oracle/oracle-database/19/sqlrf/Data-Types.html

 

반응형

댓글

Designed by JB FACTORY