본문 바로가기
Data/Oracle

[Oracle] DataType / 오라클 데이터 타입의 종류

by prinha 2020. 9. 13.
반응형

 

데이터 타입(DataType)이란

컬럼이 저장되는 데이터 유형을 말하며,

오라클에서는 기본적으로 제공되는 기본 데이터 타입(원시 데이터 타입)과 사용자 정의 데이터 타입으로 구분할 수 있다.

사용자 정의 타입이란 사용자가 직접 기본 데이터 타입을 혼합해 만들 수 있는 타입이다.


1. 문자 데이터 타입

문자나 문자열 데이터는 문자형 데이터에 속하며, 오라클에서 제공하는 문자형은 다음과 같다.

데이터 타입 설명
CHAR (크기[ BYTE | CHAR ]) 고정길이 문자, 최대 2000byte, 디폴트 값은 1byte
VARCARCHAR2 (크기[ BYTE | CHAR ]) 가변길이 문자, 최대 4000byte, 디폴트 값은 1byte
NCHAR (크기) 고정길이 유니코드 문자(다국어 입력 가능), 최대 2000byte, 디폴트 값은 1
NVARCARCHAR2 (크기) 가변길이 유니코드 문자(다국어 입력 가능), 최대 4000byte, 디폴트 값은 1
LONG 최대 2GB 크기의 가변길이 문자형, 잘 사용하지 않음->CLOB / BLOB

 

특정 컬럼을 VARCHAR2(10)으로 선언하면, 10byte까지 데이터를 입력할 수 있다.

그런데 이 컬럼에 'abc'라고 세 글자만 입력하면 실제 컬럼 길이는 3byte가 된다.

반면 고정길이 CHAR(10)으로 만든 후 'abc'라고 입력하면 세 문자만 입력됐더라도 이 컬럼 길이는 10byte가 된다.

CREATE TABLE ex2_1 (
    COLUMN1    CHAR(10),
    COLUMN2    VARCHAR2(10)
);

INSERT INTO ex2_1 ( column1, column2 ) VALUES ('abc', 'abc');
-- LENGTH() : 괄호안에 있는 데이터(칼럼)의 길이는 반환
-- as ~ : ~의 이름으로 출력해서 보기
-- COLUMN1 CHAR(10), COLUMN2 VARCHAR2(10) 두 컬럼의 실제 저장공간 및 데이터 길이
-- CHAR와 VARCHAR 기억장소의 사용

SELECT column1, LENGTH(column1) as len1,
       column2, LENGTH (column2) as len2
FROM ex2_1;

 

출력결과

 

*

컬럼 타입을 선언할 때 크기(숫자)만 명시하면 디폴트 값인 byte가 적용된다.

영어에서 한 문자는 1byte를, 한글은 2byte(DB설정에 따라 3byte)를 차지한다.

 

LENGTH : 컬럼 길이 반환

LENGTHB : 컬럼의 byte 수 반환


2. 숫자 데이터 타입

숫자 타입은 총 4가지가 있긴 하지만 NUMBER형만 사용할 때가 많다.

다른 DBMS는 INTEGER와 같은 정수형, DECIMAL과 같은 실수형을 제공한다.

오라클도 이런 타입으로 컬럼을 생성할 수 있지만 내부적으로는 모두 NUMBER형으로 변환되어 생성된다.

데이터 타입 설명
NUMBER [(p, [s])] 가변숫자, p(1~38, 디폴트 값은 38)와 s(-84~127, 디폴트 값은 0)는 십진수 기준, 최대 22byte
FLOAT[(p)] NUMBER의 하위 타입, p는 1~128, 디폴트 값은 128, 이진수 기준, 최대 22byte
BINARY_FLOAT 32비트 부동소수점 수, 최대 4byte
BINARY_DOUBLE 64비트 부동소수점 수, 최대 8byte
입력값 : 123.54
NUMBER(7,1) ->123.5  소수 첫째자리가 반올림 영향을 받는다
NUMBER(7,-1) -> 120   정수 첫째자리를 타겟으로 반올림 여부를 체크

 

CREATE TABLE ex2_3 (
    COL_INT    INTEGER, --정수형
    COL_DEC    DECIMAL, --실수형
    COL_NUM    NUMBER -- 내부적으로는 NUMBER로 변화되어 사용
);
-- user_tab_cols : 시스템테이블 또는 시스템뷰 
(데이터베이스 객체들에 대한 정보를 관리하기위한 목적으로 존재)

SELECT column_id, column_name, data_type, data_length
FROM user_tab_cols
WHERE table_name = 'EX2_3'
ORDER BY column_id;

 

