java - 在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
有人可以帮我解决这个问题吗?
解决方案
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();
推荐阅读
- javascript - 我想在 onpopstate 事件上写一些代码而不刷新页面
- timeout - Hystrix 默认超时不起作用
- javascript - Redux Reducer 返回一个 [Object Object] ,但是我想要字符串?
- java - 没有可用于从类型转换的类型转换器:<
> 到所需的类型:java.io.InputStream with value - hyperledger-fabric - Hyperledger Composer 中 Channels 和 Permission.acl 的区别
- docker - VSTS 托管构建/Docker:“令牌 '&&' 在此版本中不是有效的语句分隔符。”
- android - 关于安卓存储容量的问题
- real-time - Alsa:snd_pci_readi() 记录
- java - 为什么浮点数准确而算术运算不准确?
- spring - 处理请求时发生 PSQLException