2

可能重复:
如何在 oracle11g 中定义引用该类型集合的类型?

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

4

1 回答 1

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% 的情况下工作得更好。

于 2012-10-26T06:04:49.820 回答