使用游标作为输入从Java应用程序调用Oracle存储过程

时间:2018-03-13 20:26:02

标签: java spring spring-mvc

我有一个类似

的程序
PROCEDURE some_proc (cur_in            IN     req_curtype,
                 id_out           OUT NUMBER,
                 str_out      OUT VARCHAR)
    IS

然后它会做一些选择并返回数字和一些字符串。

我试着这样称呼:

    SimpleJdbcCall simpleJdbcCall = new SimpleJdbcCall(ds)
        .withSchemaName("SCHEMA")
        .withCatalogName("PKG")
        .withProcedureName("some_proc");

    SqlParameterSource in = new MapSqlParameterSource()
        .addValue("cur_in", "test");

    Map simpleJdbcCallResult = simpleJdbcCall.execute(in);
    System.out.println(simpleJdbcCallResult);

我不知道如何传入实际上是REF CURSOR的“req_curtype”。我见过java.sql.CallableStatement和java.sql.Ref,但我不知道如何将它们绑定到任何具体的值。

当我在那里用字符串运行时,我得到一个像

这样的错误
Error : 6550, Position : 6, Sql = BEGIN OMR.OMR_PKG.TAKE_N_PROC_REQUEST_CSV(:1 , :2 , :3 ); END;, OriginalSql = {call SCHEMA.PKG.SOME_PROC(?, ?, ?)}, Error Msg = ORA-06550: line 1, column 7:
PLS-00306: wrong number or types of arguments in call to 'SOME_PROC'
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored

好像它想要我指定输入,即使是“out”参数。我认为这些将被放在生成的“地图”中,作为它们所包含的任何值的关键。

0 个答案:

没有答案