2013-07-23 44 views
0

在oracle中我已經創建如何讀取類型值在Oracle中的集合(圖)型

create type INTERFACE_VALUES as OBJECT (
IVKEY VARCHAR2(32), 
IVVALUE VARCHAR2(250) 

);

create type T_INTERFACE_VALUES as TABLE OF INTERFACE_VALUES; 

和從Java側我被轉換成地圖數組傳遞一個MAP作爲輸入到存儲過程。

我創建了一個存儲過程來接受這張地圖作爲輸入參數。

PROCEDURE S_MAP_PARAMETERS( pVALUES IN T_INTERFACE_VALUES ) AS 
??? 

END S_MAP_PARAMETERS;

所以我需要閱讀SQL中的pVALUES我該怎麼做?

感謝

回答

1

嵌套表類型不鍵值集合。所以,你需要遍歷表pValues然後爲每個對象,您可以訪問屬性IVVALUEIVKEY,你可以做,以多種方式:使用TABLE功能

CURSOR iterate as 
SELECT * 
    FROM TABLE(pValues) 

通過光標

1-然後在你的代碼

For Rec in iterate 
loop 
    --for example 
    DBMS_OUTPUT.PUT_LINE(rec.IVVALUE) 
end loop; 

2-循環一個項目的時間,使用嵌套表count功能:

For indx in 1..pValues.COUNT 
Loop 
--access it using indx pvalues(indx) 
--for example 
DBMS_OUTPUT.PUT_LINE(pvalues(indx).IVVALUE) 

end loop 
+0

可以請你給我提供任何LOOP代碼爲去年Block..i試圖像 DBMS_OUTPUT.PUT_LINE(「參數」 || p值(指數)); 它有編譯錯誤。 – vinod

+0

'pValues(index)'將使您能夠訪問一個對象/類型實例,因此您需要使用該屬性名稱來獲取該值。在你的情況下,可能是'IVVALUE'或'IVKEY',我將編輯我的答案以顯示 –

+0

請補充一點,我是SQL新手。:) – vinod

1

在SQL

SELECT ivkey, ivvalue 
    FROM TABLE(pValues); 

會工作。如果你真的想要問如何訪問PL/SQL中的集合,假設集合是密集的。

FOR i IN 1..pValues.count 
LOOP 
    dbms_output.put_line('Key = ' || pValues(i).ivkey || 
         ' Value = ' || pValues(i).ivvalue); 
END LOOP; 

如果您希望收集的一些元素會丟失(這似乎很奇怪,根據您選擇的PL/SQL集合),循環變得有點複雜,因爲你必須調用FIRSTNEXT到遍歷元素。

如果你想創建一個PL/SQL結構更類似於你在Java的地圖,你想要的東西就像在甲骨文

CREATE TYPE map_t 
    AS TABLE OF VARCHAR2(250) 
     INDEX BY VARCHAR2(32) 
+0

感謝賈斯汀的澄清.. – vinod

相關問題