【问题标题】:how to add an element into a nested table in sql (oracle)?如何在sql(oracle)中将元素添加到嵌套表中?
【发布时间】:2019-05-05 02:59:23
【问题描述】:

假设我正在使用一个表 person,并且 people 可能有多个姓氏,因此该属性应该存储在嵌套表中(而不是存储姓氏的位置),这是一个用于创建类型 last 的简单 sql在 oracle 的 sql developer (11G XE) 中添加一个示例行:

create type lastn as table of varchar2(10);
CREATE TABLE person
(
ID NUMBER NOT NULL 
, last_name lastn
, CONSTRAINT EXEMPLE_PK PRIMARY KEY 
(
 ID 
)
ENABLE 
)nested table last_name store as ln;
insert into person values(1,ln('dani','bilel'));

我知道如何一次更新所有姓氏,但我需要保留现有姓氏并添加其他姓氏,或者删除一个姓氏而不影响其他姓氏。简而言之,我希望我的代码是这样的(我不熟悉 PL/SQL):

update person set last_name=last_name+'third last name' where id=1;

我知道它不会那样工作,我应该使用 PL/SQL 吗?,难道不是其他方式吗?

请原谅我的问题,感谢您的回复。

【问题讨论】:

    标签: sql oracle11g nested-table object-relational-model


    【解决方案1】:

    您可以使用表集合运算符插入到嵌套表中:

    insert into table(select last_name from person where id = 1) values ('third');
    
    1 row inserted.
    
    select last_name from person where id = 1;
    
    LAST_NAME                                         
    --------------------------------------------------
    LASTN('dani', 'bilel', 'third')
    

    你可以用同样的方法删除元素:

    delete from table(select last_name from person where id = 1) where column_value = 'bilel';
    
    1 row deleted.
    
    select last_name from person where id = 1;
    
    LAST_NAME                                         
    --------------------------------------------------
    LASTN('dani', 'third')
    

    你甚至可以更新它们:

    update table(select last_name from person where id = 1)
    set column_value = 'second' where column_value = 'third';
    
    1 row updated.
    
    select last_name from person where id = 1;
    
    LAST_NAME                                         
    --------------------------------------------------
    LASTN('dani', 'second')
    

    【讨论】:

    • 感谢您的快速回复,能否请您告诉我如何对 varray 和对象做同样的事情?
    • 对不起,我错过了你的评论......无论如何,最好将它作为一个单独的问题 *8-) 正如你所看到的,使用嵌套表进行这种操作更容易.
    猜你喜欢
    • 2020-11-10
    • 2021-07-21
    • 2023-01-22
    • 1970-01-01
    • 2017-05-07
    • 1970-01-01
    • 2017-09-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多