如何将Map传递给Oracle PL / SQL函数?

时间:2009-08-24 12:44:43

标签: java oracle data-structures

我想在Oracle 10g中将此Java方法创建为PL / SQL函数:

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

是否可以将Map(或某些simillar结构)传递给Oracle PL / SQL函数?我必须能够以某种方式从Java调用此函数。

3 个答案:

答案 0 :(得分:5)

将Java对象传递给Oracle有一个interesting discussion on AskTom。特别是IMO,这是一个很好的advice from Tom Kyte

  

我,我会juse

     

创建全局临时表gtt(   fname varchar2(20),lname varchar2(20)   )on commit delete rows;

     

并让java app BATCH插入   进入这个,然后调用该程序,   该过程只使用该表   数据作为其输入。

     根据我的经验,这是最少的   “我”和“存在”之间的代码量   完成“

i-e:只使用一组关系临时表,用java写入,并从表中读取pl / sql。它可能几乎同样有效(如传递对象),并且它将更容易实现和调试。

答案 1 :(得分:2)

Down this path充满恐惧和绝望。我已经看过了。

答案 2 :(得分: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)对象,或者将其建模为简单类的Index-by表(类似于哈希映射)。