从java为Oracle类型TABLE调用存储过程 [英] Call stored procedure from java for Oracle type TABLE

查看:579
本文介绍了从java为Oracle类型TABLE调用存储过程的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在Oracle中有一个存储过程,如下所示。

I have a stored procedure in Oracle like below.

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;

我从java调用该程序。我的代码是,

I am calling that procedure from 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));
    }

尽管我收到记录,但该值为空。这意味着如果输出是2行,则while条件执行并打印null。在SQL Developer中,它工作正常。在此先感谢。

Eventhough I am getting records, the value is null. That means if the output is 2 rows, then the while condition executing and printing null. In SQL Developer it is working fine. Thanks in advance.

推荐答案

终于找到了答案此处。在类路径中包含orai18n.jar后,它工作正常。

Finally found the answer here. After including the orai18n.jar in class path, it is working fine.

这篇关于从java为Oracle类型TABLE调用存储过程的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