oracle,在嵌套表中添加一个新行

时间:2017-12-30 12:54:18

标签: oracle user-defined-types

我有这三个对象

create or replace 
type type_client 
( num int , 
  username varchar(30), 
  balance int, 
  ta table_achat, 
  ref_admin ref type_admin,
  member function get_prix_achat_total return int );



create or replace 
type table_achat as table of achat ;


create or replace 
type achat as object ( num_item int , qte int
);

create table table_client OF type_client ;

假设在table_client的一个条目中..我们有一个这样的嵌套表:

(num_item,qte) : (1 , 5),(2 , 3)

我想要的是嵌套表是这样的(例如):

(num_item,qte) : (1 , 5),(2 , 3)(3 , 44)

我的意思是,如何在保留现有条目的同时向已创建的嵌套表添加新行? ..

2 个答案:

答案 0 :(得分:2)

我们可以使用MULTISET UNION运算符从两个集合中创建一个新集合。在您的情况下,其中一个集合是您现有的集合,第二个集合是新条目集合。

以下是基于简化版设置的演示:

declare
  nt table_achat;
begin
  nt := table_achat(achat(1 , 5),achat(2 , 3));
  dbms_output.put_line(nt.count());

  nt := nt multiset union table_achat(achat(3 , 44));
  dbms_output.put_line(nt.count());
end;
/

给定一个带有COL_NT列的表T42,它是table_achat类型的嵌套表,您可以在嵌套表中插入一个新条目,如下所示:

insert into the 
(select col_nt from t42 where id = 1) 
values (achat(3,44));   

答案 1 :(得分:0)

与我无法理解的问题无关,您无法像之前那样合并insert + select + values语句。也许你可能更喜欢以下的:

insert into the -- if table has one string column
(select ta from table_client where username=user);

OR

insert into the -- if table has two numeric columns
values (3,44);