简体   繁体   English

从Java调用Oracle类型TABLE的存储过程

[英]Call stored procedure from java for Oracle type TABLE

I have a stored procedure in Oracle like below. 我在Oracle中有一个存储过程,如下所示。

create or replace TYPE T_EMP_OBJ AS OBJECT (Name varchar2(20), Age CHAR(3 CHAR));

create or replace type T_EMP_REC as table of T_EMP_OBJ;

create or replace PROCEDURE P_EMP (I_NAV_REC IN T_INAV_REC, p_out OUT MY_TYPES_PKG.REFCURSOR) 
AS  ... 
END P_EMP;

I am calling that procedure from java. 我从Java调用该过程。 My code is, 我的代码是

StructDescriptor structDesc = new StructDescriptor("T_EMP_OBJ", oracleConnection);
ArrayDescriptor arrayDesc2 = new ArrayDescriptor("T_EMP_REC", oracleConnection);
    Object[] objType = new Object[2];
    objType[0] = new String("AAA");
    objType[1] = new String("25");
    STRUCT struct = new STRUCT(structDesc, oracleConnection, objType);
    STRUCT[] structs = new STRUCT[1];
    structs[0] = struct;
    oracle.sql.ARRAY array = new oracle.sql.ARRAY(arrayDesc2, oracleConnection, structs);
    OracleCallableStatement statement = (OracleCallableStatement) oracleConnection.prepareCall("CALL P_EMP(?,?)");
    statement.setArray(1, array);
    statement.registerOutParameter(2, oracle.jdbc.OracleTypes.CURSOR);
    statement.execute();
    ResultSet results = ((OracleCallableStatement) statement).getCursor(2);
    while (results.next()) {
         logger.info("NAME==>"+results.getString(1));
         logger.info("AGE===>"+results.getString(2));
    }

Eventhough I am getting records, the value is null. 即使我正在获取记录,该值仍为null。 That means if the output is 2 rows, then the while condition executing and printing null. 这意味着如果输出为2行,则while条件执行并输出null。 In SQL Developer it is working fine. 在SQL Developer中,它工作正常。 Thanks in advance. 提前致谢。

Finally found the answer here . 终于在这里找到了答案。 After including the orai18n.jar in class path, it is working fine. 在类路径中包含orai18n.jar之后,它可以正常工作。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM