2012-12-20 25 views
0

我想从我的hibernate类传递一个用户定义的对象,并将它传递到一个存储过程,该存储过程读取此对象列表并执行处理。我怎么能这样做?将用户定义的列表从休眠传递到oracle存储过程

该类如下。

public class ExcelListenerBean { 
    private int id; 
    private String shortName; 
    private String fmrCusip; 
    private Double incorrectTrdShares; 
    private Double incorrectTrdPrice; 
    private String incorrectTrdBuySell; 
    private Double incorrectTrdCommRate; 
    private Double incorrectTrdCommission; 
    private Double incorrectTrdFees; 
    private Double incorrectTrdNet; 
    private Double correctionTrdShares; 
    private Double correctionTrdPrice; 
    private String correctionTrdBuySell; 
    private Double correctionTrdCommRate; 
    private Double correctionTrdCommission; 
    private Double correctionTrdFees; 
    private Double correctionTrdNet; 
    private String currency; 
    private String fx; 
    private Double netUSD; 
    private String notes; 
} 

任何一个可以请让我知道如何通过ExcelListenerBean对象的清单草案的程序,如何循环,并将它们保存到一个表。

+0

任何人都可以请给我的代码片段来概述存储过程,基本上遍历TableOfExcelListenerBean对象的数组。我对SP很新,并且在写一篇文章时遇到麻烦。 – sandy

回答

0
  1. 创建对象类型,说MyType is OBJECT ....在Oracle中有你需要
  2. 创建集合类型的所有字段,TableOfMyObject IS TABLE OF MyObjectType
  3. 创建的过程,需要TableOfMyObject作为参数。

您可以使用集合变量在SQL语句中的存储过程像 SELECT * FROM TABLE(collection_variable)

我也一样,但一伙的最大的挑战将其从应用程序中使用Hibernate的通话 - 我终于找到了办法(http://stackoverflow.com/questions/10819104/call-oracle-stored-procedure-from-java-app-using-hibernate-and-c3p0-connection-p)。

更新 可以从Toad运行的SQL。

set serveroutput on; -- for debugging, 
-- it makes sense if your procedure outputs anything 
declare my_list TableOfMyObject := TableOfMyObject(); 
begin 
    my_list.extend; 
    my_list(1) := MyType([MyType constructor parameters]); 

    my_list.extend; 
    my_list(2) := MyType([MyType constructor parameters]); 
    your_procedure(my_list); 
end; 
+0

你可以让我知道如何执行将TableOfMyObject作为参数从TOAD或SQL + – sandy

+0

@sandy执行的过程:请参阅更新。该代码将2个元素放入收集和调用过程中。 – a1ex07

相关问题