如何从pl / sql中的嵌套表更新列?

时间:2018-03-24 12:16:55

标签: database oracle user-defined-types

我正在尝试在表中创建一个可以存储多个值的列。

我的学生有id_std和名为marks的专栏,可以使用2,3,4等多个值。我想更新此列表以添加另一个标记以生成2,3,4,5,但我不知道如何。

我如何更新列marks以添加新标记而不删除以前的值?这是我的代码:

CREATE OR REPLACE TYPE NumberList IS TABLE OF number(5);
/
DROP TABLE test;

CREATE TABLE test ( 
   id_std int
   , marks NumberList )
Nested table marks store as numere_necesare;

insert into test(id_std, marks )
values (1,NumberList(6,7,8));

2 个答案:

答案 0 :(得分:3)

语法有点模糊,但基本上你需要用MULTISET运算符来操作嵌套表。

update test 
set marks = marks multiset union all numberlist(42) 
where id_std = 1 

这将现有标记集与新集合连接(在本例中为一组)。这是a LiveSQL demo (free Oracle Technet account required)

这种方法的优点是可以轻松地一次添加多个值:

update test 
set marks = marks multiset union all numberlist(23, 69) 
where id_std = 1 

嵌套表格列原则上很聪明,但实际上很难处理。在SQL语句中使用它们会导致一些丑陋的SQL。如果您要使用它们,您需要熟悉所有MULTISET操作员。 Find out more

答案 1 :(得分:1)

可以试试这个:

insert into table( select marks from test where id_std = 1 ) values ( 5 );