2009-08-24 54 views
3

我想創建一個等價的,如果這個Java方法PL/SQL功能的Oracle 10g:如何將Map傳遞給Oracle PL/SQL函數?

String myMethod(int par1, Map<String, Object> par2); 

是否有可能通過一個地圖(或一些呈三角結構)到Oracle PL/SQL函數?我必須能夠以某種方式從Java調用此函數。

回答

5

有關於將Java對象傳遞給Oracle的interesting discussion on AskTom。特別是國際海事組織,這個優秀的advice from Tom Kyte

我,我會JUSE

創建全局臨時表GTT( FNAME VARCHAR2(20),L-NAME VARCHAR2(20) )上提交刪除行;

和具有Java應用程序BATCH插入 到這一點,然後調用該過程, 程序只是使用的是表 數據作爲其輸入。

的是,在我的經驗,是之間的最小 量的代碼「我」和「被 完成」

即:只使用一組關係的臨時表,寫進去Java和讓pl/sql從表中讀取。它可能幾乎與傳遞對象一樣高效,並且它將在實現和調試時更輕鬆。

+0

使用臨時表也正是我輸入的內容/ +:你擊敗了我。 還有一種使用內置函數做的乏味方法.. – Everyone 2009-08-24 13:28:04

1

Down this path謊言是恐怖和絕望。我已經看過了。

+0

這是一個巨大的誇大。我一直在處理PL/SQL和Java對象之間的JPublisher轉換,很容易被以前沒有使用過的開發人員找到。 – 2009-08-24 14:22:57

+0

+1的配方:) – Seki 2012-08-29 15:51:44

1

閱讀this article on JDBC interface for Oracle collections first

基本上對複雜的對象,你應該使用JPublisher自動生成Java類和樣板代碼。否則,一個簡單的oracle.sql.ARRAY應該做。

請注意,您還需要創建匹配的PL/SQL對象,請閱讀this article。您不需要實施任何MEMBER方法來在Java和Oracle之間傳遞數據。


編輯1:不幸的是,PL/SQL沒有像Java這樣的Map概念。但是,您可以將Map建模爲特殊(Key,Value)對象或簡單類的索引表(有點像哈希映射)。

+0

如果我理解正確,這是將元素集合傳遞給函數的方法。我需要的是通過一張地圖。我不知道這張地圖上的關鍵字或條目數量。這是可行的嗎? – 2009-08-24 16:22:59