不是很明白这段代码,理解成是一条语句:
RETURN
SELECT distinct sales
FROM SALES
where sales_person=NAME;1.首先测试直接返回一个值,也就是RETURN SELECT distinct sales FROM SALES where sales_person=NAME;修改成RETURN 999;2.如果还不正常那偶也没有办法了,楼主参考DB2的文档或例子吧。
3.如果正常那就好办了。
  Oracle中的写法是:
  Number out;
  ....
  SELECT distinct sales into out FROM SALES where sales_person=NAME;
  ....
  return out;

解决方案 »

  1.   

    connection.setAutoCommit(false);CallableStatement proc = connection.prepareCall("{ ? = call snuffed_it_when(?) }");proc.registerOutParameter(1, Types.INTEGER);proc.setString(2, poetName);cs.execute();int age = proc.getInt(2); 
    这样试一试呢?
      

  2.   

    或者
             con = ConnectionPool.getConnection();          con.setAutoCommit(false);          CallableStatement toesUp = connection.prepareCall("{ ? = call list_early_deaths () }");          toesUp.registerOutParameter(1, Types.OTHER);           toesUp.execute();           ResultSet rs = (ResultSet) toesUp.getObject(1);          while (rs.next()) {          String name = rs.getString(1);          int age = rs.getInt(2);         mapper.sendDeath(name, age); 
      

  3.   

    GJA106: 改了999也是不行。 这方面文档比较少,ORACLE好像比较多。zyg158:不行啊,都是再execute时报和原来一样的错误。我在这里类似地执行存储过程是可以的。奇怪
      

  4.   

    是不是java只能调用db2 的 stored procedure?
      

  5.   

    不可能的。function和procedure都可以调用。安装DB2后没有例子提供?Oracle的就有:%ORACLE_HOME%\ora90\jdbc\demo\samples\,DB2应该也有(我机器的已经卸载掉了)。
      

  6.   

    不能这样调用函数,你可以这样试一下,把call getsale_number(?)修改为select getsale_number(?) from table
    DB2的函数就是函数,存储过程就是存储过程,不象Oracle那样好像是一回事。
      

  7.   

    你的DB2的JDBC驱动升级了吗?
    停掉DB2的所有服务执行D:\SQLLIB\java12\usejdbc2.bat