Oracle - 자료형- 문자열

갓김치·2020년 7월 23일
1

Oracle

목록 보기
7/33

참조

2020-07-23-02.sql

  • 오라클에서 사용되는 자료형에는 문자열, 숫자, 날짜, 기타 등으로 구분
  • 날짜 : DATE, ?
  • 기타 : BLOB(그림,영상 등을테이블 내 저장, BFILE?(테이블밖에저장하고 주소만 테이블안에)

문자열

기본

  • 오라클의 문자열 자료는 ''로 묶어 표현 ("": 컬럼의 별칭 쓸 때 사용)
  • 문자열 자료형에는 CHAR, VARCHAR, VARCHAR2, LONG, CLOB, NVARCHAR2, NCLOB
  • 가장 자주쓰는건 CHAR, VARCHAR2, CLOB (VARCHAR2는 오라클에서만 존재)
  • 한글(완성형) 한글자는 3BYTE를 점유
    - 조합형: 초성,중성,종성에 코드값 부여해서 따로 따로따로 ex) ㅎ+ㅏ+ㄴ
    - 완성형: 1글자 ex) 한

추가지식

  • CHAR 제외 전부 가변길이 문자 타입
    • 가변: 사용자가 정의한 범위보다 데이터가 작을 때 남은 만큼 SYSTEM에게 반환
  • LONG: 2GB, 한 테이블당 하나의 칼럼에만 가능한 제약사항때문에 요즘 잘안쓰고 제약사항없고 4GB지원되는 CLOB씀
  • N~: NATIONAL 국제표준으로 저장시킬때 사용 ex. UTF-8, UTF-16
  • ASCII코드

1. CHAR

  • 고정길이 문자열
    • 10byte에서 2byte만 써도 8byte가 공백으로 남는다
  • 기본키 컬럼의 데이터 타입으로 사용에 자주 쓰임
    • ex) 학번, 주민등록번호, 상품코드
  • 왼쪽부터 저장되고 남는 공간은 공백으로 PADDING
  • 2000BYTE를 초과하는 데이터는 저장할 수 없다.

사용형식

컬럼명 CHAR (크기 [BYTE|CHAR]);

  • 2000 BYTE까지 사용 가능
  • [BYTE|CHAR] : 크기의 단위 옵션
    • BYTE: DEFAULT 값
    • CHAR: '크기'는 글자수를 의미. 단, CHAR을 기술해도 2000BYTE를 초과할 수 없다.
      (ex. 한글 2000 CHAR불가, 6000BYTE이기때문, 영어, 숫자는 1BYTE)

예제1)

  1. 예제를 위한 TEMP01 테이블 CREATE

  2. TEMP01 테이블에 예제 INSERT

  3. 잘 되었는지 SELECT 검증
    SELECT * FROM TEMP01;

  • COL1 값은 10BYTE인데, 두번째 행의 '대한민국'은 12BYTE여서 오류 발생.
  • 삽입 불가
  1. 각 행의 크기(바이트)를 재기 위해 LENGTHB 함수를 이용

2. VARCHAR2

  • 가변길이 문자열 저장에 사용
  • 4000BYTE까지 가능, 사용자가 입력한 만큼만 쓰고 나머지 공간은 SYSTEM에 반환 = 빈공간 발생 안됨
  • 이제 하드 공간 많으니 넉넉하게 VARCHAR2를 씁시다

사용형식

컬럼명 VARCHAR2(크기 [BYTE|CHAR]);

예제1)

  1. 예제를 위해 CREATE TABLE TEMP02

  2. TEMP01 테이블에 예제 INSERT

  • COL1이름이 Oracle인것만 보고싶다면
    • SELECT * FROM TEMP02 WHERE COL1='Oracle';
  1. 각 행의 크기(바이트)를 재기 위해 LENGTHB 함수를 이용

3. VARCHAR

  • VARCHAR2와 동일 기능 제공
  • Oracle 사에서는 VARCHAR2 사용을 권고
  • 다른 DBMS에서는 기본 문자열 타입 (가변길이)

4. NVARCHAR2

  • 국제표준 코드(다국적 언어)를 사용하여 문자열 저장
  • UTF-8(가변길이), UTF-16(고정길이) 형식으로 처리

5. LONG

  • 가변길이 문자열 저장
  • 2GB까지 처리가능
  • 제약사항: 한 테이블당 하나의 컬럼만 사용 가능 -> 치명적인 단점
  • 4GB까지 되는 CLOB 타입으로 대체

사용형식

컬럼명 LONG;

  • SELECT문의 SELECT절
  • UPDATE문의 SET절
  • INSERT문의 VALUE절에서 사용 가능

6. CLOB

  • LOB: Large OBjects (BLOB: Binary)
  • 대용량 문자 자료를 저장하기 위한 데이터 타입
  • 가변길이 문자열 저장
  • 최대 4GB까지 저장 가능
  • 여러개 동시에 CLOB로 지정 가능 (LONG의 단점 보완)
  • 일부 기능들은 DBMS_LOB API의 지원을 받아야 됨
    • ex) 부분 문자열 추출해야할 때
    • 2BYTE = 16BIT = 1111111111111111 -> 66535
      최댓값 왜 써놓은거지?
  • 이미지같은거 통째로 집어넣을 때, 코드 많은 거 넣을때 사용
  • 크기 잴 때 LENGTH 사용: 크기가 무지하게 크기때문에 BYTE재는 LENGTHB같은건 BLOB, CLOB에 사용불가

사용형식

컬럼명 CLOB;

예제1) DBMS_LOB API 이용

  1. 예제를 위해 CREATE TABLE TEMP04

  2. DMBS_LOB API함수를 적용해 SELECT

  • LENGTHB와 같은 BYTE수를 체크하는 함수는 BLOB, CLOB에 쓸 수 없다.

  • CLOB 문자추출: DBMS_LOB.SUBSTR(컬럼위치,개수(카운트),시작위치(인덱스))
  • VARCHAR2 문자추출: SUBSTR(컬럼위치,시작위치(인덱스),개수(카운트))
profile
갈 길이 멀다

0개의 댓글