【发布时间】:2014-10-04 21:09:53
【问题描述】:
PLSQL 包过程声明
TYPE custom_type IS TABLE OF single_rec_type;
TYPE single_rec_type IS RECORD(
//id, name etc
)
问题:
但是 custom_type 没有直接的 Java 类型表示 [如 OracleTypes.CLOB 或 OracleTypes.CURSOR]
因为 custom_type 是 PLSQL 类型而不是 SQL 类型。
当我用谷歌搜索时,我遇到了以下两个选项: 为了表示它,
(1) 从我们可以从 java 绑定的过程(或包装 PLSQL 函数)创建一个 SQL TYPE。 参考:java - passing array in oracle stored procedure
(2) 将输出参数注册到我们的类型中,并使用 SQLData 对象来表示一条记录。 参考:Howto get a table as a out parameter in oracle
callableStatement.registerOutParameter(8, OracleTypes.ARRAY, "custom_type");
执行此操作时,我收到错误:
java.sql.SQLException: invalid name pattern: MYDB_OWNER.custom_type
at oracle.jdbc.oracore.OracleTypeADT.initMetadata(OracleTypeADT.java:554)
at oracle.jdbc.oracore.OracleTypeADT.init(OracleTypeADT.java:471)
一个建议是在模式中声明 custom_type TYPE,而不是在包中声明。 或通过创建公共同义词并给予资助。
问题 - 关于第二种方法,在架构级别声明任何自定义类型是否正确?
【问题讨论】: