在基于查询构造的对象构造中插入数组

时间:2009-05-02 15:14:22

标签: sql oracle

如果我还需要在父对象中插入值,我如何使用查询构造对象?

显然我使用了错误的语法。

编辑,越来越近了:

insert into myTable
select
    mybigtype('foo', 'bar', 'fizzle', myarrayoflittletypes(
        select ref(S)
        from anotherTable S
        where S.stname='dingle'
            or S.stname='fangle')));

mylittletype创建为:

CREATE TYPE myarrayoflittletypes AS VARRAY(20) OF REF mylittletype

anotherTable创建为:

CREATE TABLE anotherTable OF mylittletype

mybigtype有一些字符串和一个类型,它被定义为包含对mylittletype对象的引用数组。所以我希望能够在这个表中插入一行,创建一个mybigtype类型的对象,并根据我定义的查询构造数组。我可以一次插入吗?或者我是否需要放入一个空占位符并随后更新此字段?

甲骨文目前的抱怨是

ORA-01427: single-row subquery returns more than one row

那么如何才能将这个查询的多个OID返回到我正在构造的对象的数组中?

2 个答案:

答案 0 :(得分:1)

你几乎拥有它!

insert into myTable
select 
    mybigtype('foo', 'bar', 'fizzle', myarrayoflittletypes(
        (select
            ref(S.mylittletype)
        from anotherTable S
        where S.mylittletype.stname='dingle
            or S.mylittletype.stname='fangle')));

答案 1 :(得分:0)

可能有更好的方法来执行此操作,以便我可以从单个查询中将多行插入到我的数组中,但以下方法有效:

insert into myTable
    values(mybigtype('foo', 'bar', 'fizzle', myarrayoflittletypes(
        (select ref(S)
        from anotherTable S
        where S.stname='dingle'),
        (select ref(S)
         from anotherTable S
         where S.stname='fangle'))));