执行oracle函数时出现无效的名称模式异常。这是返回的sql类型作为记录,该记录存在于包中。如果类型存在于“类型”目录中,则说明工作正常。但是如果包目录中存在它,我将无法执行。请帮助我。

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);

最佳答案

因为在包中声明了类型,所以这将不起作用。您将需要在模式内部声明sqlTypeName TYPE。

以下是一些与此问题相关的问题-
Java- PLSQL- Call Table of records from java

Fetch Oracle table type from stored procedure using JDBC

08-05 07:55