在我的Oracle数据库中,我输入
CREATE OR REPLACE TYPE DOSSIER_RESULT AS OBJECT
(
id number,
user_id number
)
此对象的集合
CREATE OR REPLACE TYPE DOSSIER_RESULTS_ARRAY AS TABLE OF DOSSIER_RESULT
还有一个具有最后一个类型的OUT参数的过程
procedure get_dossier(i_search_mode in number,
i_person_id in number,
i_case_num in varchar2,
i_auto_num in varchar2,
o_dossier_results_array out dossier_results_array)
在Java代码中,我有
public static void getDossierTest(Dossier obj) {
LOGGER.info("------obj: " + obj);
Connection conn = null;
CallableStatement callableStatement = null;
ResultSet rs = null;
try {
conn = DbConnection.getConnection(DbConnection.CONN_SU);
Map map = conn.getTypeMap();
map.put("DOSSIER_RESULT", Class.forName("data.DossierSearchResultsModel"));
conn.setTypeMap(map);
callableStatement = conn.prepareCall("{call pkg_1av_test.get_dossier(?,?,?,?,?)}");
callableStatement.setInt(1, 1);
callableStatement.setLong(2, obj.getId() == null ? 0 : obj.getId());
callableStatement.setString(3, obj.getNum() == null ? "" : obj.getNum());
callableStatement.setString(4, obj.getGrnz() == null ? "" : obj.getGrnz());
callableStatement.registerOutParameter(5, java.sql.Types.ARRAY);
callableStatement.execute();
Array array = callableStatement.getArray(5);
for (Object item : (Object[]) array.getArray()) {
if (item instanceof DossierSearchResultsModel) {
LOGGER.info("------------Got that: " + item.toString());
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
但是在
callableStatement.registerOutParameter(5, java.sql.Types.ARRAY);
我收到以下错误:
ORA-03115: An unsupported network data type or data representation
请帮忙!我究竟做错了什么? 我需要使用Java代码从Oracle存储过程中获取该数组(或collection)
和模型类
package data;
import java.sql.SQLData;
import java.sql.SQLException;
import java.sql.SQLInput;
import java.sql.SQLOutput;
public class DossierSearchResultsModel implements SQLData {
private Long id;
private Long original_id;
private Long parent_id;
private Integer av_system_id;
private Integer is_active;
private String title;
private Integer org_id;
private String org_code;
private Integer card_type;
private Long user_id;
@Override
public String getSQLTypeName() throws SQLException {
System.out.println("--------getSQLTypeName");
return "DOSSIER_RESULT";
}
@Override
public void readSQL(SQLInput stream, String typeName) throws SQLException {
}
@Override
public void writeSQL(SQLOutput stream) throws SQLException {
System.out.println("-----writeSQL");
stream.writeLong(getId());
stream.writeLong(getOriginal_id());
stream.writeLong(getParent_id());
stream.writeInt(getAv_system_id());
stream.writeInt(getIs_active());
stream.writeString(getTitle());
stream.writeInt(getOrg_id());
stream.writeString(getOrg_code());
stream.writeInt(getCard_type());
stream.writeLong(getUser_id());
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Long getOriginal_id() {
return original_id;
}
public void setOriginal_id(Long original_id) {
this.original_id = original_id;
}
public Long getParent_id() {
return parent_id;
}
public void setParent_id(Long parent_id) {
this.parent_id = parent_id;
}
public Integer getAv_system_id() {
return av_system_id;
}
public void setAv_system_id(Integer av_system_id) {
this.av_system_id = av_system_id;
}
public Integer getIs_active() {
return is_active;
}
public void setIs_active(Integer is_active) {
this.is_active = is_active;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public Integer getOrg_id() {
return org_id;
}
public void setOrg_id(Integer org_id) {
this.org_id = org_id;
}
public String getOrg_code() {
return org_code;
}
public void setOrg_code(String org_code) {
this.org_code = org_code;
}
public Integer getCard_type() {
return card_type;
}
public void setCard_type(Integer card_type) {
this.card_type = card_type;
}
public Long getUser_id() {
return user_id;
}
public void setUser_id(Long user_id) {
this.user_id = user_id;
}
@Override
public String toString() {
return "DossierSearchResultsModel{" +
"id=" + id +
", original_id=" + original_id +
", parent_id=" + parent_id +
", av_system_id=" + av_system_id +
", is_active=" + is_active +
", title='" + title + '\'' +
", org_id=" + org_id +
", org_code='" + org_code + '\'' +
", card_type=" + card_type +
", user_id=" + user_id +
'}';
}
}