Oracle

게시글 보기
작성자 유건데이타 등록일 2015-05-18
제목 OBJECT TABLE 사용 예제
OBJECT TABLE 사용 예제
====================

오브젝트 테이블은 오브젝트를 ROW로 가지고 있는 테이블을 말한다.
오브젝트 테이블에 오브젝트가 insert되면 시스템에서는 자동으로 유일한
값인 OID(Object ID)를 부여한다. OID는 16 byte(128 bit)로 구성되어 있다.
동일한 attribute value를 가지고 있다 하더라도 이들 오브젝트들의
OID는 서로 다르다.

오브젝트 테이블에 저장된 object를 처리하는데 다음과 같은 함수를 이용할 수 있다.

- VALUE()
이 함수는 오브젝트 테이블에 저장되어 있는 object instance를 리턴하는 함수
value()를 사용할 때 argument로 오브젝트 자체를 언급하기 위해서는 테이블
alias 기능을 사용해야 한다.

- REF()
이 함수는 오브젝트의 ref를 리턴한다. 즉 system이 각 로우에 할당한
unique한 값인 OID 값을 리턴한다.

- DEREF()
ref 데이터를 dereference를 함으로서, 이 포인터가 가리키고 있는
오브젝트의 instance를 리턴한다

< sample >

-- object type과 object table의 생성
SQL> create or replace type address as object
(street varchar2(80), city varchar2(80),
state char(2), zip varchar2(10));

SQL> create table address_tbl of address
( street constraint pk_address primary key);

-- object table에 constraint 생성, object type에 대해서는 생성 불가능

SQL> create table address_tbl of address
( street constraint pk_address primary key,
city not null, unique (city ),
check ( state in ('LA', 'CA' )),
state default 'LA' );

-- constraint 추가
SQL> create table address_tbl of address;
SQL> alter table address_tbl add primary key (street);
SQL> alter table address_tbl modify ( city not null);
SQL> alter table address_tbl modify ( city default 'LA');

-- Insert
SQL> insert into address_tbl values ('55 Madison Ave',
'Madison', 'WI', '53715') ;
SQL> insert into address_tbl values (address('2 Avocet Drive',
'Redwood Shores', 'CA', '95054' ));

-- Select
-- value를 select
SQL> select * from address_tbl;
55 Madison Ave Madison WI 53715
2 Avocet Drive Redwood Shores CA 95054

-- object를 select 할때는 value()를 이용
SQL> select value(p) from address_tbl p;
ADDRESS('55 Madison Ave', 'Madison', 'WI', '53715')
ADDRESS('2 Avocet Drive', 'Redwood Shores', 'CA', '95054')

-- object reference를 select 할때는 ref()를 이용
SQL> select ref(p) from address_tbl p;
0000280209910A3F6D0F3811D3A2300010A4F93C83910A3F6D3 ......
0000280209910A3F6E0F3811D3A2300010A4F93C83910A3F632 ......

-- Update & Delete
SQL> update address_tbl set zip = '95055' where zip= 95054;
Comment
등록된 코멘트가 없습니다.