【发布时间】:2015-07-26 04:52:33
【问题描述】:
Oracle 数据库管理员为我提供了一个存储过程。它采用 (IN) varchar 并提供 RECORD 类型。记录类型如下:
TYPE BAL_RECORD_TYPE IS RECORD
(
ac_no VARCHAR2 (50),
Account_type VARCHAR2 (50),
ac_status VARCHAR2 (10),
cur_code VARCHAR2 (5),
available_balance NUMBER
);
我已经按照下面的链接在我的 jdbc 应用程序中支持 RECORD 类型。 http://betteratoracle.com/posts/31-passing-record-types-between-oracle-and-java
从上面的文章我改变了
stmt.registerOutParameter(2, OracleTypes.STRUCT, "RECTYPE");
到
stmt.registerOutParameter(2, OracleTypes.STRUCT, "BAL_RECORD_TYPE");
因为 BAL_RECORD_TYPE 是我的记录名称。
但我收到以下错误:
invalid name pattern: APPADMIN.BAL_RECORD_TYPE
这里 APPADMIN 是数据库的用户名。我不知道它如何与 OUT 参数绑定。
我的问题是:
我可以遵循任何好的示例代码来支持 RECORD 类型的 oracle 吗?
错误的可能原因是什么(无效的名称模式:APPADMIN.BAL_RECORD_TYPE)?
加法:
- 对于我的 oracle 数据库管理员来说,实现 CURSOR 类型而不是 RECORD 类型有多难?
【问题讨论】:
-
那篇文章的标题具有误导性。模式级对象类型和 PL/SQL 定义的记录类型之间存在显着差异。据我所知,您不能将 PL/SQL 类型用于 STRUCT,即使您将定义它的包名称作为名称的一部分 (
APPADMIN.PKG.BAL_RECORD_TYPE),您也只能使用模式级类型.. -
您对更改文章标题有什么建议吗?
-
“传递对象类型...”?我可以理解为什么我认为可能会使用该术语;但它们有特定的含义,并且拥有一个名为“recType”的对象本身就令人困惑。
标签: java oracle jdbc oracle11g oracle-sqldeveloper