2013-08-02 49 views
0

oracle开发人员创建了它们的API - PL/SQL函数,它将RECORD作为参数。问题是,它由参考记录表的其他记录组成。将复杂的java类传递给pl/sql函数

create or replace TYPE QR_OS_REC AS OBJECT (
ICO VARCHAR2(8), 
OS05 DATE, 
OS09 QR_TAB, 
CONSTRUCTOR FUNCTION QR_OS_REC RETURN SELF AS RESULT, 
MEMBER FUNCTION validuj RETURN PLS_INTEGER 
); 

我需要从EJB调用具有这样的IN参数的函数。我阅读了很多教程,但他们都解决了具有标量属性的bean。我应该怎样处理QR_TAB类型的OS09?

谢谢

EDIT1:

我试图嵌套STRUCT与StructDescriptor,但第二STRUCT初始化期间失败(抱歉不同类型的比上述样品)

StructDescriptor keywordStructDesc = StructDescriptor.createDescriptor("SCHEMA.KEYWORD_REC", conn); 
Object[] keywordAttribs = new Object[1]; 
keywordAttribs[0] = record.getKeyword(); 

StructDescriptor osobaStructDesc = StructDescriptor.createDescriptor("SCHEMA.PERSON_REC", conn); 
Object[] osobaAttribs = new Object[5]; 
osobaAttribs[0] = record.getName(); 
osobaAttribs[1] = record.getSurname(); 
osobaAttribs[2] = record.getAge(); 
osobaAttribs[3] = record.isVip(); 
osobaAttribs[4] = new STRUCT(keywordStructDesc, conn, keywordAttribs); 
STRUCT struct = new STRUCT(osobaStructDesc, conn, osobaAttribs); 

java.sql.SQLException: Inconsistent java and sql object types 
    at oracle.sql.StructDescriptor.toOracleArray(StructDescriptor.java:711) 
    at oracle.sql.StructDescriptor.toArray(StructDescriptor.java:1298) 
    at oracle.sql.STRUCT.<init>(STRUCT.java:167) 

编辑2:

我应该传递对象的内容而不是对象本身。

>> keywordAttribs[0] = record.getKeyword(); 
<< keywordAttribs[0] = record.getKeyword().getValue(); 

现在有效。

+0

[从Java传递对象到Oracle过程]的可能重复(http://stackoverflow.com/questions/5207605/pass-object-from-java-to- Oracle的过程) –

回答