java statement 存储过程_java调用oracle存储过程的问题

我用的数据库是oracle

存储过程如下

CREATE OR REPLACE PROCEDURE "SP_WFSHWLUSERINFILE"

( Billid IN integer,

Resulti OUT integer)

AS

BEGIN

.......

COMMIT;

Resulti:=0;

EXCEPTION

WHEN OTHERS THEN

ROLLBACK;

Resulti:=-1;

END;

java程序部分如下

int billid=1;

CallableStatement aStatement=null;

String SqlString="{?=call SP_WFSHWLUSERINFILE(?)}";

aStatement=sqlCon.prepareCall(SqlString);

aStatement.registerOutParameter(1,Types.INTEGER);

aStatement.setLong(2,billid);

aStatement.execute();

sqlCon是一个数据库的连接,但是这样就会报错

可是如果改为

int billid=1;

int result=0;

CallableStatement aStatement=null;

String SqlString="{call SP_WFSHWLUSERINFILE(?,?)}";

aStatement=sqlCon.prepareCall(SqlString);

aStatement.registerOutParameter(1,Types.VARCHAR);

aStatement.setLong(1,billid);

aStatement.setLong(2,result);

aStatement.execute();

这样存储过程就能执行了,可是这样result的值根本不会变,根本无法得到存储过程的返回值

我的问题是如何得到oracle存储过程中定义成OUT的返回参数值呢?

|

你的第一种用法实际上不是调用存储过程,而是调用oracle函数的用法;

第二种才是调用存储过程,但是有问题,改成这样试试:

aStatement=sqlCon.prepareCall(SqlString);

aStatement.registerOutParameter(2,Types.NUMBERRIC);//这里数字型是不是NUMBERRIC我记不请了,在编译器里应该会弹出帮助的

aStatement.setLong(1,billid);

aStatement.execute();

另外,存储过程的参数数字型最好不要用integer,数字型用number,或者就用varchar型,oracle会自动匹配为数字型的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值