PLSQL 包过程声明
TYPE custom_type IS TABLE OF single_rec_type;
TYPE single_rec_type IS RECORD(
//id, name etc
)
Problem:
但custom_type没有直接的Java类型表示[比如OracleTypes.CLOB
or OracleTypes.CURSOR
]
因为 custom_type 是 PLSQL 类型而不是 SQL 类型。
当我用谷歌搜索时,我发现了这两个选项:
来代表它,
(1) 从过程(或包装器 PLSQL 函数)创建一个 SQL 类型,我们可以从 java 绑定它。
参考:java - 在oracle存储过程中传递数组
(2) 将输出参数注册为我们的类型,并使用 SQLData 对象来表示一条记录。
参考:如何在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,而不是在包内声明。
或者通过创建公共同义词并给予资助。
Question- 关于第二种方法,在架构级别声明任何自定义类型是否正确?