2017-12-30 42 views
-1

に新しい行を追加し、私はオラクル、ネストした表

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) 

何Iネストされたテーブルを次のようにしたいとします。

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

つまり、既に作成されたネストしたテーブルwhに新しい行を追加する方法です既存のエントリを保持していますか? ..

+0

table_clientの定義を表示できますか? –

+0

@ user9152856:大文字の文章全体を(特に何かを尋ねながら)決して投稿するべきではありません。これは一般に、インターネットでラウドネス(または叫び声)を表現するのに使用され、あなたが意図しているかどうかにかかわらず、あなたがそれを行うと人々を悩ませる。 –

答えて

2

MULTISET UNION演算子を使用して、2つのセットから新しいセットを作成できます。あなたのケースでは、それらのセットのうちの1つは既存のセットであり、2つ目のセットは新しいエントリのセットです。ここで

あなたのセットアップを簡略化したバージョンに基づいてデモです:

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

あなたが挿入することができ、あなたのtable_achatタイプのネストした表である列COL_NTとテーブルT42を考えますこのようなネストされたテーブルに新しいエントリ:私は、理解しようとしていなかったことができなかった質問から

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

はい、非常に便利です! 同じことをしたいのですが、table_clientのエントリに存在するネストしたテーブルにあります。 – user9152856

0

は無関係な、あなたが結合することはできませんinsert以前と同じように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); 
+0

いいえ、あなたは正しくありません! 私はあなたの編集作業の前に正しく言う! – user9152856