存储函数如下:
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,谢谢。
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,谢谢。
给别的不行吗?
你好,因为存储过程是调用别人的,我不能改,
只能按他给我的参数去传。敢问各位tx都没有碰到过类似的情况吗?谢谢。
import oracle.jdbc.OracleTypes;
Types类型改成OracleTypes
谢谢,试了一下,还是有一样的问题... ...
谢谢,不是这个问题... ...
我已经证明了,用现有的JDBC手段无法解决这个问题。
我是这样试的:建了一个只有一个boolean型返回的funciton,然后用
for (int i=-3000;i<=3000;i++){
clstmt.registerOutParameter(1, i);
}
去逐个测试,遗憾的是,在-3000-3000中,没有一种合适的!
也就是说现有的JDBC没有对boolean类型提供足够的支持。我想在JDBC上走下去是死路一条。我想也许JNI可以解决这个问题吧。
很感谢你的回答,我知道了,谢谢... ...
如果方便请message你的msn,方便联系... ...
谢谢.