Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 如何从pl/sql中的嵌套表更新列?_Database_Oracle_User Defined Types - Fatal编程技术网

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

Database 如何从pl/sql中的嵌套表更新列?,database,oracle,user-defined-types,Database,Oracle,User Defined Types,我试图在一个表中创建一列,它可以像这样存储多个值 我有一个学生有一个id\u std和一个名为marks的列,该列可以接受几个值,比如2,3,4。我想更新此列表以添加另一个标记,使2,3,4,5,但我不知道如何更新 如何更新列标记以添加新标记而不删除以前的值?这是我的密码: CREATE OR REPLACE TYPE NumberList IS TABLE OF number(5); / DROP TABLE test; CREATE TABLE test ( id_std int

我试图在一个表中创建一列,它可以像这样存储多个值

我有一个学生有一个
id\u std
和一个名为
marks
的列,该列可以接受几个值,比如
2,3,4
。我想更新此列表以添加另一个标记,使
2,3,4,5
,但我不知道如何更新

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

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));

语法有点模糊,但基本上您需要使用MULTISET操作符操作嵌套表

update test 
set marks = marks multiset union all numberlist(42) 
where id_std = 1 
这会将现有标记集与新标记集(在本例中为一组标记)连接起来。这是

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

update test 
set marks = marks multiset union all numberlist(23, 69) 
where id_std = 1 
嵌套表列原则上很聪明,但实际上很笨拙。在SQL语句中使用它们可能会导致一些丑陋的SQL语句。如果要使用它们,您需要熟悉所有多集运算符

可以尝试以下方法:

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

此语法确实适用于将单个值附加到现有的
标记
(这是OP要求的)。但是,它不支持在同一语句中添加多个值