这是我的情况:我试图用两个参数调用一个过程(已在pl/sql包中声明):
PROCEDURE p_process_docs (
p_cod IN NUMBER,
p_doc_t OUT O_DOC_T
)
文件定义如下:
create or replace TYPE O_DOC_T FORCE AS TABLE OF O_DOC_S;
博士的定义是这样的:
create or replace TYPE O_DOC_S FORCE AS OBJECT
(
COD_DOC_TYPE VARCHAR2(3),
COD_DOCUMENT VARCHAR2(20),
...
,CONSTRUCTOR FUNCTION O_DOC_S(
P_DOC_TYPE VARCHAR2,
P_DOCUMENT VARCHAR2,
...
);
在SimpleJDBCall中,我试图读取第二个参数,因此我准备了以下内容:
private List<O_Doc_S> processDocs(final String cod) {
List<O_Doc_S> result = null;
RowMapper<O_Doc_S> rm = new ParameterizedRowMapper<O_Doc_S>() {
@Override
public O_Doc_SmapRow(ResultSet rs, int rowNum) throws SQLException {
O_Doc_Sresult = new O_Doc_S();
result.setCod_doc_type(rs.getInt("cod_doc_type"));
result.setCod_document(rs.getString("cod_tipo_docum"));
// Rest of mappings
return result;
}
};
SimpleJdbcCall simpleJdbcCall = new SimpleJdbcCall(dataSource)
.withCatalogName(CATALOG_NAME)
.withProcedureName("p_process_docs ")
.useInParameterNames("p_cod")
.returningResultSet("p_doc_t", rm);;
Map<String, Object> inParamMap = new HashMap<String, Object>();
inParamMap.put("p_cod", Integer.valueOf(cod));
SqlParameterSource in = new MapSqlParameterSource(inParamMap);
try {
Map<String, Object> out = simpleJdbcCall.execute(in);
// Iterate and store in result
logger.info("Number of values received: ");
} catch (Exception e) {
logger.error("Error");
result = new ArrayList<O_Doc_S>();
}
return result;
}
但我在执行行中遇到了一个错误:
java.sql.SQLException: ORA-06550: line 1, column 7:
PLS-00306: wrong number or types of arguments in call to 'p_process_docs '
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
我尝试了许多更改(声明in/out参数、切换到函数、删除/添加参数),结果都出现了错误(最常见的是“错误的参数数量或类型”)。我很确定从pl/sql过程/函数中获取记录列表是可能的,但是我不知道如何正确地完成它。我所找到的只是关于如何最多读取一个基本值的解释。我需要的要复杂得多。
有什么建议吗?此外,解决方案必须满足以下两个条件:
必须返回值列表/表。
它必须与JDK1.6一起工作。
可以修改过程(甚至可以将其切换到函数),但这不适用于类型。
暂无答案!
目前还没有任何答案,快来回答吧!