我正在將GTT轉換爲oracle類型,正如APC出色的answer中所解釋的那樣。但是,某些GTT正在根據另一個表中的選擇查詢進行更新。例如:oracle的類型可以像表一樣更新嗎?
UPDATE my_gtt_1 c
SET (street, city, STATE, zip) = (SELECT src.unit_address,
src.unit_city,
src.unit_state,
src.unit_zip_code
FROM (SELECT mbr.ROWID row_id,
unit_address,
RTRIM(a.unit_city) unit_city,
RTRIM(a.unit_state) unit_state,
RTRIM(a.unit_zip_code) unit_zip_code
FROM table_1 b,
table_2 a,
my_gtt_1 mbr
WHERE type = 'ABC'
AND id = b.ssn_head
AND a.h_id = b.h_id
AND row_id >= v_start_row
AND row_id <= v_end_row) src
WHERE c.ROWID = src.row_id)
WHERE state IS NULL
OR state = ' ';
如果my_gtt_1
不是全局臨時表,但一個Oracle集合類型則是有可能這樣做更新此複雜嗎?或者在這些情況下,我們最好使用全局臨時表?
+1引用我:) – APC 2010-06-15 12:06:07
不能使用UPDATE(前11至少),但如果你有一個更好的用SQL表達的操作,你可以編寫一個接收集合的函數,使用SELECT over TABLE(myCol),BULK COLLECT將其轉換爲相同類型的resultCol,然後執行類似於myCol的操作:= lTransform(myCol )。 – JulesLt 2010-07-15 14:38:48