以下是本人的一个J2EE项目中一个DAO中的方法,作用是调用ORACLE存储过程,入参是一个String数组,我在后台存储过程中用了自定义的类型来接受,但总是报内部错误,
(在入参数组转换成java.sql.Types.ARRAY报错)
----------------------------  数据库部份----------------------------
create table study_array_nick_tab   
(   
  name varchar2(200)   
);   
  
create or replace type study_array_nick_list is VARRAY(1000) of varchar2(200);  create or replace procedure study_array_nick(in_array in study_array_nick_list,aa out char) is  
  v_i number;   
begin  
  for v_i in 1 .. in_array.count loop   
    insert into study_array_nick_tab(name) values(in_array(v_i));   
  end loop;     commit;   
    aa:='1';
exception when others then  
 rollback;  
   aa:='0'; 
 raise_application_error('20999','测试错误');   
end study_array_nick;  
------------------------------------JAVA部份----------------------------------------------------public String bulkinsert_StoredProcedureExecute(String[] param1) throws Exception{
BulkInsertStoredProcedure proc = new BulkInsertStoredProcedure(getJdbcTemplate().getDataSource()) ;
 Map results = proc.execute(param1);
String re_Sring = printflag_1(results);
return re_Sring.trim();
} private class BulkInsertStoredProcedure extends StoredProcedure {
public static final String SQL = "study_array_nick";
public BulkInsertStoredProcedure(DataSource ds) {
setDataSource(ds);
setSql(SQL);
setFunction(false);
declareParameter(new SqlParameter("IN_PROPERTIES", java.sql.Types.ARRAY,"study_array_nick_list"));
declareParameter(new SqlOutParameter("ob_status", OracleTypes.CHAR,
new RowMapper() {
public Object mapRow(ResultSet rs, int rowNum)
throws SQLException {
String vo = rs.getString(1);
return vo;
}
}));
compile();
}
 public Map execute(String[] param1) {
        Map inputs = new HashMap();
        inputs.put("IN_PROPERTIES", param1);
    return super.execute(inputs);
      } 
}
private String printflag_1(Map r) {
String re_status = null;
for (Iterator it = r.entrySet().iterator(); it.hasNext();) {
Map.Entry entry = (Map.Entry) it.next();
re_status = (String) entry.getValue();
}
return re_status;
}