2012-04-20 8 views
4

定義された型のオブジェクトのすべての値を印刷する方法に関する質問があります。私はPROJECTT型のオブジェクトのテーブルSPを持っています。そのオブジェクトのSPの行にクエリを実行すると、オブジェクトのタイプ(PROJECTT)は返されますが、オブジェクトの内容は返されません。タイプPROJECTTには、5つのvarcharカラムがあります。これが返されます。以下はネストした表の列から選択するSQL

私はPOBJECTSテーブルの行を参照して活性物質のSPカラムを埋める、私のSQLは私のテーブルのためであり、そして、JavaのSAXパーサーとXMLファイルを使用して

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) 

を入力します。

私はこれらの行をselectステートメントを使用して印刷しようとしています。私はSPでオブジェクトの値を取得する方法は非常にわからないので、私のようなものを開始しました:

あなたが前にこのような挿入を実行したと仮定すると、
select * from (select sp from actives where S# = 'S1') 
+1

テーブル、タイプ、およびクエリのSQL用のCREATEステートメントを投稿してください。 –

+0

+1 @BobJarvisのコメントごとに質問を補完するために+1 – Matthew

+0

詳細情報で更新されました! :) – Teknos

答えて

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;を追加しなければならなかった。

+0

非常に良い!私の間違い、私は間違ってその行を去った。あなたの解決策は素晴らしかったです。ありがとう! – Teknos

関連する問題