1 데이터 타입
- 데이터베이스 설계 단계에서 신중하게 고려해야 함. => 잘못 선정하면 성증 저하.
- 결정 전략
- 문자형: 실제 업무에선 가변형(Varchar2)만 고려
- 숫자형
- 금액, 수량 등 사칙연산 필요 => 숫자형
- 부서코드, 학년 등 분류형 자료 => 가변형 문자
- 데이터
- 단독 사용 => Date
- 자료분류 목적, 인덱스 => 가변형 문자데이터 타입으로 선언 => 날짜, 시간 분리해서 사용
2 문자형 데이터
2-1 CHAR
CHAR(10)
- 고정 길이 문자. 길이가 지정되어, 그것보다 짧으면, 나머지는 공백으로 채워짐.
- 편차가 큰 데이터를 입력하면 저장공간 낭비 => 비슷비슷한 길이의 데이터
but 사실 실무에선 VARCHAR2만 사용
- 지정된 길이보다 긴 데이터 입력하면 에러 발생
- 데이터 입력하지 않으면 NULL 입력
- 최대 2000byte까지 저장 가능
2-2 VARCHAR2
VARCHAR2(10)
- 가변 길이 문자열. 지정 길이보다 짧은 문자열이 입력되면 뒷부분 NULL처리.
- 지정된 길이보다 긴 데이터 입력하면 에러 발생
- 데이터 입력하지 않으면 NULL 입력
- 최대 4000byte까지 저장 가능
2-3 NVARCHAR2
- VARCHAR2는 ASCII만 가능 => 이건 모든 유니코드 가능
2-3 문자 비교
- 문자 상수(데이터)는 타입에 맞춰 내부 변환 후 각 문자 타입의 비교 방식에 의해 처리
즉, CHAR 타입으로 지정된 칼럼과 비교하면 CHAR로 내부변환 되서 비교, VARCHAR2로 지정된 칼럼과 비교하면 VARCHAR2로 내부변환 되서 비교
- CHAR과 비교하면 => CHAR타입으로 내부 변환 후 비교
- VARCHAR2과 비교하면 => VARCHAR2타입으로 내부 변환 후 비교
create table ex_type
(c char(10),
v varchar2(10));
insert into ex_type
values('sql', 'sql');
(char과 비교하면 'sql'이라는 문자 상수는 char로 내부 변환)
(결과적으로 TRUE가 된다)
select *
from ex_type
where c = 'sql';
(varchar2와 비교하면 'sql'이라는 문자 상수는 varchar2로 내부 변환)
(결과적으로 TRUE가 된다)
select *
from ex_type
where v = 'sql';
(같은 'sql'이라도 char과 varchar2는 서로 다르다)
(같게 하려면 char쪽의 뒤의 공백을 다 지우면 같아진다 -> RTRIM(c))
select *
from ex_type
where c = v;
3 숫자형 데이터
3-1 NUMBER
NUMBER(5, 2)
- 앞의 숫자는 precision으로 전체 자릿수(소수점 포함), 뒤의 숫자는 scale로 소수점 자릿수
- presicion 지정 않고 숫자 입력하면, 입력되는 숫자 크기만큼 저장공간 자동 할당
- scale 지정 않고 숫자 입력하면, 정수값만 저장
- 숫자 저장. 가변 길이. 최대 38자리까지 가능.
- 저장 가능 범위는 10^-130 ~ 96.9*10^125
BIGINT: 64비트 크기의 부호 있는 정수.
3-2 DATE
DATE
- 세기, 년도, 월, 일, 시간, 분, 초의 날짜와 시간 정보 저장
- 7비트 고정 길이 필드에 저장
- 오라클 기본 형식은 YY/MM/DD 형식
TO_DATE('24/01/24', 'YY/MM/DD'): 문자 데이터를 날짜 형식으로 변환
SYSDATE: 현재 날짜와 시간을 반환
- 월 지정하지 않으면 해당월, 일 지정하지 않으면 1일, 시간 지정하지 않으면 12:00:00 입력
3-3 TIMESTAMP
- DATE의 확장. milli second 단위까지 표현. milli second의 기본값은 6, 최대 9자리까지 가능.
- 종류
TIMESTAMP WITH LOCAL TIME ZONE: 사용자의 지역 시간대 저장
TIMESTAMP WITH TIME ZONE: 사용자의 지역 시간대 저장하면서, 표준 시간을 함께 저장. 환산한 것 보여줌. (+09:00 이런 식으로. 한국은 9시간 더 빨라서)
4 LOB 데이터 타입
- 텍스트, 그래픽, 이미지, 동영상, 사운드 등 구조화되지 않은 대용량 텍스트나 멀티미디어 데이터
- 최대 4GB 저장
- 종류
- BLOB: 이미지, 동영상, 사운드 같이 구조화되지 않은 바이너리 데이터
- CLOB: 대용량 텍스트
- NCLOB: 국가별 문자셋(유니코드) 데이터
- BFILE: 바이너리 데이터지만 읽기 전용으로 내용 변경 불가능
5 ROWID
- 테이블 행 위치 지정하는 논리적 주소값. 데이터베이스 전체에서 중복되지 않는 유일한 값.
테이블에 새로운 행 삽입되면, 의사칼럼(pseudo column)형태로 자동으로 생성
- 특정 레코드를 랜덤 엑세스하기 위한 가장 빠른 방법. 인덱스로 데이터에 빠르게 접근할 때 ROWID 사용.
- ROWID는 데이터베이스에 저장되지 않는다.
SELECT문으로 조회는 가능하지만, DML문으로 임의 변경 불가능하다.
- ex) AAAL+Z.AAE.AAAAAd.AAN
데이터 객체 번호(Data object number. 데이터 객체 생성 시 할당)
상대적 파일 번호(Relative file number. 테이블스페이스의 물리적인 데이터 파일 번호)
블록 번호(block number, 파일 내에서 행을 포함하는 블록 위치)
행 번호(row number, 블록 헤더 내에서 행 슬롯 위치)
6 ROWNUM
- Query에서 추출되는 결과 행들을 1부터 시작하는 순차 값을 할당한 일련번호.
- ORDER BY절에 의한 정렬 전단계에 부여.
- ROWNUM을 WHERE절에 걸고 싶으면 <, <= 조건을 사용한다.
예외적으로 첫행만 확인할 일 많아서, =1만 가능. =2는 한 건도 추출되지 않는다.
즉, 1부터 무조건 시작된다.
7 DUAL
- 하나의 행, 하나의 열, 즉 하나의 값이 들어갈 수 있는 공간.
- 데이터 사전(데이터 딕셔너리)과 함께 oracle에서 자동으로 생성되는 테이블로
사용자 SYS의 스키마에 있지만, 모든 사용자가 DUAL이라는 이름으로 엑세스 가능한 공용 동의어다.
- 계산식의 실행, 각종 함수, sequence 테스트 등에 이용.
SELECT USER INTO <변수>
FROM DUAL