存储函数如下:
  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,谢谢。

解决方案 »

  1.   

    你干嘛一定要给个BOOLEAN呢?
    给别的不行吗?
      

  2.   

    hbwhwang(我是catmiw的马甲) :
    你好,因为存储过程是调用别人的,我不能改,
    只能按他给我的参数去传。敢问各位tx都没有碰到过类似的情况吗?谢谢。
      

  3.   

    导入oracle jdbc包classes12.jar
    import oracle.jdbc.OracleTypes;
    Types类型改成OracleTypes
      

  4.   

    不都说了是my_test里的第一句 select 'aaa' into v_test from dual; 里面的 'aaa' 的问题了吗aaa 是dual的一个字段吗?   直接用 select aaa into v_test from dual; 就是了
      

  5.   

    to King_Style(因为梦想,所以努力;既然选择,无须惧怕;一意孤行,只为编程.) :
    谢谢,试了一下,还是有一样的问题... ...
      

  6.   

    to theforever(碧海情天) :
    谢谢,不是这个问题... ...
      

  7.   

    terryapp(terryapp) :
    我已经证明了,用现有的JDBC手段无法解决这个问题。
    我是这样试的:建了一个只有一个boolean型返回的funciton,然后用
    for (int i=-3000;i<=3000;i++){
        clstmt.registerOutParameter(1, i);
    }
    去逐个测试,遗憾的是,在-3000-3000中,没有一种合适的!
    也就是说现有的JDBC没有对boolean类型提供足够的支持。我想在JDBC上走下去是死路一条。我想也许JNI可以解决这个问题吧。
      

  8.   

    to hbwhwang(catmiw的ID已经停用,现在用这个) :
    很感谢你的回答,我知道了,谢谢... ...
    如果方便请message你的msn,方便联系... ...
    谢谢.