Oracle 5강 - 데이터타입

Whatever·2021년 9월 10일
0

기초 ORACLE

목록 보기
4/27

2) VARCHAR2(n), NVARCHAR2(n), VARCHAR(n)

  • 가변길이 문자열 저장
  • 최대 4000byte까지 저장 가능
  • NVARCHAR2는 국제표준 코드(UTF-8, UTF-16)로 저장
  • VARCHAR와 처리 방식은 동일
    (사용형식)
    컬럼명 VARCHAR2(n [BYTE|CHAR]) -- default값이 byte, 글자 수를 지정하고 싶으면 [ ]안에 char

사용예)

CREATE TABLE TEMP02(
    COL1   CHAR(10),
    COL2   VARCHAR2(4000),
    COL3   VARCHAR(100)); 
    
    INSERT INTO TEMP02
       VALUES('무궁화','무궁화 꽃이 피었습니다.','무궁화 꽃이 피었습니다.') 

    SELECT * FROM TEMP02;
    
    SELECT LENGTHB(COL1),     --- 값: 10
           LENGTHB(COL2),        --- 값: 33
           LENGTHB(COL3)         --- 값: 33
       FROM TEMP02;    

3) LONG

  • 대용량 문자열 처리를 위한 데이터타입
  • 최대 2GB 까지 처리 가능
  • 한 테이블에 하나의 LONG타입만 사용 가능(한 테이블에 한 컬럼만 LONG타입으로 설정해야함.)
  • 현재 기능 개선 서비스가 종료 => CLOB 타입으로 대체
    (여러가지 함수 사용에 일부 기능제한이 있음), LONG타입이나 CLOB타입은 길이를 표현하지 않음.
    (사용형식)
    컬럼명 LONG;
    . 특정 문자열 함수(LENGTHB 등)는 사용할 수 없음
    . SELECT문의 SELECT절, UPDATE문의 SET절, INSERT문의 VALUES절에 사용 가능

LENGTHB: 전체 데이터가 사용한 데이터 수

사용예)

CREATE TABLE TEMP03(
    COL1 CHAR(10),
    COL2 VARCHAR2(100),
    COL3 LONG);
    
   INSERT INTO TEMP03
     VALUES('홍길동','대전시 중구 중앙로 76 영민빌딩 4층','대전시 중구 중앙로 76 영민빌딩 4층');
     
   SELECT * FROM TEMP03;  
   
   SELECT LENGTHB(COL1),
          LENGTHB(COL2)
          TRIM(COL3)
      FROM TEMP03;
      
      

4) CLOB(Character Large Objects)

  • LONG 타입의 기능을 개선한 가변 문자열 데이터 타입
  • 최대 4GB까지 저장 가능
  • 한 테이블에 복수개의 CLOB 정의 가능
  • 일부 기능은 DBMS_LOB Api(Application Programming Interface)의 지원을 받아야 함 (패키지모음)
    (사용형식)
    컬럼명 clob;

사용예)

CREATE TABLE TEMP04(
     COL1 VARCHAR2(4000),
     COL2 LONG,
     COL3 CLOB,
     COL4 CLOB);
     
   INSERT INTO TEMP04
    VALUES('대전시 중구 중앙로 76 영민빌딩 4층','대전시 중구 중앙로 76 영민빌딩 4층',
'대전시 중구 중앙로 76 영민빌딩 4층','대전시 중구 중앙로 76 영민빌딩 4층');
   
   SELECT * FROM TEMP04;
   
   SELECT SUBSTR(COL1,8,6) --- 8번째에서 6글자 출력
          SUBSTR(COL3,8,6)
          DBMS_LOB.SUBSTR(COL3,8,6) --- 6번째에서 8글자 출력(기능이 바뀜)
          LENGTHB(COL4),
          DBMS_LOB.GETLENGTH(COL4)
     FROM TEMP04;

COLB형식의 컬럼 안에 저장되어 있는 글자수를 카운트해서 출력해주는 함수
:DBMS_LOB.GETLENGTH(컬럼명)

SUBSTR(컬럼명, 시작위치 - 숫자 1부터 카운트, 추출할 문자 개수)
: 문자열에서 특정 문자열을 추출하는 함수(매개변수)
TRIM : 양쪽 공백 삭제
RTRIM : 오른쪽 공백 삭제
LTRIM : 왼쪽 공백 삭제
. : 소속을 나타내 줌

숫자자료형

  • 숫자자료(정수 및 실수)를 저장
  • NUMBER 타입 제공
    (사용형식)
    NUMBER[(정밀도]*[,스케일])] -- 여기에서 * : 사용자가 저장할 만큼 시스템이 알아서 저장공간을 만들어놓으라는 뜻
    . 정밀도 : 전체 자리수(1 ~ 30)
    . 스케일 : 소숫점 이하의 자리수
    . 표현범위 : 1.0e-130 ~ 9.999...9e125

ROUND 함수 : 반올림

NUMBER타입 안에 저장될 수 있는 값 : 그대로 저장

