SimpleJDBCall-如何从包中的存储过程中提取表参数

j0pj023g  于 2021-07-23  发布在  Java
关注(0)|答案(0)|浏览(226)

这是我的情况:我试图用两个参数调用一个过程(已在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一起工作。
可以修改过程(甚至可以将其切换到函数),但这不适用于类型。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题