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 に答える