【问题标题】:Exception in thread "main" java.sql.SQLException: invalid name pattern: pakagename.sqlTypename线程“主”java.sql.SQLException 中的异常:无效的名称模式:pakagename.sqlTypename
【发布时间】: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,如果您将您的类型名称全部大写,它将得到解决。

标签: java oracle


【解决方案1】:

这将不起作用,因为类型是在包中声明的。您需要在架构中声明 sqlTypeName TYPE。

以下是涉及此问题的一些问题 - Java- PLSQL- Call Table of records from java

Fetch Oracle table type from stored procedure using JDBC

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多