【问题标题】:How can i update a column from a nested table in pl/sql? [duplicate]如何从 pl/sql 中的嵌套表中更新列? [复制]
【发布时间】:2018-03-25 22:19:17
【问题描述】:

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

我有一个学生有一个 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));

【问题讨论】:

    标签: database oracle user-defined-types


    【解决方案1】:

    语法有点晦涩,但基本上你需要用 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.

    【讨论】:

      【解决方案2】:

      可以试试这个:

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

      【讨论】:

      • 此语法确实适用于将单个值附加到现有的 marks (公平地说,这是 OP 要求的)。但是,它不支持在同一个语句中添加多个值
      猜你喜欢
      • 2013-11-13
      • 2017-03-03
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      • 2018-06-17
      • 2015-08-07
      • 1970-01-01
      • 2015-03-31
      相关资源
      最近更新 更多