Oracle 22강

programing/Oracle 2009.04.13 21:38


데이터 타입은, 테이블 컬럼을 정의하거나, 프로시져 / 함수의 인자에 사용되는 값이 저장되는 방식을
결정합니다. 오라클에서는, 데이터 타입에 따라 의미상 동일한 값이 다르게 처리 됩니다. 예를 들어, NUMBER
데이터 타입에 저장된 숫자에는 다른 숫자를 더하거나 뺄 수가 있지만, RAW 데이터 타입에 저장된 숫자 표현에
대해서는 더하거나 뺄 수가 없습니다.

그럼 이제부터 각 Data Type에 대해 알아 보겠습니다.
먼저 내장 데이터 타입인 스칼라 데이터 타입을 화면의 순서대로 말씀을 드리겠습니다.
문자 데이터 타입에 속하는 CHAR/NCHAR, VARCHAR2/NVARCHAR2,CLOB/NCLOB, LONG 의 순으로 설명을
드리고, 숫자데이터 타입인 NUMBER 데이터 타입을 , 날짜 데이터 타입인 DATE, TIMESTAMP 및 INTERVAL에
대해서 말씀을 드리고 , 바이너리 데이터 타입인 BLOB, BFILE, RAW , LONG RAW순으로 설명해 드리겠습니다.
마지막으로 ROWID및 UROWID에 대해서 말씀을 드리겠습니다.

VARCHAR2 나 NVARCHAR2 의 주된 특징은, 컬럼 정의 시 지정된 max length보다 적은 길이의 문자열을
저장하는 경우, Empty Byte가 SPACE로 추가 (padding) 되지 않고, 실제 data만 저장되는 가변 길이라는 것
입니다. 그래서 CHAR/NCHAR에 비해 불필요한 자원 낭비를 막고, 테이블에 대한 Full Scan시에도 작은
블록을 읽어 성능상 장점이 있으며, Empty Block이 PADDING되지 않아 정확한 비교를 하는데 유의해야 할
사항이 적습니다.
VARCHAR2 Data Type은 최대 4000byte까지 저장이 가능하며 , 자릿수는 반드시 지정해야 합니다


CHAR의 주된 특징은, 컬럼 정의 시 지정된 max length보다 적은 길이의 문자열을 저장하는 경우,
Empty Byte가 SPACE로 추가(padding)된다는 것입니다. 이 Empty Byte는 경우에 따라서는 불필요한 자원
낭비 및 정확한 비교를 하는데 방해가 될 수 있으므로 Data Type의 특성을 정확히 알고 사용해야 합니다


NUMBER 데이터 타입은 가변 길이의 숫자 데이터를 저장하는데 사용됩니다.
Number Data Type은 PRECISION과 SCALE에 의해 표현 가능한 숫자를 정의할 수 있습니다.
Column정의 시 number(8,2) 인 경우 전체 자리수인 precision은 8자리, 소수점 이하 몇자리 인지 정의하는
scale은 2자리가 됩니다.


DATE 데이터 타입은 날짜와 시간을 고정 길이로 표현하는데 사용됩니다.
Date DATA TYPE은 7byte 고정 길이로 저장되는데, 첫 두 바이트는 세기와 연도를 나타내고, 다음 두 바이트는
월, 일을 나타내며, 나머지 세 바이트는 시, 분, 초를 나타냅니다.
TIMESTAMP 데이터 타입은, 특정 시점을 나타내는데 사용되며,
우선 TIMEZONE은 11byte의 고정길이로, 첫 7바이트는 DATE 타입과 동일하고, 마지막 4바이트는 초 이하
단위 (9자리)를 저장하는데 사용됩니다.
INTERVAL은 TIMESTAMP간의 차이를 나타내는데 사용되는 데이터 타입으로, YEAR-MONTH INTERVAL과
DAY-SECOND INTERVAL로 나뉘어 집니다.
YEAR-MONTH는 YEAR와 MONTH 필드의 차이를 나타내는데, 두 timestamp간의 차이(기간)를 ‘몇 년 몇
개월’로 나타냅니다.
반면, DAY-SECOND는 DAY, HOUR, MINUTE, SECOND 필드의 차이를 나타내는데, 두 TIMESTAMP간의
차이(기간)를 ‘몇 일, 몇 시간 몇 분 몇 초’로 나타냅니다.

 

LONG 데이터 타입은, 하위 버전에 대한 호환성을 위해 존재하며, 역할은 CLOB / NCLOB과 유사하게 문자
데이터를 저장합니다. 차이점은, 별도의 세그먼트에 데이터가 존재하는 것이 아니라 테이블 내 다른 데이터와
함께 저장된다는 점입니다.
LONG Data Type도 변동 길이 문자 데이터 타입으로 최대 길이를 지정하지 않습니다


CLOB
CLOB/NCLOB은 LOB (Large Object) 데이터 타입의 일부로, 최대 4GB까지의 문자 데이터를 저장하는데
사용됩니다.
CLOB은 데이터베이스의 Character Set으로 데이터를 저장하는 반면, NCLOB은 National Character Set으로
데이터를 저장하는데, 9i 이상 버전에서는 UNICODE를 사용하여야만 합니다.
CLOB과 NCLOB는 charsetform에 의해 차이가 발생합니다.
CLOB/NCLOB는 변경길이 문자 데이터를 저장하며, 최대 길이를 지정하지 않습니다.
SQLPLUS에서는 4000 BYTE이하인 경우 SELECT, INSERT, UPDATE, DELETE작업이 가능하며,
PL/SQL에서는 32k까지 가능합니다. 그래서 일반적으로는 Pro*C 또는 JAVA 언어를 사용하여 Oracle에서
제공하는 API를 이용한 프로그램을 작성합니다.

 

