2012-04-20 110 views
4

我对如何打印定义类型的对象的所有值有疑问。我有一个PROJECTT类型的对象表SP。当我在SP中查询其对象的行时,它将返回对象的类型(PROJECTT),但不返回对象的内容。 PROJECTT类型有5个varchar列,这是我想要返回的。从一列嵌套表中选择SQL

下面是我的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) 

,我填的活性成分的SP柱在POBJECTS表中的行引用。

我想用select语句打印这些行。我不太清楚如何让SP的目标的价值,所以我就开始喜欢的东西:

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

请发布您的表和类型的CREATE语句以及您的查询的SQL。 – 2012-04-20 16:56:08

+0

+1用于补充问题@BobJarvis评论 – Matthew 2012-04-20 19:27:46

+0

更新了更多信息! :) – Teknos 2012-04-20 20:48:34

回答

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;的末尾添加nested table sp store as sp_tab;

+0

非常好!我的错误,我错误地离开了这条线。你的解决方案很棒。谢谢! – Teknos 2012-04-21 04:22:05