【问题标题】:Invalid Pattern name; Oracle Stored Procedure Input Parameter无效的模式名称; Oracle 存储过程输入参数
【发布时间】:2014-07-31 17:07:11
【问题描述】:

我有一个 JDBC 程序,它使用 CallabaleStatement 对象来设置和注册存储过程的 IN/OUT 参数。

我使用了ArrayDescriptors 和oracle.sql.ARRAY 对象并将其设置为用户定义数据类型的输入参数。

用户定义的数据类型是TYPE CharArray1 IS TABLE OF CHAR(7)。在执行错误期间,我收到“无效的模式名称我的对象”。

我通过以下方式设置输入:

ArrayDescriptor ad = ArrayDescriptor.createDescriptor("<package-name>.CharArray1", conn);
ARRAY arr = new ARRAY(ad, conn, new String[]{"1"});
callableStatement.setArray(3, arr );

其中conn 是我的Connection 对象。我已经检查了数据类型CharArray1package-name 的执行权限。我已删除包名并检查,错误仍然相同。

提前致谢。请告诉我我在这里做错了什么。

【问题讨论】:

    标签: sql oracle stored-procedures jdbc plsql


    【解决方案1】:

    尝试将CHAR 切换为 VARCHAR2(7 char)

    【讨论】:

    • 我的功能需要它是table of char(7)。我无法更改数据库。我需要让 Java 代码跟上。
    • 但是你只发送了1个字节,尝试添加6个空格。当您完成项目阅读一些 Thomas Kyte 书籍时,他希望我们不要使用 CHAR 类型而不是 VARCHAR2 类型。没有优势。
    • 不一定每次都加1。例如,字符数可以是“12345”。
    • 无论如何你必须注意你传递了 7 个字节(不是字符,一个字符可以占用几个字节)并在必要时添加空格。
    • 同意我会照顾的。得出的值肯定不会超过 7 个字节。但是,我觉得这不是这里的问题。我想知道,我将参数传递给 CallableStatement 的方式是否有任何变化。
    猜你喜欢
    • 2022-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-26
    相关资源
    最近更新 更多