출력결과

 

NUMBER형은 크기를 명시하지 않거나 '*'를 명시하면 디폴트 값인 38이 적용, 최대 크기인 22byte를 차지한다.

그리고 NUMBER(p,s) 형식으로 크기를 지정할 수 있는데,

p(precision, 정밀도)는 최대 유효숫자 자리수를, s(scale)는 소수점 기준 자릿수를 의미한다.

 

❶ p는 소수점 기준 모든 유효숫자 자릿수를 의미한다. 만약 p에 명시한 것보다 큰 숫자값을 입력하면 오류가 발생한다.

❷ s가 양수면 소수점 이하, 음수이면 소수점 이상(소수점 기준 왼쪽) 유효숫자 자릿수를 나타낸다.

❸ s에 명시한 숫자 이상의 숫자를 입력하면, s에 명시한 숫자로 반올림 처리한다.

❹ s가 음수이면 소수점 기준 왼쪽 자릿수만큼 반올림한다.

❺ s가 p보다 크면 p는 소수점 이하 유효숫자 자릿수를 의미한다.


3. 날짜 데이터  타입

가장 일반적이고 많이 사용하는 날짜 데이터 타입은 DATE이며 연월일시분초까지 입력 가능하다.

TIMESTAMP는 초 단위를 더 세부적으로 입력할 수 있다.

데이터 타입 설명
DATE BC 4712년 1월 1일부터 9999년 12월 31일, 연,월,일,시,분,초까지 입력 가능하다.
TIMESTAMP
[(fractional_seconds_precision)]
연도, 월, 일, 시, 분, 초는 물론 밀리초까지 입력 가능하다.
fractional_seconds_precision은 0~9까지 입력할 수 있고 디폴트 값은 6이다.

 

-- DUAL : 명령어를 사용시 테이블명을 기본적으로 사용을 해야하는데 테이블명 대신 사용하는 임시테이블
-- SYSDATE(리턴값 DATE), SYSTIMESTAMP(리턴값 TIMESTAMP) : 시스템의 날짜, 시간 정보를 확인하는 함수
SELECT SYSDATE, SYSTIMESTAMP FROM DUAL;

출력결과


4. LOB 데이터 타입

LOB는 'Large OBject'의 약자로 대용량 데이터를 저장할 수 있는 데이터 타입이다.

데이터 타입 설명
CLOB 문자형 대용량 객체. 고정길이와 가변길이 문자 집합 지원, 최대 크기는 (4GB-1) * (데이터베이스 블록 사이즈)
NCLOB 유니코드(다국어 지원)를 포함한 문자형 대용량 객체. 최대 크기는 (4GB-1) * (데이터베이스 블록 사이즈)
BLOB 이진형 대용량 객체. 최대 크기는(4GB-1) * (데이터베이스 블록 사이즈)
BFILE 대용량 이진 파일에 대한로케이터(위치, 이름)저장. 최대 크기는 4GB

 

일반적인 정형 데이터(문자, 숫자, 날짜 등 구조화된 데이터)에 비해 텍스트, 그래픽, 이미지, 사운드 등의

비정형 데이터는 그 크기가 매우 큰데, 이런 데이터를 저장하는데에 LOB타입을 사용한다.

 

문자형 대용량 데이터는 CLOB이나 NCLOB, 나머지 그래픽, 이미지, 동영상 등의 데이터는 BLOB를 사용한다.

BFILE은 실제 이진 파일이 아닌 데이터베이스 외부에 있는 파일에 대한 로케이터(해당 파일을 가리키는 포인터)를 저장하며,

실제 파일을 수정할 수는 없고 읽기만 가능하다.


NULL

NULL은 '값이 없음'을 의미하며 테이블을 생성할 때 컬럼 속성에 기술한다.

디폴트 값이 NULL이므로 별도로 지정하지 않으면 해당 컬럼은 NULL을 허용하게 된다.

NULL을 허용하지 않으려면 NOT NULL 구문을 명시해야 한다.

NULL 허용이란 해당 컬럼에 값을 넣지 않아도 된다는 의미이며,

NOT NULL로 명시한 컬럼에 데이터를 넣지 않으면 해당 로우 INSERT 자체가 불가능하다.

SQL문이나 PL/SQL 코드를 작성할 때 개발자가 가장 하기 쉬운 실수 중의 하나가 NULL 처리이다.

DBMS 종류에 따라 NULL 처리가 조금씩 달라 여러 DBMS를 사용하는 개발자라면 혼동하기 쉽다.


출처 및 참고 : https://thebook.io/006696/

 

반응형