데이터 타입
- 오라클에서 제공하는 자료형은 문자열, 숫자, 날짜, 기타 자료형으로 분류
1. 문자열 자료형
- 오라클에서 문자열자료는 ''안에 기술
- 고정길이 문자열과 가변길이 문자열 구분
A. CHAR(n [BYTE|CHAR])
- 고정길이 문자열을 저장
- 최대 2000 BYTE까지 저장 가능
- 저장시킬 자료가 선언된 공간보다 작으면 오른쪽에 공백으로 PADDING
- 선언된 저장공간보다 큰 자료는 저장되지 않음
- 한글 한 글자는 3 BYTE로 저장
- 'n [BYTE|CHAR]' : n이 저장시킬 문자의 수(CHAR)인지 바이트(BYTE)인지 선택. 생략하면 BYTE로 간주한다.
사용예)
CREATE TABLE TEMP01(
COL1 CHAR(20),
COL2 CHAR(20 BYTE),
COL3 CHAR(20 CHAR));
INSERT INTO TEMP01 VALUES('대전시 중구','대전시 중구','대전시 중구 오류동846');
SELECT * FROM TEMP01;
SELECT LENGTHB(COL1) AS "컬럼1",
LENGTHB(COL2) AS "컬럼2",
LENGTHB(COL3) AS "컬럼3"
FROM TEMP01;
B. VARCHAR2(n [BYTE|CHAR])
- 가변길이 문자열을 저장
- 최대 4000BYTE까지 저장 가능
- 나머지 특징은 CHAR과 동일
- VARCHAR와 VARCHAR2는 저장방식이 동일
- NVARCHAR2, NVARCHAR는 데이터 UTF-8, UTF-16방식으로 저장(다국어 지원)
사용예)
CREATE TABLE TEMP02(
COL1 CHAR(50),
COL2 VARCHAR(2000),
COL3 VARCHAR2(2000 BYTE),
COL4 VARCHAR2(2000 CHAR));
INSERT INTO TEMP02 VALUES('IL POSTINO Massimo Troisi',
'IL POSTINO Massimo Troisi','IL POSTINO Massimo Troisi',
'IL POSTINO Massimo Troisi');
SELECT * FROM TEMP02;
C. LONG
- 가변길이 문자열 저장
- 최대 2GB 까지 저장 가능
- 한 테이블에 하나의 컬럼에서만 사용 가능(단점)
- 현재 기능 개선이 중단되어있음 => CLOB타입으로 대체 사용 권고
- 일부 기능은 큰 크기로 인하여 사용할 수 없음(LENGTHB나 SUBSTR 등)
- SELECT문의 SELECT절, UPDATE문의 SET절, INSERT문의 VALUES절에서 사용 가능
사용예)
CREATE TABLE TEMP03(
COL1 VARCHAR2(4000),
COL2 LONG);
INSERT INTO TEMP03 VALUES('PERSIMMION APPLE BANANA', 'PERSIMMON APPLE BANANA');
SELECT LENGTHB(COL1)
--LENGTHB(COL2)
FROM TEMP03;
SELECT SUBSTR(COL1,11,5)
-- SUBSTA(COL2,11,5)
FROM TEMP03;
D. CLOB (Character Large OBject)
- 가변길이 문자열 저장
- 최대 4GB 저장 가능하며 한 테이블에 복수개의 CLOB 컬럼 생성 가능
- 일부 기능들은 DBMS_LOB API 지원을 받아야 사용할 수 있음(LENGTHB는 LONG타입과 CLOB타입 모두 사용 불가)
사용예)
CREATE TABLE TEMP04(
COL1 VARCHAR2(4000),
COL2 CLOB,
COL3 CLOB);
INSERT INTO TEMP04 VALUES('PERSIMMON APPLE BANANA', 'PERSIMMON APPLE BANANA','PERSIMMON APPLE BANANA');
SELECT * FROM TEMP04;
SELECT LENGTH(COL1),
LENGTH(COL2),
DBMS_LOB.GETLENGTH(COL2),
LENGTH(COL3)
FROM TEMP04;
SELECT SUBSTR(COL1,11,5),
SUBSTR(COL2,11,5),
DBMS_LOB.SUBSTR(COL2,5,11)
FROM TEMP04;
2. 숫자 자료형
- 정수와 실수를 저장
- NUMBER 타입 제공
(사용형식)
컬럼명 NUMBER[(정밀도|* [,스케일])]
- '정밀도' : 전체 자리수
- '스케일' : 소숫점 이하의 자리 수
- 표현(저장) 범위 : 1.0E-130 ~ 9.99...9E+125('9'의 갯수 38개)
- 정밀도 대신 '*'가 사용되면 시스템에서 사용자가 기술한 자료를 저장하기 위한 최소한의 자리를 확보 함
- 저장방식은 소숫점 이하 '스케일'+1번째 자리에서 반올림하여 '스케일'자리까지 저장
- 정수부분의 자리수가 부족하면 오류
- 스케일이 음수이면 정수부분의 스케일 위치에서 반올림
- 스케일이 생략되면 0으로 간주
사용예)
-------------------------------------------------
입력 값 선언 기억되는 값
-------------------------------------------------
123456.7895 NUMBER 123456.7895
123456.7895 NUMBER(*,2) 123456.79
123456.7895 NUMBER(7,2) 오류
123456.7895 NUMBER(8,2) 123456.79
123456.7895 NUMBER(8.0) 123457
123456.7895 NUMBER(8) 123457
123456.7895 NUMBER(8, -2) 123500
-------------------------------------------------
CREATE TABLE TEMP05(
COL1 NUMBER,
COL2 NUMBER(*,2),
COL3 NUMBER(7,2),
COL4 NUMBER(8,2),
COL5 NUMBER(8,0),
COL6 NUMBER(8),
COL7 NUMBER(8,-2));
INSERT INTO TEMP05 VALUES (123456.7895, 123456.7895,23456.7895,123456.7895,123456.7895,123456.7895,123456.7895);
SELECT * FROM TEMP05;
3. 날짜 자료형
- 날짜자료(년,월,일,시,분,초)저장
- 기본형인 DATE 타입과, TIMESTAMP형 제공된
A. DATE
- 기본 날짜 자료형
- '+'과 '-'연산의 대상이 될 수 있슴('*', '/'은 수행할 수 없음)
- 출력시 시,분,초는 별도 FORMAT 문자열을 사용해야 출력 됨
(사용형식)
컬럼명 DATE
** SYSDATE 함수 : 시스템에서 제공하는 날짜자료 변환
CREATE TABLE TEMP06 (
COL1 DATE,
COL2 DATE,
COL3 DATE);
INSERT INTO TEMP06 VALUES(SYSDATE, SYSDATE-15, SYSDATE+25);
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;
B. TIMESTAMP
- 기본 년,월,일,시,분,초 정보 제공
- 초는 밀리초 단위의 시각정보 제공
- 시간대역(TIME ZONE) 정보를 제공
(사용형식)
컬럼명 TIMESTAMP -- 시간대역 정보 없음
컬럼명 TIMESTAMP WITH LOCAL TIME ZONE -- 로컬서버의 시간대역 정보 => TIMESTAMP와 동일
컬럼명 TIMESTAMP WITH TIME ZONE -- 서버가 위치한 지역의 시간대 정보 제공
사용예)
CREATE TABLE TEMP07(
COL1 TIMESTAMP,
COL2 TIMESTAMP WITH LOCAL TIME ZONE,
COL4 TIMESTAMP WITH TIME ZONE);
INSERT INTO TEMP07 VALUES(SYSTIMESTAMP, SYSTIMESTAMP, SYSTIMESTAMP);
INSERT INTO TEMP07 VALUES(SYSDATE, SYSDATE, SYSDATE);
SELECT * FROM TEMP07;
4. 기타 자료형
- 오라클에서 사용될 2진수를 저장하는 데이터 타입
- 기타 자료형으로 저장된 자료는 오라클에 의해 해석되거나 변환되지 않음
- RAW, BFILE, BLOB 타입이 제공됨
- 주로 멀티미디어 자료 저장에 사용
A. RAW
- 비교적 작은 양의 이진 정보를 저장
- 최대 2000 BYTE까지 저장
- 주로 음성, 이미지 자료 저장
- 인덱스 처리 가능
(사용형식)
컬럼명 RAW(크기) -- 저장은 2진수와 16진수만 가능
사용예)
CREATE TABLE TEMP08(
COL1 RAW(1000),
COL2 RAW(500));
INSERT INTO TEMP08 VALUES('3C7A', HEXTORAW('3C7A'));
INSERT INTO TEMP08 VALUES('001111000011111010', '3C7A');
SELECT * FROM TEMP08;
B. BFILE
- 이진자료 저장
- 저장될 원본자료는 데이터베이스 밖에 저장되고 테이블에는 경로와 파일명 정보만 저장
- 최대 4GB까지 저장
(사용형식)
칼럼명 BFILE
(사용예)
1)테이블 및 그림파일 준비
CREATE TABLE TEMP09(
COL1 BFILE);
2) 디렉토리객체 생성
CREATE OR REPLACE DIRECTORY 디렉토리객체명 As 경로명
CREATE OR REPLACE DIRECTORY TEST_DIR As 'D:\A_TeachingMaterial\Orcle';
3) 그림자료 입력(삽입)
INSERT INTO TEMP09 (COL1) VALUES (BFILENAME('TEST_DIR','sample.jpg'));
SELECT * FROM TEMP09;
C. BLOB(Binary Large OBject)
- 이진자료 저장
- 저장될 원본자료가 데이터베이스 내부에 직접 저장
- 최대 4GB까지 저장
(사용형식)
컬럼명 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(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);
COMMIT;
END;
SELECT * FROM TEMP10;
'DBMS' 카테고리의 다른 글
[DBMS/Oracle] 연산자 (0) | 2023.03.15 |
---|---|
[DBMS/Oracle] 데이터 검색 명령(SELECT) (0) | 2023.03.14 |
[DBMS/Oracle] 데이터 삽입 (0) | 2023.03.14 |
[DBMS/Oracle] 테이블 생성 및 삭제 (0) | 2023.03.14 |
[DBMS/Oracle] Oracle, Oracle Client, SQL Developer 설치 (0) | 2023.03.12 |