【发布时间】:2016-10-12 13:46:29
【问题描述】:
我正在尝试将关联数组返回给 java,但遇到异常。我正在使用专有的持久层,所以我无法发布我的代码,但是在谷歌上搜索时,我发现了一些与我所拥有的完全相似的东西:
============================
create or replace PACKAGE testLookAside as
type AssocArry IS TABLE OF varchar(30) INDEX BY VARCHAR(30);
function lookupMasterData return AssocArry;
end testLookAside;
/
create or replace PACKAGE BODY testLookAside as
function lookupMasterData_ return AssocArry as
retval AssocArry;
begin
retval('1') := '1';
retval('2') := '2';
retval('3') := '3';
retval('4') := '4';
return retval;
end lookupMasterData_;
/
function lookupMasterData return AssocArry as
retVal AssocArry;
begin
retVal := lookupMasterData_();
return retVal;
end lookupMasterData;
end testLookAside;
Statement s = null;;
Class.forName("oracle.jdbc.driver.OracleDriver");
// set up connection here....
s=con.createStatement();
//String query = "begin ? := DEVELOPER.testLookAside.lookupMasterData(); end;";
String query = "{? = call DEVELOPER.testLookAside.lookupMasterData()}";
OracleCallableStatement stmt = (OracleCallableStatement)con.prepareCall(query);
// register the type of the out param - an Oracle specific type
stmt.registerIndexTableOutParameter(1, 30, OracleTypes.VARCHAR, 30);
stmt.execute();
而且我不断收到如下错误:
Exception in thread "main" java.sql.SQLException: ORA-06550: line 1, column 13:
PLS-00382: expression is of wrong type
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
谁能解释从 jdbc 访问该数据类型的正确方法是什么?
另外,如果我的自定义类型像这样使用数字和二进制整数,我该怎么办:
type AssocArry IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
我从上周开始尝试解决这个问题,并查看了许多线程但没有结果。
谢谢。
【问题讨论】:
-
您使用的是哪个版本的 Oracle 数据库和 Oracle JDBC 驱动程序?
Oracle 12c JDBC Developer guide这里有一个关于关联数组的章节:docs.oracle.com/database/121/JJDBC/oraint.htm#JJDBC28179 但 Oracle 11.2 文档没有在任何地方提到它们,可能是旧版本的数据库和驱动程序根本不支持它们。
标签: java oracle jdbc plsql associative-array