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

标签 java oracle stored-procedures

我在 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;

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

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 中它工作正常。提前致谢。

最佳答案

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

关于java - 从 Java 调用 Oracle 类型 TABLE 的存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20099905/

相关文章:

java - Oracle DB表与 View (物化 View )的关系

c# - "No credentials are available in the security package"连接Oracle时

Mysql一次插入插入多行

php - 从 zend 调用 db2 存储过程

java - 使用 Base64 将 BigInteger 转换为 String 并反转结果

java - 在 View 之外时使用 selenium webdriver java 选择单选按钮

java - 尝试使用 Oracle JdbcOdbcDriver 时出现 classNotFoundException

mysql - Neo4j apoc 程序 : mysql configuration an use

java - 当前哪些 Java 代码覆盖率工具可以从测试的角度显示覆盖率?

java - Java 循环迭代器抛出 ConcurrentModificationException