BLOB
BLOB/BFILE은 LOB (Large Object) 데이터 타입의 일부로, 최대 4GB까지의 바이너리 데이터를 저장하는데
사용됩니다.
BLOB은 바이너리 데이터를 데이터베이스 내부에 저장하며, BFILE은 바이너리 데이터를 데이터베이스
외부인 OS상의 파일 시스템에 저장 합니다. OS 의 제약이 없다면 최대 4GB까지 저장이 가능합니다
BFILE


RAW
RAW 및 LONG RAW는 바이너리 이미지 데이터를 저장하는데 사용되는 데이터 타입으로, 현재는 역 호환성을
위해 사용됩니다.
현재는 RAW 나 LONG RAW 대신 BLOB 및 BFILE 데이터타입을 사용하는 것을 권고 합니다.
LONG RAW

object type
OBJECT TYPE은 사용자가 정의한 복합 데이터 타입으로 (composite data type), 데이터 타입과 이 데이터들을
조작하기 위한 함수 혹은 프로시져를 묶어서 사용자가 정의한 새로운 데이터 타입입니다.
VARRAY, NESTED TABLE 및 REF는 OBJECT TYPE과 밀접한 관계를 가지며, OBJECT TYPE 자체를
테이블이나 컬럼으로 사용할 수 있습니다.
OBJEC TYPE은 자동차의 경우, 차종, 년식, 배기량과 같은 속성과, 전진, 후진, 정지와 같은 행동을 지원하는데,
이러한 일반적인 객체지향 관점을 OBJECT TYPE에서 지원합니다.
OBJECT TYPE은, OBJECT TABLE 또는 특정 컬럼의 타입(object column)으로 활용할 수 있으며, VARRAY
또는 NESTED TABLE의 구성 요소로 사용할 수 있습니다.
OBJECT TYPE은, 3가지 구성 요소로 이루어 집니다.
NAME : OBJECT TYPE에 대한 고유 식별자
ATTRIBUTE : BUILT-IN TYPE 또는 다른 OBJECT TYPE
METHOD : PL/SQL, C, JAVA와 같은 언어로 작성된 모듈
내부적으로는 일반 테이블 형태로 변환되어 저장되며, 최 하단 (leaf) 데이터 타입이 BUILT-IN DATA TYPE이 될
때 까지 확장 (explode) 됩니다.


varray
VARRAY 타입은, 순서를 갖는 엘리먼트들의 1차원 배열을 저장하는데 사용됩니다.
VARRAY 컬럼 자체는 스칼라 타입의 컬럼처럼, 단일 값처럼 간주 되며, DML에 의해 조작할 수 있습니다. 각
엘리먼트에는 인덱스가 있으며 배열상의 순서를 나타냅니다. UPPER BOUND는 정의할 때 지정되며 한번
정의된 후에는 변경할 수 없습니다. 엘리먼트들은 배열의 맨 끝부터 삭제할 수 있습니다.
4000바이트 미만일 경우, IN-LINE 형태로 저장되며, 내부적인 구현은 RAW 타입에 저장하는 방식을 사용합니다.
4000바이트 이상일 경우, OUT-OF-LINE 형태로 저장되며 내부적으로는 BLOB 형태로 저장하는 방식을
사용합니다.
스칼라 타입과 같이 정해진 크기나, 기본 값은 없습니다, 단, 가장 하단의 내장 데이터 타입에 대한 제약만
있으며, 생성시 array의 최대 개수에 대한 제약은 있습니다.


nested table
NESTED TABLE 데이터 타입은, 테이블을 하나의 컬럼에 저장할 때 사용됩니다. Varray와 같이 upper
bound값을 미리 지정하지 않으며 element최대 개수에 제한이 없는 가변 길이 array입니다.
NESTED TABLE은 순서를 지정하지 않은 레코드나 행의 집합이며, 행은 동일한 구조를 가집니다. NESTED
TABLE 의 행은 상위 테이블을 가리키는포인터와 함께 저장되며,상위 테이블과는 별도 세그먼트에 저장됩니다.
또한 저장 영역 특성은 Database 관리자가 정의할 수 있으며 미리 정의된 최대 크기는 없습니다.
NESTED TABLE 을 STORE TABLE이라고 하며, 원래 테이블과는 별도 영역에 저장됩니다., STORE TABLE
생성시 STORAGE 절을 지정할 수 있습니다. STORE TABLE의 특정 ROW는 직접 액세스 할 수 없으며, PARENT
TABLE을 활용해 액세스 하여야만 합니다.
STORE TABLE에는, 시스템에서 자동적으로 생성하는 컬럼이 추가됩니다.


REF
REF (“reference”의 줄임)은, 데이터베이스 테이블에 저장된 object에 대한 참조이며 object 그 자체는 아닙니다.
REF 타입은, relational column으로 사용될 수 있으며, object type을 구성하는 데이터 타입으로도 사용될 수
있습니다.
OBJECT TABLE에 저장된 각각의 객체는 OID (Object ID)를 갖고 있습니다.
OID는 마치 관계형 데이터베이스에서처럼 다른 객체에서 참조할 수 있는데, 참조할 때 사용하는 데이터 타입이
REF입니다.


 

신고

'programing > Oracle' 카테고리의 다른 글

Oracle 24강  (0) 2009.04.13
Oracle 23강  (0) 2009.04.13
Oracle 22강  (0) 2009.04.13
Oracle 21강  (0) 2009.04.13
Oracle 20강  (0) 2009.04.13
Oracle 19강  (0) 2009.04.13
Posted by 대절님

댓글을 달아 주세요



티스토리 툴바