본문 바로가기
DB/SQL(오라클)

오라클(SQL)데이터 타입

by redbear0077 2021. 3. 12.
반응형

데이터 타입

숫자형,문자열,날짜,기타로 구분

    1. 날짜형
      - 고정길이 형식(CHAR)
      - 가변길이 형식(VARCHAR, VARCHAR2, LONG, CLOB, NVARCHAR2, NCLOB)
      
      1) CHAR
        - 고정길이 문자열을 저장
        - 기억공간이 남으면 오른쪽에 공백이 삽입되어 저장
        - 데이터가 크면 오류
        - 주로 기본키의 데이터 타입으로 사용 
        - 한글 한 글자는 3BYTE로 처리
        - 최대 2000BYTE까지 저장 가능
(사용형식)
        컬럼명 CHAR(크기[BYTE|CHAR]);
            - 크기 : 1~2000
            - BYTE|CHAR : '크기'로 지정된 값이 BYTE 값인지 CHAR 갯수인지 지정
              'CHAR' 로 지정되더라도 2000BYTE 를 초과할 수 없으며, default값은 BYTE 

 

사용예)

CREATE TABLE TEMP01(
        COL1 CHAR(20 BYTE), COL2 CHAR(20 CHAR), COL3 CHAR(20));
        
    INSERT INTO TEMP01(COL1,COL2,COL3)
        VALUES('무궁화 꽃이','무궁화 꽃이','ABCDEFGHIJKLMN');
        
    INSERT INTO TEMP01(COL1,COL2,COL3)
        VALUES('무궁화 꽃이','무궁화 꽃이 피었습니다. 무궁화 꽃은','ABCDEFGHIJKLMN');
        
    SELECT * FROM TEMP01;
    
    SELECT LENGTHB(COL1), LENGTHB(COL2), LENGTHB(COL3)
    FROM TEMP01;

      2) VARCHAR2
        - 가변길이 문자열을 저장
        - 1~4000 BYTE처리 가능
        - 오라클에서만 사용 가능한 데이터 타입(다른 DBMS에서는 VARCHAR를 사용)
(사용형식)
        컬럼명 VARCHAR2(크기[BYTE|CHAR]);
         - 크기 : 1~4000
         - BYTE|CHAR : '크기'로 지정된 값이 BYTE 값인지 CHAR 갯수인지 지정
            'CHAR'로 지정되었더라도 4000BYTE 를 초과할 수 없으며, default 값은 BYTE 이다
  사용 예)

CREATE TABLE TEMP02( 
        COL1 VARCHAR2(50), COL2 VARCHAR2(50 CHAR), COL3 VARCHAR2(50 BYTE)); 
     
    INSERT INTO TEMP02(COL1,COL2,COL3) 
        VALUES('무궁화 꽃이','무궁화 꽃이','ABCDEFGHIJKLMN'); 
         
    INSERT INTO TEMP02(COL1,COL2,COL3) 
        VALUES('무궁화 꽃이','무궁화 꽃이 피었습니다. 무궁화 꽃은','ABCDEFGHIJKLMN'); 
         
    SELECT * FROM TEMP01; 
     
    SELECT LENGTHB(COL1), LENGTHB(COL2), LENGTHB(COL3) 
    FROM TEMP02;

3) NVARCHAR2, VARCHAR
        - VARCHAR 와 VARCHAR2 는 동일 기능 제공
        - Oracle 사에서는 VARCHAR2 사용 권고
        - NVARCHAR2 는 국제표준코드(다국적 언어)를 사용하여 문자열 저장
        - UTF-8(가변길이), UTF-16(고정길이)형식으로 처리
        
      4) LONG
        - 대용량 가변길이 자료를 저장
        - 2gb까지 처리 가능
        - 제약사항 : 한 테이블에 한 컬럼만 LONG타입으로 선언 가능
        - CLOB 타입으로 대체(현재 기능 개선이 종료됨)
        (사용형식)
        컬럼명 LONG;
        --오라클에서 LONG 은 긴문자열 자바와 헷갈리지 말자

 

사용 예)

CREATE TABLE TEMP03(
    COL1 LONG, COL2 CLOB, COL3 VARCHAR2(3000));
    --LONG, CLOB는 크기지정 안해
    
    INSERT INTO TEMP03(COL1,COL2,COL3)
        VALUES('무궁화 꽃이','무궁화 꽃이','ABCDEFGHIJKLMN');
        
    INSERT INTO TEMP03(COL1,COL2,COL3)
        VALUES('무궁화 꽃이','무궁화 꽃이 피었습니다. 무궁화 꽃은','ABCDEFGHIJKLMN');
        
    SELECT * FROM TEMP03;
    
    SELECT DBMS_LOB.GETLENGTH(COL2), LENGTHB(COL3)
    FROM TEMP03;

5) CLOB --CHAR LARGE OBJECT
        - LOB(Large OBJects)타입
        - 대용량 자료(4GB)를 저장하기 위한 가변길이 데이터 타입
        - 여러 칼럼에서 동시에 사용가능(long 타입 개선)
        - 일부기능은 DBMS_LOB API지원을 받아야함 (LENGTH, SUBSTR 등)
        - 자료의 크기는 문자열 수로 반환(GETLENGTH), LENGTHB는 사용불가 --LENGTHB 는 BYTE수 
(사용형식)
        컬럼명 LOB;

 

사용예)

CREATE TABLE TEMP04(
        COL1 CLOB, COL2 CLOB, COL3 VARCHAR2(100));
        
    INSERT INTO TEMP04(COL1,COL2,COL3)
        VALUES('무궁화 꽃이','무궁화 꽃이','ABCDEFGHIJKLMN');
        
    INSERT INTO TEMP04(COL1,COL2,COL3)
        VALUES('무궁화 꽃이','무궁화 꽃이 피었습니다. 무궁화 꽃은','ABCDEFGHIJKLMN');
        
    SELECT * FROM TEMP04;
    
    SELECT SUBSTR(COL3,2,5) FROM TEMP04;
    --COL3에서 2 번째부터 5개를 뽑아라
    
    SELECT DBMS_LOB.SUBSTR(COL2,2,5) FROM TEMP04;
    --COL2에 2개 5번째부터  => 위의 SUBSTR과 ()안의 위치가 바뀐다
    
    SELECT LENGTH(COL3) AS "데이터 길이", LENGTH(COL2) FROM TEMP04;
    -- " " => 공백이 들어갈때, 날짜같은것 사용자가 정의할때(형식문자열) 
        SELECT DBMS_LOB.GETLENGTH(COL2) 
            FROM TEMP04;
    
    SELECT TO_CHAR(SYSDATE,'YYYY"년" MM"월" DD"일" AM') 
        FROM DUAL;
   
   COMMIT;
        
반응형