ORACLE DB/기초

오라클 DB의 여러가지 데이터타입(문자열,숫자,날짜,2진자료형)

chief_sac 2021. 7. 24.
반응형

 

 

더보기

오라클에서는 여러가지 데이터 타입을 제공하는데 그중 문자열, 숫자형, 날짜형 , 2진자료형이 있습니다.

 

 

문자열데이터타입


 

  • ' ' 로 묶인 자료를 문자열 자료라고합니다.
  • CHAR, VARCHAR, VARCHAR2,NVARCHAR,CHAR,LONG,RAW,CLOB등이 존재합니다.

 

 

  1. CHAR
    - 고정길이 문자열을 취급
    - 최대 2000BYTE 저장 가능 
    - 기억장소가 남으면 오른쪽에 공백이 삽입 .
    - 기억공간보다 큰 데이터는 저장 오류 .
    - 한글 한 글자는 3BYTE 로 저장됨 .
    - 기본키 등에 사용.
    (사용형식)
    컬럼명 CHAR(크기[BYTE|CHAR])
    
    -- '크기[BYTE|CHAR]' : 기억공간의 크기(BYTE)나 글자수 (CHAR) 정의
    -- 2000BYTE 초과 불가​
  2. VARCHAR2
    - 가변길이 문자열 처리 .
    - 최대 4000BYTE 처리가능 .
    - 정의된 기억공간에서 데이터의 길이만큼 사용하고 남는 공간은 시스템에 반납 .
    - VARCHAR와 같은 기능 (오라클은 VARCHAR2 사용을 권고)
    (사용형식)
    컬럼명 VARCHAR2(크기[BYTE|CHAR]_             --가변길이:사용자가 정해진길이 남은 기억공간을 반납한다는것
     '[BYTE|CHAR]' : 생략되면 BYTE로 취급​
  3. LONG 데이터 타입
    • 가변길이 문자열을 저장
    • 최대 2gb 까지 저장가능
    • LONG 타입은 하나의 테이블에서 1개만 사용 가능 --//치명적인 단점
    • CLOB 로 대체(LONG타입 기능 업그레이드 중단) --char large objects
    • SELECT문의 SELECT절, UPDATE문의 SET절, INSERT문의 VALUES절에서 사용 가능
    (사용형식)
    컬럼명 LONG​
  4. CLOB (Character large OBjects) 데이터타입 --여기서 쓸수없는 함수 lengthb
    • 대용량 문자열 자료를 처리하기 위한 데이터 타입
    • 최대 4GB까지 처리가능
    • 가변길이 문자 자료형
    • 한 테이블에서 사용될 수 있는 clob의 갯수에 제한이 없음
    • 일부 기능 들은 DBMS_LOB API의 지원을 받아야 함
    (사용형식)
    컬럼명 LONG​
  5. NCLOB, NVARCHAR2
    • 다국어 지원 형태로 문자 자료저장
    • UTF-8, UTF-16 형식의 ENCODDONG -나머지 기능은 CLOB, VARCHAR2와 동일

숫자자료형  (숫자열우선 JAVA는 문자열우선)


  • 정수와 실수 데이터 저장 --컴퓨터에서 말하는 정수는 고정소수점수 ,실수 부동소수점
  • NUMBER 타입 제공 --거의 무조건 얘만씀 (사용형식) NUMBER[(정밀도|*[,스케일])] --사용자가 한 그대로만 사용할경우
    • 표현할 수 있는 값의 범위 : 1.0e - 130 ~ 9.99999..9e125 -- 10^-130~ 10^126
    • 정밀도 : 전체 자리수(1~38)
    • 스케일 : 소숫점이하의 자리수 ex)NUMBER(5,2) : 전체 5자리가 확보 (정수부분이 3자리,소숫점 이하 3자리에서 반올림 하여 2번째 자리까지 표현
    • 정밀도 대신 ''를 사용하면 38자리 이내에서 자동할당(정수부분) ex)NUMBER(,2) : 소숫점 이하 3자리에서 반올림 하여 2번째 자리까지 표현 단, 정수부분은 38자리 이내에서 크기 만큼 자동 할당
    • 스케일이 생략되면 0으로 간주 --소숫점자리가 사라짐 -스케일이 음수이면 정수부분에서 반올림
  • 12345678.7896                NUMBER                12345678.7896
    12345678.7896                NUMBER(*,2)           12345678.79
    12345678.7896                NUMBER(8)             12345678
    12345678.7896                NUMBER(7,2)           오류                       --정밀도(정수)부분이 8개인데 7개로 표현하라니깐 오류발생
    12345678.7896                NUMBER(10,-2)         12345700
    
    -- * 정밀도 < 스케일 인경우
    -- 정밀도는 0이 아닌 유효숫자의 수
    -- (스케일-정밀도) : 소숫점이하에 존재해야할 0의 갯수
    -- 스케일 : 소숫점 이하의 데이터의 수
    
    
    1.234                NUMBER(4,5)           오류
    0.23                 NUMBER(3,5)           오류
    0.0123               NUMBER(3,4)           0.0123
    0.0012345            NUMBER(3,5)           0.00123
    0.00125676           NUMBER(3,5)           0.00126

 

