숫자자료,날짜자료,기타자료형

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

DB, SQL

목록 보기
6/27
post-thumbnail

🍃 숫자자료

  • 오라클에서 사용하는 정수와 실수자료 저장
  • NUMBER 타입 제공
  • 표현범위 : 1.0e-120 ~ 9.999...99e125
(사용형식)
컬럼명 NUMBER[(정밀도|*[,스케일])]
  • 정밀도 : 전체 자리수 정의 (1~38), 생략하거나 '*'사용하면 시스템에서 적당한 크기로 확보
  • 스케일 : 소숫점이하의 자리수, 생략하면 0으로 간주
  • 스케일이 음수이면 정수부분에서 스케일 값에 해당하는 자리에서 반올림

CREATE TABLE TEMP05(
    COL1 NUMBER(8,2),
    COL2 NUMBER(7,3),
    COL3 NUMBER(*,2),
    COL4 NUMBER(8),
    COL5 NUMBER(8,-2),
    COL6 NUMBER);
    
    INSERT INTO TEMP05(COL1,COL2,COL3,COL4,COL5,COL6)
    VALUES(123456.7891,123456.7891,123456.7891,123456.7891,123456.7891,123456.7891);

INSERT INTO TEMP05(COL1,COL2,COL3,COL4,COL5,COL6)
    VALUES(123456.7891,3456.7891,123456.7891,123456.7891,123456.7891,123456.7891);

🍃 날짜자료

  • 오라클에서 제공되는 날찌자료형은 date, timestamp(날짜정보반환) 타입이 존재
  • 날짜 자료로는 ‘+’, ’-’연산의 대상이 됨
  • 날짜형 자료들의 뺄셈 결과, 즉 두 날짜사이의 일수 반환

1) DATE

  • 표준날짜자료형
  • 년,월,일,시,분,초
(사용형식)
컬럼명 DATE
(EX)
	CREATE TABLE TEMP06(
	COL1 DATE,
	COL2 DATE,
	COL3 DATE);
	
	INSERT INTO TEMP06 VALUES(SYSDATE,SYSDATE-20,SYSDATE+30);
	
	SELECT*FROM TEMP06; --날짜까지만 출력됨
	
	SELECT TO_CHAR (COL1,'YYYY-MM-DD HH24:MI:SS'),
				 TO_CHAR (COL2,'YYYY-MM-DD HH24:MI:SS'),
				 TO_CHAR (COL3,'YYYY-MM-DD HH24:MI:SS')
	FROM TEMP06;

며칠 지났는지 세주기

SELECT (TRUNC(SYSDATE)-TRUNC(TO_DATE('00010101')))-1
	FROM DUAL;

날짜 구하기. 윤년계산

SELECT MOD((TRUNC(SYSDATE)-TRUNC(TO_DATE('00010101')))-1,7)
	FROM DUAL;

7로나눈 나머지가 0이면 일요일, 1이면 월요일 . . .

00010101%7 = 0, 즉 이날은 일요일

2)TIMESTAMP

  • 시간대(TIMEZONE)정보와 10억분의 1초단위의 정교한 시각 정보를 반환
  • TIMESTAMP : 시간대정보없음
  • TIMESTAMP WITH TIMEZONE : 서버가 위치한 시간대정보(대륙명/도시명) 제공
  • TIMESTAMP,TIMESTAMP WITH LOCAL TIMEZONE : LOCAL 서버가위치한시간대 정보로 보통 TIMESTAMP와 동일 (시간대정보없음)
(사용형식)
컬럼명 TIMESTAMP
컬럼명 TIMESTAMP WITH TIME ZONE
컬럼명 TIMESTAMP WITH LOCAL TIME ZONE
(EX)
CREATE TABLE TEMP07(
COL1 TIMESTAMP,
COL2 TIMESTAMP WITH TIME ZONE,
COL3 TIMESTAMP WITH LOCAL TIME ZONE);
INSERT INTO TEMP07 VALUES(SYSDATE,SYSDATE,SYSDATE);

SELECT*FROM TEMP07;

🍃 기타 자료형

  • 2진자료를 저장하기 위한 데이터타입
  • RAW, LONG, RAW, BFILE, BLOB
  • 이진자료는 데이터베이스에서 해석하거나 변환하지않음

1) RAW

  • 상대적으로 작은크기의 이진자료 저장
  • 인덱스 처리기능
  • 최대 2000 BYTE 처리가능
  • 16진수와 2진수만 저장가능
(사용형식)
컬럼명 RAW(크기)
(EX)
CREATE TABLE TEMP08(
COL1 RAW(2000));
INSERT INTO TEMP08 VALUES(HEXTORAW('FFC7'));
INSERT INTO TEMP08 VALUES(HEXTORAW('1111111111000111'));

SELECT *  FROM TEMP08;

2) BFILE

  • 이진자료 저장
  • 대상이되는 이진자료는 데이터베이스 밖의 폴더에 저장되고 데이터베이수에는 경로(PATH)만 저장됨
  • 4GB까지 저장 가능
    (사용형식)
    컬럼명 BFILE

(EX) BFILE 타입을 이용한 이미지 저장 절차

  1. 테이블 생성

    CREATE TABLE TEMP09(
    COL1 BFILE);
    
    --CREATE TABLE TEMP09(
                           COL1 BFILE);
  2. 이미지 준비(jpg타입)

  3. 경로객체(DIRECTORY) 생성

    CREATE DIRECTORY 디렉토리명 AS경로명;
    
    --CREATE DIRECTORY TEST_DIR AS 'D:\A_TeachingMaterial\02_Oracle';

  1. 자료삽입

    INSERT INTO TEMP09
    VALUES (BFILENAME('TES_DIR','SAMPLE.jpg'));
    SELECT *  FROM TEMP09;

3) BLOB (Binary Large OBjects)

  • 이진자료 저장
  • 대상이되는 이진자료를 데이터베이스 내부에 저장
  • 최대 4GB까지 처리가능
(사용형식)
컬럼명 BLOB;

(EX) BLOB 자료타입에 이미지 저장

  1. 테이블 생성

    CREATE TABLE TEMP10(
    	COL1 BLOB);
  2. PL/SQL을 이용한 저장모듈 작성

    DECLARE
            L_DIR VARCHAR2(20):='TEST_DIR';
            L_FILE VARCHAR2(30):='SAMPLE.jpg';
            L_BFILE BFILE;
            L_BLOB BLOB;
    BEGIN
    INSERT INTO TEMP10 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);
    
    COMMIT;
    END;
    SELECT*FROM TEMP10;

    저장 잘 되었고, 내용확인은 오라클에서 못함

0개의 댓글