NUMBER(*,3) : 양수일 때 소수점 4번째 자리에서 반올림해서 3번째자리까지 나타내라
*를 생략시 : 소수점 1번째 자리에서 반올림해서 나타내라
정수부분이 모자라면 오류, 소수점 자리수가 모자라면 반올림

NUMBER(정밀도,스케일(N)) =>모두 생략 가능 소수점 N+1 자리에서 반올림해서 N자리까지 나타냄
NUMBER = NUMBER() (같음)

1 2 3 4 5 6 7 . 5 6 7 8
-7-6-5 -4 -3 -2 -1 0 1 2 3 4 => -2의 자리에서 반올림 : 1234600

-----------------------------------------------------------------------
 입력 값              선언              저장되는 값 
-----------------------------------------------------------------------
1234567.5678        NUMBER            1234567.5678 
1234567.5678        NUMBER(*,3)       1234567.568   
-- 정수부분을 시스템에서 알아서 저장해달라 의뢰하는 것
1234567.5678        NUMBER(8)         1234568
1234567.5678        NUMBER()          1234567.5678
1234567.5678        NUMBER(6)         오류  -- 정수부분의 자리수가 모자라서
1234567.5678        NUMBER(7,2)       오류 
-- 스케일이 두 자리를 가지고 있어서 정수자리는 5개만 가능해서 모자람


1234567.5678        NUMBER(7,-2)      1234600   -- => -2의 자리에서 반올림 : 1234600
--------------------------------------------------------------------------

사용예)

 CREATE TABLE TEMP05(
       COL1 NUMBER,
       COL2 NUMBER(*,3),    
       COL3 NUMBER(8),         
       COL4 NUMBER,          
       COL5 NUMBER(6),       
       COL6 NUMBER(7,2),    
       COL7 NUMBER(7,-2)); 

    INSERT INTO TEMP05
       VALUES(1234567.5678,1234567.5678,1234567.5678,1234567.5678,0,0,1234567.5678);  
       
     INSERT INTO TEMP05
       VALUES(1234567.5678,1234567.5678,1234567.5678,1234567.5678,0,0,1234567.5678);    
       
    SELECT * FROM TEMP05;
** 정밀도 < 스케일 ( ex NUMBER(4,7))
   . 정밀도 : 0이 아닌 유효숫자의 갯수
   . 스케일 : 소숫점이하의 자리수
   . 스케일 - 정밀도 : 소숫점이하에 나올 '0'의 갯수
   
-------------------------------------------------------------------------------
입력값      선언          저장           유효숫자(정밀도)      소숫점이하 0의 갯수
-------------------------------------------------------------------------------
1.2345    NUMBER(4,5)    오류               4(5)                   -
1.23      NUMBER(3,5)    오류               3(5)                   -
0.012345  NUMBER(3,4)    0.0123            5(3)                   1(1)
0.00123   NUMBER(3,5)    0.00123           3(3)   --유효숫자(0이 아닌 수)가 3개(1,2,3)
-------------------------------------------------------------------------------

3)날짜형

  • 날짜 및 시각(년,월,일,시,분,초)자료 저장
  • 덧셈과 뺄셈의 대상
  • SYSDATE : 시스템이 제공하는 날짜/시간정보를 반환하는 함수
  • DATE, TIMESTAMP 제공

숫자는 날짜로 못바꾸고 문자만 날짜로 바꿀 수 있음, 날짜 형식으로 만들어줘야 함.
오라클은 문자열이 제일 후순위 데이터임.
날짜로 바뀔 수 있는 데이터 - 적어도 8글자, 14글자
TO CHAR / TO DATE / TO NUM - 변환 함수

(1)DATE
. 기본 날짜형
(사용형식)
컬럼명 DATE

사용예)

CREATE TABLE TEMP06(
     COL1  DATE,
     COL2  DATE,
     COL3  DATE);

 INSERT INTO TEMP06
          VALUES(SYSDATE,SYSDATE-30,SYSDATE+30);
    
    SELECT * FROM TEMP06;
    
    SELECT TO_CHAR(COL1,'YYYY-MM-DD HH24:MI:SS') FROM TEMP06; 
    --- 위에서 INSERT 했을 때 체크되었던 시간

  SELECT MOD(TRUNC(TO_DATE('19941129')-TO_DATE('00010101'))-1,7) FROM DUAL;
  -- 경과된 일 수 계산 : ((날짜 - 서기1년) -1) / 7 

(2)TIMESTAMP
  . 기본 날짜형을 확장한 자료형
  . 정교한 시간정보(10억분의 1초)나 시간대(TIMEZONE) 정보 포함  -- 최대 9자리 저장
  . TIMESTAMP   -- 시간대 정보없는 데이터 타입,
    TIMESTAMP WITH TIME ZONE  -- 시간대 정보포함,
    TIMESTAMP WITH LOCAL TIME ZONE 
    -- CLIENT가 위치한 시간대 정보 포함 / Local 서버(가상서버 127.0.0.1)

0개의 댓글

관련 채용 정보