날짜 자료형


  • 날짜자료(년,월,시,분,초)를 저장하기 위한 데이터 타입
  • 기본형은 DATE, 시간대(TMEZONE)정보와 10억분의 1초단위의 시각정보를 제공하는 데이터 타입으로 TIMESTAMP가 제공
  1. DATE타입
    • 기본날짜형
    • '+','-' 연산의 대상 **SYSDATE : 시스템이 제공하는 날짜 정보를 제공하는 함수
      (사용형식) 컬럼명 DATE​
  2. TIMESTAMP 타입
    - 시간대 정보와 정교한 시각정보를 필요할 때 사용
(사용형식)
컬럼명 TIMESTAMP
컬럼명 TIMESTAMP WITH TIME ZONE  --시간대정보(대륙명/도시명) 포함
컬럼명 TIMESTAMP WITH LOCAL TIME ZONE    --서버가 위치한 시간대정보 , 보통 TIMESTAMP 와 동일

 

기타자료형


  • 2진 자료를 저장하기 위한 자료 타입
  • BLOB, RW, LONG RAW, BFILE 등이 제공 -- RAW, LONG RAW는 거의안씀

 

  1. RAW
  • 상대적으로 작은 용량의 2진 자료를 저장
  • 인덱스 처리가 가능
  • ORACLE에서 해석이나 변환작업을 수행하지 않음
  • 최대 2000BYTE 까지 처리가능
  • 16진수와 2진수 저장
    (사용형식)
    컬럼명 RAW(크기)​

 2. BFILE

  • 이진자료 저장
  • 대상 이진자료를 데이터베이스 외부에 저장
  • 경로 정보(DIRECTORY 객체)정보만 테이블에 저장
  • 4GB 까지 저장가능
    (사용형식)
    컬럼명 BFILE
    . 디렉토리 별칭(Alias) 설정(30BYTE)과 파일명 (256BYTE) 설정
    그림파일 저장순서
    
    1. 그림파일이 저장된 폴더확인
    2. 디렉토리 객체생성-그림이 저장된 디렉토리의 절대 주소
    CREATE DIRECTORY TEST_DIR AS 'D:\A_TeachingMaterial\2.Oracle\other';
    3. 그림을 저장할 테이블 생성
    CREATE TABLE TEMP08(
    COL1 BFILE);
    4. 그림 삽입
    INSERT INTO TEMP08
    VALUES(BFILENAME('TEST_DIR' ,'SAMPLE.PNG'));
    
    SELECT * FROM TEMP08;                 -- 그림으로 해석하지 않는다.       //썸네일용으로 좋음​

 

3. BLOB

  • 이진자료 저장
  • 대상 이진자료를 데이터베이스 내부에 저장
  • 4GB 까지 저장 가능
    (사용형식)
    컬럼명 BLOB
    
    (그림 저장 순서)
    
    1. 그림파일 준비(SAMPLE.JPG)
    2. 디렉토리 객체 생성(TEXT_DIR)
    3. 테이블 생성
    CREATE TABLE TEMP09(
    COL1 BLOB);
    4. 익명블록 생성
    DECLARE
    L_DIR VARCHAR2(20):='TEST_DIR';
    L_FILE VARCHAR2(30):='SAMLE.jpg'
    L_FILE BFILE;
    L_BLOB BLOB;
    BEGIN
    INSERT INTO TEMP09(COL1) VALUES(EMPTY_BLOB())
    RETURN COL1 INTO L_BLOB:
    
        ```
        L_BFILE := BFILENAME(L_DIR,L_FILE);
        DBMS_LOB.FILEOPEN(L_BFILE,DBMS_LOB.FILE_READONLY);
        DBMS_LOB.LOADFROMFILE(L_BLOB,L_BFILE,DBMS_LOB.GETLENGTH(L_BFILE));
        DBMS_LOB.FILECLOSE(L_BFILE);
    
        ```​
반응형

댓글0