CREATE TABLE
[구문형식]
( 컬럼 1 컬럼1타입,
컬럼 2 컬럼2타입,
컬럼2 컬럼3타입,
..
);
테이블의 이름은 임의의 단어로 구성되며 최대 30BYTE 까지 쓸 수 있다.
마찮가지로 컬럼명과 스키마 사용자 이름도 30BYTE까지 쓸수 있다. 또한 한 테이블에는 최대 255개까지 컬럼을
만들수 있다.
기본 데이터 타입
- 기본 데이터 타입은 크게 문자형 데이터, 숫자형 데이터, 날짜형 데이터 세 가지로 구분된다.
문자형 데이터
데이터 유형 | 설명 | 길이 |
CHAR | 고정길이 | 최대 크기 2000byte, 디폴트 값은 byte 값 size 디폴트 값은 1이다. |
VARCHAR2 | 가변 길이 반드시 size값 명시 | 최대크기 4000byte 디폴트 값은 byte,size값 생략 못함 |
NCHAR | 고정 길이 유니코드 문자형 데이터 | 최대 크기 2000byte size 디폴트 값은 1이다. |
NVARCHAR2 | 가변길이 유니코드 문자형 데이터 | 최대크기 4000byte size를 생략 못함 |
LONG | 가변 길이의 문자형 데이터 타입 | 최대 크기 2GB 이다. |
여기서 고정길이와 가변길이의 예를 살펴 보자
names1 CHAR(3 BYTE),
names2 VARCHAR2(3 BYTE));
INSERT INTO chr_exam1 VALUES('AA', 'AA');
영문은 1BYTE를 차지하기 때문에 이 쿼리는 정상적으로 들어간다.
REPLACE(names2, ' ', 'B') nm2,
이 문장은 공백이 있으면 공백을 찾아서 B로 대체하라는 REPLACE 함수이다.
위 문장을 실행한 결과
-----------
AAB AA
로 노출 되었다. 즉 고정 길이인 names1 컬럼은 3byte를 선언하였지만 실제로 공백까지 3byte를 차지하고 있었고 가변 길이는 2byte를 차지하고 있다는걸 알수 있다.
그렇기 때문에 명확한 컬럼의 경우 CHAR 타입을 쓰고 변동적이라면 VARCHAR2를 사용한다. 다음 경우를 살펴보자
name4 CHAR(3 CHAR),
name5 CHAR(3));
이렇다고 할때 3BYTE는 3BYTE를 갖지만 name4와 5에 영문자 AAA를 넣으면 정상적으로 들어가지만 홍길동을 넣으면 name4에만 들어갈 수 있다. 왜냐하면 char3 은 3바이트가 됫던 6바이트가 됫던 무조건 3글자가 들어가기 때문이다.
LONG 타입의 특징
1.SELECT 리스트, UPDATE 문의 SET 절, INSERT문의 VALUES 절에서 사용가능
2. 하나의 테이블에서 오직 하나 LONG 타입 지정
3. GROUP BY, ORDER BY, CONNT BY 절에서 올수 없고 SELECT DISTINCT와 사용 못함
4. GROUP BY 절을 포함한 SELECT 리스트에 올수 없다.
5. UNION, INTERSECT, MINUS와 함께 쓰인 SELECT 리스트에 올 수 없다.
6. CREATE TABLE.. AS SELECT 문장에서 사용 못함.
하지만 LOB 타입이 나온후 부터 더이상 LONG타입을 사용하지 않도록 권고하고 있다.
숫자형 데이터
- 다양한 형태의 숫자 정보들을 저장하고 관리하기 위해 지원되는 데이터 타입
데이터 유형 | 설명 | 길이 |
BINARY_FLOAT | 32bit 부동 소수 | 4byte |
BINARY_DOUBLE | 64bit 부동 소수 | 8byte |
NUMBER[(prec|prec, scale)] | 가변 숫자 타입 prec(전체 자릿수 1~38) scale(-84~127) 소수점 이하 자릿수 | 최대값은 21byte |
그럼 여기서 제일 많이 사용 하는 NUMBER 타입을 알아보자.
여기서 precision은 전체 자릿수 를 의미한다. 사전적인 의미는 정밀도나 정확성을 뜻한다.
그리고 scale은 소수점 이하 자릿수를 의미한다. 물론 이 둘다 생략 가능하다.