데이터타입(DataType)

서현서현·2022년 2월 8일
0

DB, SQL

목록 보기
5/27
post-thumbnail

📌 DaraType이란?

  • 오라클에서 사용하는 자료형태
  • 문자열, 숫자, 날짜, 2진수로 구분(문자 자료는 없음)

1)문자열 자료
. ''로 묶인 자료
. 가변길이와 고정길이 타입으로 구분
. ' '안의 자료는 대소문자 구별
. CHAR, VARCHAR, VARCHAR2, LONG, CLOB, NVARCHAR2, NCLOB

(1) CHAR

: 고정길이 데이터타입

  • 최대 2000BYTE 까지 가능
  • 기억공간이 남으면 오른쪽에 공백이 삽입
  • 기억공간이 부족하면 오류
  • 주로 기본키 설정등에 사용
  • 한글은 한글자가 3BYTE 로 저장
    (사용형식)
    컬럼명 CHAR (n [BYTE|CHAR])
  • N :확보된 기억공간의 크기(최대 2000)
  • BYTE|CHAR: default는 BYTE이며 CHAR은 글자수임
    한글을 저장하는경우 CHAR(2000CHAR)로 선언되어도 2000BYTE를 초과할 수 없어 666글자만 저장가능
CREATE TABLE TEMP01(
                      COL1 CHAR(20),
                      COL2 CHAR(20 BYTE),
                      COL3 CHAR(20 CHAR));
    
    INSERT INTO TEMP01 VALUES('대전시 중구 오류동 846','대전시 중구 오류동 846','대전시 중구 오류동 846');


한글 8자 x 3 = 24, 6을 더하면 30 (남는공간의길이는 영문자기준으로 확보)

남는공간의 길이?

SELECT LENGTHB(COL1) AS 길이1,
SELECT LENGTHB(COL2) AS 길이2,
SELECT LENGTHB(COL3) AS 길이3
  FROM TEMP01;

(2) VARCHAR2

  • 가변길이 문자 데이터를 저장
  • 확보된 기억공간에 데이터를 저장하고 남는 기억공간(오른쪽)은 시스템에게 반환
  • 최대 4000BYTE 까지 저장가능
  • VARCHAR와 VARCHAR2는 내부적으로 동일하게 처리(VARCHAR2 사용을 권고함)
    (사용형식)
    컬럼명 VARCHAR2(n [BYTE|CHAR])
    -사용은 CHAR에 준함
    n은 글자수를 의미?..
CREATE TABLE TEMP02(
       COL1 VARCHAR2(2000),
       COL2 VARCHAR(2000 BYTE),
       COL3 VARCHAR(2000 CHAR));
       
       INSERT INTO TEMP02 VALUES('APPALE BANNA PERSIMMON', 'APPALE BANNA PERSIMMON', 'APPALE BANNA PERSIMMON');
	   INSERT INTO TEMP02 VALUES('IL POSTINO', '대전시 중구 오류동 846', '대전시 중구 오류동 846');

       SELECT*FROM TEMP02;
       
       SELECT LENGTHB(COL1),
              LENGTHB(COL2),
              LENGTHB(COL3)
         FROM TEMP02;

(3) LONG

  • 가변길이 자료 저장
  • 최대 2GB까지 저장 가능
  • 한테이블에 하나의 LONG타입만 사용가능
  • 기능개선중단(DEPRECATES) => CLOB로 대체
  • SELECT문의 SELECT절, UPDATE문의 SET절, INSERT문의 VALUES절에서 사용 가능
  • 특정함수는 사용할 수 없음
    (사용형식)
    컬럼명 LONG
    CREATE TABLE TEMP03(
         COL1 CHAR(20000),
         COL2 VARCHAR2(2000),
         COL3 LONG,
         COL4 LONG);

Long타입은 하나만 가능하므로 ERROR >> COL4 지워주고 실행

INSERT INTO TEMP03 VALUES('대전시 중구 오류동 846', '대전시 중구 오류동 846','대전시 중구 오류동 846');
     
      SELECT * FROM TEMP03;

COL1만 엄청 길게 나옴

SELECT LENGTHB(COL1),
              LENGTHB(COL2),
              LENGTHB(COL3)
       FROM TEMP03;

롱타입은 LENGTHB로 바이트 수 조절 불가능하다 (CLOB는 더 길지만 기능개선으로 ㄱㄴ해짐)

CF. 그래서 생략하고 써주면 돌아간당

(4) CLOB(Character Large OBjects)

  • 최대 4GB까지 저장 가능

  • 한 테이블에 복수개의 clob타입의 컬럼 사용가능

  • 큰 크기 때문에 일부기능은 DBMS_LOB Api(Application Programming Interface) 지원을 받아야 사용 가능

    (사용형식)
    
    컬럼명 CLOB
    CREATE TABLE TEMP04(
                           COL1 CLOB,
                           COL2 CLOB,
                           COL3 VARCHAR2(4000));
         
         INSERT INTO TEMP04 VALUES('IL POSTINO','대전시 중구 오류동 846','APPLE BANNA PERSIMMON'); 
         SELECT * FROM TEMP04;
         
         SELECT SUBSTR(COL1,2,4),
        	    SUBSTR(COL2,4,3),
         		SUBSTR(COL3,2,4)
           FROM TEMP04;


🚨 순번,글자수에서 글자수, 순번으로 바뀌었으니 달라짐

SELECT SUBSTR(COL1,2,6),
       DBMS_LOB.SUBSTR(COL1,2,6), 
       SUBSTR(COL3,2,4)
       FROM TEMP04;

순서 바꿔본 결과!

SELECT DBMS_LOB.GETLENGTH(COL1),
       DBMS_LOB.GETLENGTH(COL2),
       DBMS_LOB.GETLENGTH(COL3)
  FROM TEMP04;

🚨 LENGTHB 대신 DBMS_LOB.GETLENGTH()써줘야됨.
(LENGTHB는 글자수를 바이트로 바꾼거고 한글사용시 LENGTH가 LENGTHB보다 3배 더 작음)

(5) NVARCHAR(National VARCHAR), NVARCHAR2, NCLOB

  • 국제 표준 문자코드인 UTF-8이나 UTF-16 방식으로 ENCODING할때 사용
  • 나머지는 VARCHAR VARCHAR2 CLOB과 동일

0개의 댓글