Java调用Oracle存储函数问题

terryapp 2006-08-11 02:30:07
存储函数如下:
FUNCTION my_test(in_test1 IN CHAR,
in_test2 IN BOOLEAN,
out_test3 OUT VARCHAR) RETURN VARCHAR IS
v_test CHAR(3) := '';
BEGIN
select 'aaa' into v_test from dual;
Return 'OK';
EXCEPTION
WHEN OTHERS THEN
out_test3 := SQLCODE;
Return SQLCODE;
END;

Java代码如下:
try {
clstmt = conn.prepareCall("{? = call my_test(?,?,?)}");
clstmt.registerOutParameter(1, Types.VARCHAR);
clstmt.setString(2, "1111111");
clstmt.setBoolean(3, false);
clstmt.registerOutParameter(4, Types.VARCHAR);
clstmt.execute();
} catch (SQLException e) {
System.out.println(e.getMessage());
}

一个简单的调用,报错:
ORA-06550: line 1, column 13:
PLS-00306: wrong number or types of arguments in call to 'MY_TEST'
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored

只知道可能是setBoolean有问题,请教各位做Java的tx,谢谢。
...全文
281 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
terryapp 2006-08-12
  • 打赏
  • 举报
回复
to hbwhwang(catmiw的ID已经停用,现在用这个) :
很感谢你的回答,我知道了,谢谢... ...
如果方便请message你的msn,方便联系... ...
谢谢.
hbwhwang 2006-08-12
  • 打赏
  • 举报
回复
terryapp(terryapp) :
我已经证明了,用现有的JDBC手段无法解决这个问题。
我是这样试的:建了一个只有一个boolean型返回的funciton,然后用
for (int i=-3000;i<=3000;i++){
clstmt.registerOutParameter(1, i);
}
去逐个测试,遗憾的是,在-3000-3000中,没有一种合适的!
也就是说现有的JDBC没有对boolean类型提供足够的支持。

我想在JDBC上走下去是死路一条。我想也许JNI可以解决这个问题吧。
terryapp 2006-08-12
  • 打赏
  • 举报
回复
to theforever(碧海情天) :
谢谢,不是这个问题... ...
terryapp 2006-08-12
  • 打赏
  • 举报
回复
to King_Style(因为梦想,所以努力;既然选择,无须惧怕;一意孤行,只为编程.) :
谢谢,试了一下,还是有一样的问题... ...
  • 打赏
  • 举报
回复
不都说了是my_test里的第一句 select 'aaa' into v_test from dual; 里面的 'aaa' 的问题了吗

aaa 是dual的一个字段吗? 直接用 select aaa into v_test from dual; 就是了
King_Style 2006-08-11
  • 打赏
  • 举报
回复
导入oracle jdbc包classes12.jar
import oracle.jdbc.OracleTypes;
Types类型改成OracleTypes
flyingdancing2005 2006-08-11
  • 打赏
  • 举报
回复
不知
terryapp 2006-08-11
  • 打赏
  • 举报
回复
。。。。。。
hbwhwang 2006-08-11
  • 打赏
  • 举报
回复
是很棘手~
terryapp 2006-08-11
  • 打赏
  • 举报
回复
看样子比较棘手。。。
bluesky8013 2006-08-11
  • 打赏
  • 举报
回复
mark
terryapp 2006-08-11
  • 打赏
  • 举报
回复
hbwhwang(我是catmiw的马甲) :
你好,因为存储过程是调用别人的,我不能改,
只能按他给我的参数去传。

敢问各位tx都没有碰到过类似的情况吗?谢谢。
hbwhwang 2006-08-11
  • 打赏
  • 举报
回复
你干嘛一定要给个BOOLEAN呢?
给别的不行吗?
zhmt 2006-08-11
  • 打赏
  • 举报
回复
up!

mark!


62,634

社区成员

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

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