2012-10-04 19 views
1

調用在Oracle中關聯數組的過程我有一個存儲過程是這樣的:如何從Java

TYPE ref_cursor IS REF CURSOR;  
TYPE parametro IS RECORD (
    nombre  VARCHAR2(50), -- I want to remove this value and make it the key of the table instead. 
    valor  VARCHAR2(32000), 
    tipo  VARCHAR2(1), 
    sentencia VARCHAR2(32000) 
); 
TYPE parametros IS TABLE OF parametro INDEX BY VARCHAR2(50); 

PROCEDURE build_cursor (
    params IN parametros 
    results OUT ref_cursor 
); 

而且從build_cursor過程中,我希望能夠訪問到的內容表的關鍵。

parametros('key'); 

不過,我不知道如何建立從Java關聯數組,我所看到的只是簡單的數組的例子,即:TYPE parametros IS TABLE OF parametro;

我怎樣才能從Java調用的build_cursor程序?

我讀到這個:How to call oracle stored procedure which include user-defined type in java?但我不知道我的創建關聯數組的java例子有什麼變化; 我在哪裏放置當前元素的Key?

這是Oracle的一項工作測試。

params('key').nombre  := 'key'; -- I want this to be removed because it's the key. 
params('key').valor   := 'Roger'; 
params('key').tipo   := 'V'; 
params('key').sentencia  := 'Something'; 
-- Call the procedure 
pk_sql_utils.build_cursor(
    params => params, 
    results => :results 
); 

回答

2

Only SQL objects can be referenced by jdbc, not PL/SQL objects。關聯數組是PL/SQL對象,因此您將無法從jdbc「看到」它們。

您可以在SQL對象中使用包裝器PL/SQL函數(關聯數組類似於一個嵌套索引表和一個嵌套表值表)。

您也可以使用臨時表:jdbc批處理插入到臨時表中,包裝過程(或PL/SQL塊)讀取臨時表並調用您的過程。

+0

我最終做了將嵌套錶轉換爲關聯數組的封裝函數,感謝您的幫助。 – Roger