java,hibernate调用Oracle函数异常

dfg001 2009-06-16 02:39:08
我通过hibernate的调用Oracle函数时总是有异常

异常消息:
java.sql.SQLException: Incorrectly set or registered parameters.
at oracle.jdbc.driver.OracleSql.setNamedParameters(OracleSql.java:211)

java代码:

//获得hibernate连接
Connection conn =session.connection();

String stringQueny = " {:varRef= call PKG_IMPORT_RCF.F_RCFDATA_PREPROCESS(:FLIGHTNO" +
", :CITYCODEORIGIN" +
", :AWBNO" +
", :MON" +
", :DD" +
", :SEQNO) } ";

CallableStatement cstmt = conn.prepareCall(stringQueny);

//注册返回参数
cstmt.registerOutParameter("varRef", oracle.jdbc.OracleTypes.VARCHAR);
//设置参数
cstmt.setString("FLIGHTNO", orgImportRcf.getFltId());
cstmt.setString("CITYCODEORIGIN", orgImportRcf.getCityCodeOrigin());
cstmt.setString("AWBNO", orgImportRcf.getAwbNo());
cstmt.setString("MON", orgImportRcf.getMonthScheduledArrival());
cstmt.setString("DD", orgImportRcf.getDayScheduledArrival());
cstmt.setString("SEQNO", Long.toString(orgImportRcf.getSequenceNo()));

cstmt.execute();


Oracle函数

FUNCTION F_RCFDATA_PREPROCESS(FLIGHTNO NVARCHAR2,
CITYCODEORIGIN IN NVARCHAR2,
AWBNO NVARCHAR2,
MON NVARCHAR2,
DD NVARCHAR2,
SEQNO NVARCHAR2) return varchar2 is
varRef varchar2(1):='0';

...全文
191 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
dfg001 2009-06-16
  • 打赏
  • 举报
回复
感谢mouse的帮助和 xnjnmn提供的资料
问题以解决 就是不支持使用命名参数
xnjnmn 2009-06-16
  • 打赏
  • 举报
回复
Exception:可能不支持使用命名参数

看看这个很详细了

http://www.blogjava.net/amigoxie/archive/2007/08/15/136828.html
kbyst 2009-06-16
  • 打赏
  • 举报
回复
加上begin,end试试

conn.prepareCall("BEGIN :varRef=...... END;");
M0USE00 2009-06-16
  • 打赏
  • 举报
回复
String stringQueny = " {?= call PKG_IMPORT_RCF.F_RCFDATA_PREPROCESS(?, ?, ?, ?, ?, ?) } ";

CallableStatement cstmt = conn.prepareCall(stringQueny);

//注册返回参数
cstmt.registerOutParameter( 1, oracle.jdbc.OracleTypes.VARCHAR);
//设置参数
cstmt.setString( 2, orgImportRcf.getFltId());
cstmt.setString( 3, orgImportRcf.getCityCodeOrigin());
cstmt.setString( 4, orgImportRcf.getAwbNo());
cstmt.setString( 5, orgImportRcf.getMonthScheduledArrival());
cstmt.setString( 6, orgImportRcf.getDayScheduledArrival());
cstmt.setString( 7, Long.toString(orgImportRcf.getSequenceNo()));

这里用“?”作为参数占位符,是 JDBC 查询数据库的方法,不能肯定是否能成功。试试吧
dfg001 2009-06-16
  • 打赏
  • 举报
回复
现在吧参数都换成 ? 表示 提示异常

java.sql.SQLException: ORA-06502: PL/SQL: 数字或值错误 : 字符串缓冲区太小
ORA-06512: 在 "CACUSTOMS.PKG_IMPORT_RCF", line 23
ORA-06512: 在 line 1
dfg001 2009-06-16
  • 打赏
  • 举报
回复
排版没弄好,麻烦大家了
zhufenghappy 2009-06-16
  • 打赏
  • 举报
回复

62,630

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