以下是本人的一个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;
}
(在入参数组转换成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;
}
解决方案 »
- 小弟只会这些可以找工作了吗
- struts2使用jasperreport如何使用多个datasource
- 请问哪位大侠有ORMapping基础文档?
- JSP Template请教
- s.split 提示错误没有为类型String定义split(String )请问这是怎么回事啊
- CMP问题:findAll方法性能问题?
- ssh + quartz 定时任务为什么一直刷新一个没有包含在定时任务里的方法(最后一次访问的链接)
- 系统上传图片提示写文件失败,可以读取查看图片。请高手帮忙分析原因。
- 2013年毕业去外包公司一般开多少薪资
- 项目启动报这样的错误请问那个大哥知道什么问题
- servlet中两个重要的组件有什么?分别做什么来用?这是今天的一个面试题
- 请教各位前辈,拜托了
请参考《JAVA 存储过程 DB2 SQLSTATE=42884 》
请参考《JAVA 存储过程 DB2 SQLSTATE=42884 》