java - java中读取oracle Sql函数出错

标签 java sql oracle

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

java.sql.SQLException: Missing IN or OUT parameter at index:: 4

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

下面是读取Oracle SQL Function的语句。

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: Missing IN or OUT parameter at index:: 4

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

最佳答案

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

有 4 个 ? 绑定(bind)参数。

                                            ^                  ^ ^ ^
                                            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();

关于java - java中读取oracle Sql函数出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50406473/

相关文章:

c++ - SQL 解析器库 - 从查询中获取表名

Oracle:极大地提高查询性能

java - 使用中断方法终止线程

java - 从自定义类启动Activity

java - 是否允许在一个 Criteria 内多次使用相同的 DetachedCriteria?

sql - 具有多个外部约束的 ALTER TABLE 的铁路图不正确?

sql - oracle,添加子查询时缺少右括号

java - 在 Android 上使用 iPOJO 启动 apache-felix 4.2.1

sql获取信息,但顺序错误

sql - 带有 SQL 注入(inject)保护的简单查询比没有的要花费更长的时间