可能重复:
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处于不完整状态,编译器会抱怨完成它们。我不知道该如何解决这个问题。任何帮助将不胜感激。
答案 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%的时间内工作得更好。