2013-09-30 31 views
1

我發現了很多例子,展示瞭如何使用嵌套表格列創建表格以及如何在步驟1-5中詳細「手動」更新它們。如何從嵌套表格列的不同表格更新多個行(批量)?

我想要做什麼: 更新(在例子中的「cust_info」)嵌套表列直接/自動從其他數據庫中的表(NEW_TBL-具有相同的結構),並陸續不需要進入一個值手動。

(1)創建對象:

CREATE TYPE TEST_OBJECT_T AS OBJECT 
(
x NUMBER, 
y NUMBER 
); 

(2)創建集合:

CREATE TYPE TEST_OBJ_TBL IS TABLE OF TEST_OBJECT_T; 

(3)用巢式表列

create table aaaTable 
(
CUSTID number, 
cust_info TEST_OBJ_TBL 
) 
NESTED TABLE cust_info STORE AS xx_tbl 
; 
創建表

(4) - -insert數據

insert into AAATABLE 
VALUES (1,TEST_OBJ_TBL(
          TEST_OBJECT_T(33,77), 
          TEST_OBJECT_T(66,67), 
          TEST_OBJECT_T(320,999) 
          ) 
     ); 

+++++++++++++++++++++++++++++++++++++++++++++++ ++++++++

insert into AAATABLE 
VALUES (2,TEST_OBJ_TBL(
          TEST_OBJECT_T(444,555), 
          TEST_OBJECT_T(333,67), 
          TEST_OBJECT_T(111,978) 
          ) 
     ); 

(5)的查詢2看到的結果

select T1.custid ,T2.* 
    from AAATABLE T1 , table(T1. CUST_INFO) T2; 

results : 
CUSTID   X   Y 
---------- ---------- ---------- 
     1   33   77 
     1   66   67 
     1  320  999 
     2  444  555 
     2  333   67 
     2  111  978 

(6)創建新的表,這將是數據源,用於更新嵌套表列)

create table new_tbl 
(
X1 NUMBER, 
Y1 NUMBER 
); 

(7)將數據插入新表

再次
insert into NEW_TBL values (222,444); 
insert into NEW_TBL values (345,777); 
insert into NEW_TBL values (867,222); 

+++++++++++++++++++++++++++++++++

select * from NEW_TBL 


    X 1   Y1 
---------- ---------- 
     222  444 
     345  777 
     867  222 

的問題:能我在批量插入「new_tbl」數據轉換成嵌套表列(「cust_info「)(意味着 - 在階段替換數據4 TEST_OBJECT_T(33,77), TEST_OBJECT_T(66,67), TEST_OBJECT_T(320999) ) 我試圖使用批量收集,但沒有成功。

感謝 可人

回答

1

可以使用COLLECT函數(CAST)

update aaatable d 
set d.cust_info = (select cast (collect(TEST_OBJECT_T(x1,y1)) as TEST_OBJ_TBL) from new_tbl) 
where d.custid = 1; 

Here is a sqlfiddle demo

+0

多10倍。我嘗試了更復雜的東西.. – keren