> # 데이터 타입
1.문자열 데이터 타입
. 오라클은 문자타입은 존재하지 않음
. 모든 문자열은 ' '안에 기술되어야함.
. ' '에 기술되는 문자열은 대소문자 구별 됨
. 문자열 데이터 타입은 CHAR, VARCHAR, VARCHAR2, NVARCHAR, LONG, CLOB, NCLOB등이 있음
1) CHAR
고정길이 데이터를 저장
최대 2000 byte 저장 가능
기억공간이 남으면 오른쪽에 남는 공간에 공백이 채워짐
기본키 설정이나 확정된 길이를 나타내는 컬럼(주민번호 등)
(사용형식)
컬럼명 CHAR(크기[BYTE|CHAR])
50CHAR = 고정길이 50개의 문자가 저장될 수 있는 공간 만들어짐
50BYTE = 50 BYTE 만큼 공간만들어짐.
. '크기[BYTE|CHAR]' : '크기'가 byte 인지 글자의 갯수인지 설정, 기본은 byte(생략하면 BYTE)
. 한글 한글자는 3 BYTE(최대 666글자 저장)
사용예)
CREATE TABLE TEMP01(
COL1 CHAR(50),
COL2 CHAR(50 BYTE),
COL3 CHAR(50 CHAR));
INSERT INTO TEMP01
VALUES('1L POSTINO','1L POSTINO','일 포스티노');
SELECT *
FROM TEMP01;
SELECT LENGTHB (COL1),
LENGTHB (COL2),
LENGTHB (COL3)
FROM TEMP01;
2) VARCHAR2(n), NVARCHAR2(n), VARCHAR(n)
가변길이 문자열 저장
최대 4000byte까지 저장가능. 한글 1333개까지 가능.
NVARCHAR2 는 국제표준 코드(UTF-8, UTF-16)로 저장
VARCHAR 와 처리 방식은 동일
(사용형식)
컬럼명 VARCHAR2(n [BYTE|CHAR]).
DEFAULT는 BYTE.굳이 글자수로 제한하겠다 할때는 CHAR 을 옵션으로 기술.
오라클에서 고정길이는 CHAR 하나이다.
LONG 자바에서는 긴 정수. 오라클에서는 안씀. 대용량 데이터를 처리할수 있는 가변길이 머시깽이가 개발됨 = CLOB.
문자열 처리에 있어서 80-90% 이상은 VARCHAR2
사용예)
CREATE TABLE TEMP02(
COL1 CHAR(10),
COL2 VARCHAR2(4000),
COL3 VARCHAR2(100)
);
INSERT INTO TEMP02
VALUES('무궁화', '무궁화 꽃이 피었습니다.', '무궁화 꽃이 피었습니다.');
SELECT * FROM TEMP02;
SELECT LENGTHB(CON1), LENGTHB(CO2),LENGTHB(COL3)
FROM TEMP02;
무궁화: 9바이트가 아니라 <10바이트>. 10바이트중 1바이트는 안써지고 공백처리되기때문
무궁화 꽃이 피었습니다: 10글자 한글3바이트, 공백 두개, 마침표1개 개당 1바이트 = ,<33바이트>까지만 쓰고 안씀 나머지 3967바이트는 운영체제에
반납됨
3) LONG
대용량 분자열 처리를 위한 데이터타입
최대 2gb 까지 처리 가능
한 테이블에 하나의 LONG 타입만 사용 가능
현재 기능 개선 서비스가 종료(오라클 8버전) => CLOB 타입으로 대체
1024 BYTE. 2의 31승 만큼의 문자를 저장가능.
(사용형식)
컬럼명 LONG;
. 특정 문자열 함수(LENGTHB 등)는 사용할 수 없음.
. SELECT 문의 SELECT 절, UPDATE 문의 SET 절, INSERT 문의 VALUES 절에 사용 가능.
사용예)
CREATE TABLE TEMP03 (
COL1 CHAR(10),
COL2 VARCHAR2(100),
COL3 LONG
);
INSERT INTO TEMP03
VALUES('홍길동','대전시 중구 중앙로 76 영민빌딩 4층',
'대전시 중구 중앙로 76 영민빌딩 4층');
-- 홍길동 10바이트. 9바이트 사용 1바이트 공백
-- VARCHAR2 대전시 중구 중앙로 76 영민빌딩 4층
- > 47바이트 사용. 나머지 53바이트는 반납
-- LONG 대전시 중구 중앙로 76 영민빌딩 4층 -
> 2기가 중 47바이트 쓰고 나머지 반납
SELECT * FROM TEMP03;
SELECT LENGTHB(COL1),
LENGTHB(COL2)
-- LENGTH(COL3)
FROM TEMP03;
-- LONG 타입 COL3는 너무 커서 LENGTHB 등
대부분의 문자열 예약어 못씀.,.,.,.
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
);
--CLOB 는 한테이블에 복수개 사용가능.
INSERT INTO TEMP04
VALUES
('대전시 중구 중앙로 76 영민빌딩 4층', '대전시 중구 중앙로 76 영민빌딩 4층',
'대전시 중구 중앙로 76 영민빌딩 4층', '대전시 중구 중앙로 76 영민빌딩 4층');
SELECT * FROM TEMP04;
SELECT SUBSTR(COL1,8,6)
SUBSTRING = > 주어진 문자열에서 부분문자열을 추출할때 사용하는 문자열 함수
COL1, 8, 6은 매개변수. 맨첫번째는 원본데이터가 들어가있음.
두번째는 시작 위치로 1번부터셈 <> 자바는 위치값을 셀 때0 번부터 셈
세번째는 개수. <> 자바는 두번째가 STAR INDEX고 세번째가 AND INDEX. 자바는 끝값이 커야함
오라클 6,10 -> 6번째에서 10글자떼라
자바 6,10 -> 9글자 떼라?
SELECT SUBSTR(COL1, 8, 6),
SUBSTR(COL3, 8, 6),
DBMS_LOB.SUBSTR(COL3,8,6),
-- LENGTHB(COL4),
DBMS_LOB.GETLENGTH(COL4)
FROM TEMP04;
LENGTHB는 CLOB 나 NCLOB 에서 지원안됨. 그래서 DBMS_LOB.GETLENGTH(COL4) 써야됨. 컬럼4에 저장되어있는 글자수를 세어서 반환해준다.
DBMS_LOB.SUBSTR(COL3,8,6)는 DBMS_LOB라는 API에 존재하는 서브 스트링
"."은 소속을 나타냄. 6번째에서 8글자 떼라는 뜻.
TRIM (컬럼명) -> 이 컬럼에 저장되어 있는 데이터를 꺼내와서 그 데이터 앞 또는 뒤에 남아있던 모든 공백을 날리고 알짜 데이터만 가져옴
공백의 아스키 코드는 40
TRIM 쓰면 "홍길동 " = "홍길동" 됨. 공백을 제거하기 때문에