如何在保留现有值的同时更新/插入嵌套值表中的值

时间:2018-11-04 23:55:40

标签: sql oracle oracle11g custom-type

在我们的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行。我试图弄清楚如何在保留所有现有值的同时将更多值插入第1行的num_list中,而不必手动键入这些现有值;这是一个更大的任务的小例子,该任务需要大量更新同时保留vals。

我与此很亲近:

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 :(得分:0)

您可以将单个值插入嵌套表中的特定ID,如下所示:

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;