Вставка массива в конструкцию объекта, построенную на основе запроса - PullRequest
0 голосов
/ 02 мая 2009

Как я могу построить объект, используя запрос, если мне также нужно вставить значения в родительский объект?

Очевидно, я использую неправильный синтаксис.

Отредактировано, ближе:

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 с массивом, созданным на основе определенного мной запроса. Могу ли я сделать все это в одной вставке? Или мне нужно заполнить пустым заполнителем и ОБНОВИТЬ это поле впоследствии?

Текущая жалоба Oracle -

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

Так, как я могу получить множественные OID-возвраты этого запроса в массив в объекте, который я создаю?

Ответы [ 2 ]

1 голос
/ 02 мая 2009

У вас почти есть это!

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')));
0 голосов
/ 02 мая 2009

Возможно, есть лучший способ сделать это, чтобы я мог вставить несколько строк в мой массив из одного запроса, но сработало следующее:

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'))));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...