在基于查询构造的对象构造中插入数组
Posted
技术标签:
【中文标题】在基于查询构造的对象构造中插入数组【英文标题】:Inserting an array within an object construction, constructed based on a query 【发布时间】:2009-05-02 15:14:21 【问题描述】:如果我还需要在父对象中插入值,如何使用查询构造对象?
显然我使用了错误的语法。
已编辑,越来越近:
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
另一个表被创建为:
CREATE TABLE anotherTable OF mylittletype
mybigtype 有一些字符串和一个类型,该类型被定义为保存对 mylittletype 对象的引用数组。因此,我希望能够在此表中插入一行,该行创建一个 mybigtype 类型的对象,其数组基于我定义的查询构造。我可以在一次插入中完成所有这些吗?还是我需要放入一个空占位符并随后更新此字段?
甲骨文目前的投诉是
ORA-01427: single-row subquery returns more than one row
那么我怎样才能将这个查询的多个 OID 返回到我正在构建的对象中的数组中呢?
【问题讨论】:
【参考方案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')));
【讨论】:
非常感谢,这让我了解了大部分情况 - 此查询返回多行,我想将它们分别添加到数组中。这可能吗? 我有点困惑,因为数组应该将子查询中返回的所有行添加到 myarrayoflittletypes。是什么给了您超出预期的价值? (select ref(S) * ERROR at line 5: ORA-01427: single-row subquery returns more than one row 我应该使用不同的关键字来指示应该添加所有行吗? 另外,外部的 select 语句需要从某些东西中选择——我选择的东西有关系吗? 您如何处理数组创建,因为它在返回多行时犹豫不决? myarrayoflittletypes() 是解析结果并将它们放入串联列表的用户定义函数吗?而外部选择只是将值包装到一个选择语句中,因此如果需要,您可以拥有多行。【参考方案2】:可能有更好的方法来做到这一点,以便我可以从单个查询中将多行插入到我的数组中,但以下方法有效:
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'))));
【讨论】:
以上是关于在基于查询构造的对象构造中插入数组的主要内容,如果未能解决你的问题,请参考以下文章
hibernate入门---Hibernate查询方式(for循环构造器对象数组等)第三天,相当于总结整合
如何使用 Apollo Query 构造 React 代码,以便随机查询的对象数组不会随着状态变化而重新呈现?