2012-10-23 59 views
2

可能重复:
How can I define a type in oracle11g that references a collection of that type?Oracle用户定义对象 - 自我引用类型的集合

我有,我必须创建一个用户定义的类型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处于不完整状态,编译器会抱怨完成它们。我不知道如何去做这件事。任何帮助都感激不尽。

+0

为什么你认为你需要创建一个包含该类型集合的类型?这似乎不是一个明智的要求,我很难想象任何语言都可能有这样的事情。如果你可以消除这个要求,那么你可以明智地定义一个对象A并定义另一个对象B,它拥有一个A的集合,这似乎是解决这类问题的合适方法。你能解释为什么你不能有多个对象? –

+0

基本上我想从我有的表创建一个树结构。根据要求,这是层次定义和描述为:目录 - >类别 - >类别 - >类别 - >产品 - > sku - > bundl – 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%。

相关问题