如何将元素添加到嵌套的 table in sql (oracle)?
how to add an element into a nested table in sql (oracle)?
假设我正在使用一个 table 人,并且这些人可能有多个姓氏,因此该属性应该存储在一个嵌套的 table 中(这与存储姓氏的位置无关),这是一个简单的 sql 用于创建类型姓氏,table 人并在 oracle 的 sql developper (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 吗?,难道没有其他方法吗?
请原谅我的问题,感谢您的回复。
您可以使用 table 集合运算符插入嵌套的 table:
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')
假设我正在使用一个 table 人,并且这些人可能有多个姓氏,因此该属性应该存储在一个嵌套的 table 中(这与存储姓氏的位置无关),这是一个简单的 sql 用于创建类型姓氏,table 人并在 oracle 的 sql developper (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 吗?,难道没有其他方法吗?
请原谅我的问题,感谢您的回复。
您可以使用 table 集合运算符插入嵌套的 table:
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')