我想在Oracle 10g中将此Java方法创建为PL / SQL函数:
String myMethod(int par1, Map<String, Object> par2);
是否可以将Map(或某些simillar结构)传递给Oracle PL / SQL函数?我必须能够以某种方式从Java调用此函数。
答案 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表(类似于哈希映射)。