首页 > 解决方案 > 在java中读取oracle Sql函数时出错

问题描述

我想使用 java 调用 Oracle Sql 函数。但我收到错误

java.sql.SQLException:索引处缺少 IN 或 OUT 参数:: 4

任何机构都可以帮我解决这个问题吗?

下面是读取 Oracle SQL 函数的语句。

DECLARE
  ID VARCHAR2(10);
  date1 DATE;
  output PL/SQL RECORD;
BEGIN
 ID := '1234';
  date1  := to_date('2018-05-15','yyyy-MM-dd');
  output := Function1(
    ID   => I_EMPL_ID,
    date1  => I_BALANCE_DATE
  );
END;

下面是我在java中用于调用函数的代码:

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd-MMM-yy");

 Date now = new java.sql.Date(simpleDateFormat.parse("17-MAY-18").getTime());

 CallableStatement cstmt = con.prepareCall("{? = call Function1(?,?,?)}");

               cstmt.setString(1, "1234");
               cstmt.setDate(2, now);
               cstmt.registerOutParameter(3, Types.ROWID);
               cstmt.execute();

当我执行此代码时,我收到以下错误:

java.sql.SQLException:索引处缺少 IN 或 OUT 参数:: 4

有人可以帮我解决这个问题吗?

标签: javasqloracle

解决方案


CallableStatement cstmt = con.prepareCall("{? = call Function1(?,?,?)}");

有 4 个?绑定参数。

                                            ^                  ^ ^ ^
                                            1                  2 3 4

第一个是函数的返回值,第二个、第三个和第四个是函数的参数。

cstmt.registerOutParameter( 1, Types.ROWID );
cstmt.setString( 2, "1234" );
cstmt.setDate(   3, now );
cstmt.setInteger(4, 0 );       // Or whatever type the 3rd function argument has.
cstmt.execute();

推荐阅读