Oracle用户定义的对象 - 自引用类型的集合

时间:2012-10-23 18:07:34

标签: oracle collections adt user-defined-types self-reference

  

可能重复:
  How can I define a type in oracle11g that references a collection of that type?

我有一个场景,我必须创建一个用户定义的类型A,它具有类型A的集合。 我尝试了以下但没有帮助:

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处于不完整状态,编译器会抱怨完成它们。我不知道该如何解决这个问题。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

您需要使用嵌套的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%的时间内工作得更好。