4

定義されたタイプのオブジェクトのすべての値を出力する方法について質問があります。タイプPROJECTTのオブジェクトのテーブルSPがあります。SPの行にそのオブジェクトを照会すると、オブジェクトのタイプ(PROJECTT)が返されますが、オブジェクトの内容は返されません。タイプPROJECTTには5つのvarchar列があり、これを返したいものです。

以下は私のテーブルとタイプのSQLです

set echo on
set serveroutput on

drop table ACTIVES;
drop table POBJECT;
drop type ACTIVEST;
drop type POBJECTT;


create type POBJECTT as
   object (p# varchar(5), pname varchar(20), color varchar(10),
           weight number, city varchar(10));

create table POBJECT of POBJECTT;
   insert into POBJECT(p#, pname, color, weight, city) values
    ('P1', 'Nut', 'Red', 12, 'London');
   insert into POBJECT(p#, pname, color, weight, city) values
   ('P2', 'Bolt', 'Green', 17, 'Paris');
   insert into POBJECT(p#, pname, color, weight, city) values
   ('P3', 'Screw', 'Blue', 17, 'Rome');
   insert into POBJECT(p#, pname, color, weight, city) values
   ('P4', 'Screw', 'Red', 14, 'London');
   insert into POBJECT(p#, pname, color, weight, city) values
   ('P5', 'Cam', 'Blue', 12, 'Paris');
   insert into POBJECT(p#, pname, color, weight, city) values
   ('P6', 'Cog', 'Red', 19, 'London');

  create type ACTIVEST as table of ref POBJECTT;
   /

  create table ACTIVES(s# varchar(5), sname varchar(20), status number, 
                     city varchar(10), sp ACTIVEST)

次に、Java SAXパーサーとXMLファイルを使用して、ACTIVESのsp列にPOBJECTSテーブルの行への参照を入力します。

selectステートメントを使用してこれらの行を出力しようとしています。SPでオブジェクトの値を取得する方法がよくわからないため、次のようなものから始めました。

select * from (select sp from actives where S# = 'S1')
4

1 に答える 1

1
select
    deref(column_value).p# p#
    ,deref(column_value).pname pname
    ,deref(column_value).color color
    ,deref(column_value).weight weight
    ,deref(column_value).city city
from actives cross join table(sp)
where s# = 'S1';

P#    PNAME                COLOR          WEIGHT CITY
----- -------------------- ---------- ---------- ----------
P1    Nut                  Red                12 London
P2    Bolt                 Green              17 Paris

SQL>

以前に次のような挿入を実行したと仮定します。

insert into actives
select 'S1', 'sname', 0, 'city'
    ,activest(
        (select ref(p) from pobject p where p# = 'P1')
        ,(select ref(p) from pobject p where p# = 'P2')
    )
from dual;

また、ACTIVES DDL が機能しませんでした。最後に追加nested table sp store as sp_tab;する必要がありました。

于 2012-04-21T03:46:05.717 に答える