TECH
QUESTION
자주하는 질문답변 입니다.
Oracle
작성자 | 유건데이타 | 등록일 | 2015-05-18 |
제목 | NESTED TYPE 사용 예제 | ||
---|---|---|---|
NESTED TYPE 사용 예제
==================== . Nested table은 TABLE을 테이블의 컬럼으로 사용할 수 있도록 하는 데이터 타입이다. . Nested table을 column으로 갖는 table을 parent table이라고 하고, parent table이 갖고 있는 권한이나 storage option은 Nested table에 상속된다. . nested table이 저장되는 segment를 storage table이라고 하고, nested table 선언시 지정해줘야 한다. . 1: n의 관계나, master-detail과 같은 reference 관계에 유용한 데이터 타입이다. nested table 컬럼을 처리하는데 다음과 같은 함수를 이용할 수 있다. - CAST () untyped row들을 AS 이하에서 명시한 collection type으로 변환해 준다. - MULTISET() SELECT 결과가 여러 ROW를 담고 있을 때, 이들 ROW들을 하나의 데이터 SET으로 간주하여 처리할 수 있도록 해준다. - THE() Nested table의 하나의 요소를 처리할 때 사용 되는 함수이다. - CURSOR() subquery를 이용하여 임시 table을 구성할 때 사용. multi record를 return 할 수 있다. < sample > -- nested type 선언 SQL> create or replace type address as object (street varchar2(80), city varchar2(80), state char(2), zip varchar2(10)); SQL> create type address_nested_type as table of address; SQL> create table address_nested_tbl ( empno number, address address_nested_type ) nested table address store as addresstab ; -- inner table에 index 생성 SQL> create index add_nest_idx on addresstab (zip); -- Insert SQL> insert into address_nested_tbl values (10, address_nested_type( address('2 Avocet Drive', 'Redwood Shores', 'CA', '95055'), address('55 Madison Ave', 'Madison', 'WI', '53715'))); SQL> insert into address_nested_tbl values (20, address_nested_type( address('55 Madison Ave', 'Madison', 'WI', '53715'))); SQL> insert into address_nested_tbl values (10, null ); -- inner table에 row 추가 (8.1이상에서 the 대신 table()도 가능) SQL> insert into the (select address from address_nested_tbl where empno =20 ) values (address('2 Avocet Drive', 'Redwood Shores', 'CA', '95055')); -- Select -- nested table에 저장된 object select하기 SQL> select empno, address from address_nested_tbl; 10 ADDRESS_NESTED_TYPE( ADDRESS('2 Avocet Drive', 'Redwood Shores', 'CA', '95055'), ADDRESS('55 Madison Ave', 'Madison', 'WI', '53715')) 20 ADDRESS_NESTED_TYPE( ADDRESS('55 Madison Ave', 'Madison', 'WI', '53715') , ADDRESS('55 Madison Ave', 'Madison', 'WI', '53715')) 10 -- 개별 row select -- table(), the() 유사한 기능 수행 => the()는 이후 없어질 예정 -- the()절 안에는 object가 바로 올 수 없고, subquery문 기술 -- detail row에 조건 주어 select SQL> select p.empno, cursor ( select street from table(p.address) a where state ='WI') sta from address_nested_tbl p where empno = 10; 10 CURSOR STATEMENT : 2 CURSOR STATEMENT : 2 |
Comment | |||
---|---|---|---|
등록된 코멘트가 없습니다. |