报错:java.sql.SQLException: Function doesn't have an output parameter or the out parameter isn't returned.

解决方案 »

  1.   

    这里假定是oracle的存储过程,
    则某过程的定义如下:
    create or replace procedure p_getname(
        arg_id IN tb_name.id%type,
        arg_name OUT tb_name.name%type
    )
    as
    ......
    begin
    //sth todo
    end p_getname下面是jsp中调用:
    <%
    ....
    String proc="{call p_getname(?,?)}";
    CallableStatement cstmt=connection.prepareCall(proc);
    cstmt.setString(1,"001");
    cstmt.registerOutParameter(2, java.sql.Types.VARCHAR);
    cstmt.executeUpdate();
    ......
    //在需要的地方用cstmt.getString(2)获得存储过程传出来的参数
    ......
    cstmt.close();
    connection.close();%>
      

  2.   

    补充:oracle中IN是传人参数,OUT是传出参数,注意大写。
      

  3.   

    connection.prepareCall("{ ? = call test(?) }");我靠,有这样调用存储过程的吗,述我菜鸟.没见过这样的!!
      

  4.   

    但是我的数据库是informix,那用("{ ? = call test(?) }")还是("{  call test(?,?) }");??
      

  5.   

    informix存储过程是这样的啵:create procedure (XX int) return int的啊
    如果("{  call test(?,?) }")不行吧。?
      

  6.   

    第一个人调用的是SQLServer 存储过程,而第二人调用的是Oracle的存储过程,其他人都是垃圾。不看也罢。
      

  7.   

    CallableStatement proc =connection.prepareCall("{ ? = call test(?) }");
    proc.registerOutParameter(1, Types.INTEGER);
    proc.setString(1,2);
    proc.execute();int i = proc.getInt(1);