728x90
반응형
2021-0611-01)
INSERT INTO TEMP01 VALUES('IL POST', 'ILPOSTINO', '무궁화 꽃이 피었습니다');
INSERT INTO TEMP01 VALUES('A', 'SESORISAMAK', 'FUSE');
SELECT * FROM TEMP01;
-- 글자 수(BYTE 수) 알아보기
SELECT LENGTHB(COL1),
LENGTHB(COL2), --
LENGTHB(COL3) -- 40BYTE 중 32BYTE 사용, 8BYTE 남음
FROM TEMP01;
1. 문자열 자료형
가. ' '로 묶인 자료
나. CHAR, VARCHAR, VARCHAR2, NVARCHAR2, NCHAR, LONG, RAW, CLOB
1) CHAR : 고정길이 문자열을 저장 -- 고정적인 문자에 사용, 자주 사용
가) : 2000BYTE 까지 저장가능(한글 한 글자는 3BYTE)
나) 기억공간이 남으면 왼쪽에 공백이 삽입
다) 주로 기본키 정의에 사용
사용형식)
컬럼명 CHAR(n [BYTE|CHAR])
- n : 기억공간의 크기
- BYTE|CHAR : n이 BYTE인지 문자의 갯수를 나타내는지 설정. 기본값은 BYTE
ex) ABC CHAR(2000 CHAR) -- 영어 기준 2000byte 들어가며,
-- 한글로 입력 시 666글자까지 가능 초과 시 오류
사용예)
CREATE TABLE TEMP01(
COL1 CHAR(20), -- 20글자 중 12칸 남음
COL2 CHAR(20 BYTE), -- 20BYTE 중 10칸 남음
COL3 CHAR(20 CHAR) -- 20CHAR 중 33BYTE 사용 7BYTE 남음 CHAR : 2BYTE
);
INSERT INTO TEMP01
VALUES('IL POSTI', 'IL POSTINO', '무궁화 꽃이 피었습니다.');
SELECT * FROM TEMP01;
2) VARCHAR2 : 가변길이 문자열 저장(=VARCHAR) -- 데이터가 기억장소보다 초과할 경우
-- 오류 발생 및 필수로 알아야함~!!!!
가) 최대 4000BYTE까지 저장 가능
나) 정의된 데이터가 확보된 기억공간보다 적으면 남는 공간은 시스템에 반납
다) VARCHAR도 VARCHAR2와 동일
라) NVARCHAR2, NCHAR은 다국어 지원 코드(유니코드)로 변환 ex) UTF-8
사용형식)
컬럼명 VARCHAR2 (n [BYTE | CHAR ]);
- n : 기억공간의 크기
- BYTE|CHAR : n이 BYTE인지 문자의 갯수를 나타내는지 설정. 기본값은 BYTE
ex) ABC CHAR(4000 CHAR) -- 영어 기준 4000byte 들어가며,
-- 한글로 입력 시 1333글자까지 가능 초과 시 오류
사용예)
CREATE TABLE TEMP02(
COL1 CHAR(20),
COL2 VARCHAR2(20), -- 실제 사용한 만큼만 저장
COL3 VARCHAR2(20 BYTE),
COL4 VARCHAR2(20 CHAR)
);
INSERT INTO TEMP02
VALUES('대전시 중구', '대전시 중구', '대전시 중구', '대전시 중구');
SELECT * -- 컬럼(열)을 보여줌, WHERE : 행을 보여줌
FROM TEMP02;
SELECT LENGTHB(COL1),
LENGTHB(COL2),
LENGTHB(COL3),
LENGTHB(COL4)
FROM TEMP02;
3) LONG : 2GB 자료를 저장할 수 있는 데이터 자료형
가) 가변길이 문자열 저장
나) 최대 2GB까지 저장
다) LONG타입은 한 테이블에 하나만 사용 가능
라) CLOB로 대체 -- LONG 자료형의 기능 개선 종료, CLOB로 대체
마) SELECT문의 SELECT 절, UPDATE문의 SET 절, INSERT문의 VALUES 절에 사용 가능
사용형식)
컬럼명 LONG;
사용예) -- LONG 2개 이상 사용 할 경우 오류 발생
-- 오류 : a table may contain only one column of type LONG (LONG은 1개만 사용 가능)
CREATE TABLE TEMP03(
COL1 LONG,
COL2 VARCHAR2(4000),
COL3 CHAR(2000)
);
INSERT INTO TEMP03 VALUES('대전시 중구 대흥동', '영민빌딩', 'BORI');
SELECT * FROM TEMP03; -- WHERE 생략
4) CLOB(Character Lrge Object) : 대용량 문자 자료형 4GB까지 사용 가능 -- 필수~~~!!!!!!!
가) 대용량 자료를 저장하기 위한 가변 기억공간
나) 최대 4GB까지 저장 가능
다) 한 테이블에 사용할 수 있는 CLOB타입의 컬럼 갯수는제한 없음
라) 일부 기능은 DBMS_LOB API의 지원을 받아야 함
사용형식)
컬럼명 CLOB;
사용예)
CREATE TABLE TEMP04(
COL1 LONG,
COL2 CLOB,
COL3 CLOB
);
INSERT INTO TEMP04 VALUES('WOORIBORI', 'SOCUTE', '대전시 중구');
-- 어떤 내용이 어떻게 저장되어 있는지 확인하기
SELECT * FROM TEMP04;
-- SELECT LENGTHB(COL1), -- 오류 발생
-- 오류 발생 : inconsistent datatypes: expected NUMBER got LONG(이 명령어로 사용 불가능)
SELECT -- LONG는 불가능
DBMS_LOB.GETLENGTH(COL2),
DBMS_LOB.GETLENGTH(COL3)
FROM TEMP04;
SELECT SUBSTR(COL2, 2, 4), -- 함수는 괄호로 묶이는 값이 존재
-- PARAMITER | COL2에 있는 글자중에 2번째 글자에서 4번째까지의 글자 가져오기
-- 2: 시작위치, 4 : 마지막 위치 / ORACLE는 1번부터 셈
DBMS_LOB.SUBSTR(COL2, 2, 4) -- COL2에 있는 글자중 4번째 글자부터 2글자 가져옴
FROM TEMP04;
- RAW : 대용량 컬럼을 정리함, 성능 개선X
2021-0611-02) 숫자 자료형
- 오라클의 숫자자료는 NUMBER 타입으로 제공됨
사용형식)
컬럼명 NUMBER [ (정밀도 | * [스케일] ) ] -- * : 표현되는 허용범위에서 값이 저장될 수 있는
-- 자리수를 알아서 계산하게 함
- 표현 범위(1.0E-130 ~ 9.999..99E125) -> 1.0 * 10^-130 ~ 0.1 * 2^7 * 10^126
- 정밀도 : 전체 자리수(1 ~ 38) --
- 스케일 : 소수점 이하의 자리수
ex) NUMBER(5, 2) => 전체 5자리 중 소수점 이하가 2자리이고 이곳에는
소수점 3자리에서 반올리된 값이 저장. 정수부분의 자리는 3자리임
ex1) 정밀도 > 스케일
- 스케일이 양의 정수 일 경우 : 스케일 + 1번째 자리에서 반올림하여
스케일 자리수까지 표현
- 스케일이 음의 정수 일 경우 : 정수부분의 스케일 위치에서 자리올림 발생
---------------------------------------------------
입력 값 선언 저장되는 값
---------------------------------------------------
1234.5678 NUMBER 1234.5678
1234.5678 NUMBER(5, 2) 오류 -- 소수점 자리수는 부족하더라도 반올림 통해 저장 가능, 정수자리의 자릿수가 부족하면 오류 발생
1234.5678 NUMBER(6, 2) 1234.57
1234.5678 NUMBER(*, 2) 1234.57
1234.5678 NUMBER(6, -1) 1230 -- 소수점 이하자리는 없음
---------------------------------------------------
ex2) 정밀도 < 스케일
- 매우 희귀한 경우
- 정밀도 : 0이 아닌 유효숫자의 수
- 스케일 :소수점 이하 데이터의 수
- 스케일 - 정밀도 : 소수점 이하에 존재해야할 '0'의 개수
---------------------------------------------------
입력 값 선언 저장되는 값
---------------------------------------------------
0.2345 NUMBER(4, 5) 오류
0.02345 NUMBER(4, 5) 0.02345
0.2345 NUMBER(3, 5) 오류
0.002345 NUMBER(3, 5) 0.00235
0.002345 NUMBER(4, 6) 0.002345
---------------------------------------------------
2021-0611-03) 날짜형
- 년월일시분초 자료를 저장하기 위한 자료형 -- 년월일(생략 불가능) / 시분초(생략 가능) 사용시 하나라도 빠지면 안됨
- DATE, TIMESTAMP 제공 -- TIMESTAMP : 정교한 시간까지 가능
1. DATE 타입
- 기본 날짜형(년, 월, 일, 시, 분, 초)
- +와 -연산의 대상이 됨
** SYSDATE : 시스템에서 제동하는 날짜 정보
사용형식)
컬럼명 DATE;
사용예)
CREATE TABLE TEMP05(
COL1 DATE,
COL2 DATE,
COL3 DATE
);
INSERT INTO TEMP05 VALUES(SYSDATE, SYSDATE-15, SYSDATE+15); -- 현재 날짜, 현재 날짜 - 15, 현재 날짜 + 15
SELECT * FROM TEMP05; -- 시, 분, 초 안보임
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 TEMP05;
-- 요일 알기
SELECT CASE WHEN MOD( (TRUNC(SYSDATE) -TO_DATE('00010101') ) -1, 7) = 0 THEN '일요일'
WHEN MOD( (TRUNC(SYSDATE) -TO_DATE('00010101') ) -1, 7) = 1 THEN '월요일'
WHEN MOD( (TRUNC(SYSDATE) -TO_DATE('00010101') ) -1, 7) = 2 THEN '화요일'
WHEN MOD( (TRUNC(SYSDATE) -TO_DATE('00010101') ) -1, 7) = 3 THEN '수요일'
WHEN MOD( (TRUNC(SYSDATE) -TO_DATE('00010101') ) -1, 7) = 4 THEN '목요일'
WHEN MOD( (TRUNC(SYSDATE) -TO_DATE('00010101') ) -1, 7) = 5 THEN '금요일'
WHEN MOD( (TRUNC(SYSDATE) -TO_DATE('00010101') ) -1, 7) = 6 THEN '토요일'
ELSE
'일요일' END AS 요일
FROM DUAL;
SELECT TRUNC(SYSDATE)-TO_DATE('00010101') FROM DUAL;
2. TIMESTAMP 타입
가. 시간대역(TIME ZONE) 정보를 포함한 날짜 정보 저장
나. TIMESTAMP, TIMESTAMP WITH TIME ZONE, TIMESTAMP WITH LOCAL TIME ZONE 타입 제공
다. 10억분의 1초 단위 사용
라. TIMESTAMP : 시간대 정보 없음
마. TIMESTAMP WITH TIME ZONE : 시간대 정보(대륙명/도시명) 제공
바. TIMESTAMP WITH LOCAL TIME ZONE : 서버가 설치된 시간대 정보로 보통 TIMESTAMP와 동일
사용예)
CREATE TABLE TEMP06(
COL1 DATE,
COL2 TIMESTAMP, -- 시분초 자리수 부족해서 YY-MM-DD
COL3 TIMESTAMP WITH TIME ZONE, --
COL4 TIMESTAMP WITH LOCAL TIME ZONE -- 지역 제외 출력
);
INSERT INTO TEMP06
VALUES(SYSDATE, SYSDATE, SYSDATE, SYSDATE);
SELECT * FROM TEMP06;
2021-0611-04) 기타 자료형(2진 자료형)
- 2진 데이터를 저장하기 위한 자료형
- BLOB, BFILE, RAW, LONG RAW 등이 제공
1. RAW
가. 상대적으로 작은 2진 자료 저장
나. 인덱스 처리 가능
다. 오라클에서는 변환 또는 해석작업을 수행하지 않음 -- 중요 // 입력된 그대로 화면에 출력
라. 최대 2000BYTE 까지 저장 가능
마. 16진수와 2진수 저장 가능
사용형식)
컬럼명 RAW(크기);
사용예)
BLOB - 데이터베이스에 직접 2진 자료 저장
BFILE - 데이터베이스 밖에서 2진 자료 경로
728x90
반응형
댓글