Как обновить / вставить значения во вложенную таблицу значений при сохранении существующих значений - PullRequest
0 голосов
/ 05 ноября 2018

В нашей базе данных Oracle 11g у меня есть пользовательский тип данных:

num_list

create or replace type
    num_list
as
    table of varchar2(25);

Затем я создал таблицу, которая использует этот тип данных:

create table num_list_table(
    id number(*,0)
    ,numbers num_list
) nested table numbers store as numbers_tab
;

Затем я вставил следующие строки:

insert into num_list_table values (1, num_list('123', 456'));

И теперь у меня есть 1 ряд. Я пытаюсь выяснить, как вставить больше значений в num_list строки 1 при сохранении любых существующих значений и без необходимости вручную вводить эти существующие значения; это небольшой пример гораздо более крупной задачи, которая потребует массовых обновлений при сохранении значений).

Я близко с этим:

update
    num_list_table
set numbers = (select num_list(numbers) from (
    select listagg(numbers, ',') within group (order by numbers) numbers
    from (select t.column_value numbers
          from 
              num_list_table nlt,
              table(nlt.numbers) t
           where
               st.id = 1
         union
         select '789'
         from dual)))
     where id = 1;

Однако эти результаты представляют собой одну запись:

num_list('123,456,789')

Мне нужно, чтобы в num_list было несколько записей:

num_list('123', '456', '789')

Любая и всякая проницательность будет с благодарностью.

1 Ответ

0 голосов
/ 06 ноября 2018

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

insert into table 
       (select numbers 
          from num_list_table 
          where id = 1)
values ('123')

или с помощью вставки выберите:

insert into table 
       (select numbers 
          from num_list_table 
         where id = 1)
select n.same_type_field
  from another_table n;
...