2012-10-23 2 views
2

가능한 중복 :
How can I define a type in oracle11g that references a collection of that type?오라클 사용자 정의 개체 - 자기 참조 형의 수집

내가 컬렉션을 가진 사용자 정의 유형을 생성해야하는 시나리오가 다음을 시도했지만 도움이되지 않았습니다.

create or replace type sku_t; 

create or replace type skulink_t as table of sku_t; 

create or replace type sku_t as object(skuId varchar(12), display_name varchar(100), bundlnks ref skulink_t); 

이렇게하면 sku_t 및 skulink_t 객체가 불완전한 상태가되고 컴파일러가 객체를 완료하지 못하게합니다. 나는 이것에 대해 어떻게 가야할지 모르겠다. 어떤 도움을 많이 주시면 감사하겠습니다.

+0

왜 그 유형의 컬렉션이 포함 된 유형을 만들어야한다고 생각하십니까? 그것은 합리적인 요구 사항으로 보이지 않으며 그러한 일이 일어날 수있는 언어를 상상하기 힘듭니다. 그러한 요구 사항을 제거 할 수 있다면, 당신은 현명하게 객체 A를 정의 할 수 있으며, 이런 종류의 문제에 접근하는 적절한 방법 인 것처럼 보이는 A의 집합을 가진 다른 객체 B를 정의 할 수 있습니다. 여러 개체를 가질 수없는 이유를 설명해 주시겠습니까? –

+0

기본적으로 나는 가지고있는 테이블로부터 트리 구조를 만들고 싶습니다. 요구 사항에 따라 다음과 같이 정의되고 설명 된 계층 구조입니다. 카탈로그 -> 카테고리 -> 카테고리 -> 카테고리 -> 제품 -> SKU -> 번들 – user1711845

+0

위의 불완전한 회신에 대해 미안합니다. 쓰기. – user1711845

답변

0

중첩 테이블 REF 대신 REF 중첩 테이블을 사용해야합니다. 이것을 사용하는 방법에

create or replace type sku_t; 
create or replace type skulink_t as table of ref sku_t; 
create or replace type sku_t as object(skuId varchar(12), display_name varchar(100), bundlnks skulink_t); 

예 :

create table sku_table of sku_t nested table bundlnks store as outer_nt; 

insert into sku_table values(sku_t('sku1', 'sku1', null)); 
insert into sku_table values(sku_t('sku2', 'sku2', null)); 
insert into sku_table 
values(sku_t('sku3', 'sku3', 
    skulink_t 
    (
     (select ref(s) from sku_table s where s.skuId = 'sku1'), 
     (select ref(s) from sku_table s where s.skuId = 'sku2') 
    ))); 

commit; 

select deref(b.column_value).skuid skuid 
from sku_table, table(bundlnks) b where skuid = 'sku3'; 

skuid 
----- 
sku1 
sku2 

그러나 일반 계층 테이블이 아마 시간의 더 나은 99.99 %를 작동합니다.