【发布时间】:2015-04-16 15:29:41
【问题描述】:
执行 oracle 函数时出现无效名称模式异常。这是返回 sql 类型作为包下存在的记录。如果类型存在于 Types 目录中,则它工作正常。但如果它存在于包目录中,我将无法执行。请帮我解决这个问题。
create or replace PACKAGE pkg_name
TYPE sqlTypeName
IS
RECORD(
firstVariable NUMBER,
secondVariable VARCHAR);
TYPE sqlTypeName_c is TABLE Of sqlTypeName INDEX BY pls_integer;
FUNCTION functionName() RETURN sqlTypeName_c
在java代码中:
Map typeMap = conn.getTypeMap();
typeMap.put("sqlTypeName_c", Array.class);
typeMap.put("sqlTypeName", Struct.class);
CallableStatement clstmt= null;
clstmt = conn.prepareCall("{ ? = call pkg_name.functionName() }");
clstmt.registerOutParameter(1, Types.ARRAY, "pkg_name.sqlTypeName_c");
clstmt.executeUpdate();
Array returnvalue = clstmt.getArray(1);
【问题讨论】:
-
尝试在你的包前面加上schema的名字,比如schema.pkg_name.sqlTypeName_c
-
根据this page,如果您将您的类型名称全部大写,它将得到解决。