一段oracle的存储过程调用语句,可供参考:CallableStatement call = conn.prepareCall(proc_sql);
call.registerOutParameter(1,oracle.jdbc.OracleTypes.CURSOR);call.execute();ResultSet rs = (ResultSet)call.getObject(1);

解决方案 »

  1.   

    to cm4ever(小P) :
    这是要注册返回参数,sqlserver下有返回参数CURSOR类型的吗?
    类似oracle.jdbc.OracleTypes.CURSOR
    怎么写?搜了半天没有,用Types.OTHER也不行!不过,我这个问题主要是怎么得到存储过程的第三个返回结果集?继续求助啊!
      

  2.   

    zhuan到sql server论坛问问。MS-SQL Server->数据库开发
    http://community.csdn.net/expert/deeptree/RoomForum.asp?roomid=5704
      

  3.   

    看不懂jsp代码,不过,从代码分析来看,第二个记录集可以正常输出,而得到第三个记录集的方法与第二个一致,似乎不是代码的问题.但存储过程本身是没有问题的.
    楼主测试一下这样的调用:
    exec page_proc 'select 总页数=3,总行数=22,当前页=1',1,10
    --如果没有问题,再测试一下,把调用的表,改为查询用户表(不要查系统表,可能会是权限问题)
    --如果还是有问题,则试试把存储过程修改为这样,看看第三个记录集是否可以得到结果:
    CREATE  procedure Page_proc
    @sqlstr nvarchar(4000), --查询字符串
    @currentpage int, --第N页
    @pagesize int --每页行数
    as
    set nocount on
    declare @P1 int, --P1是游标的id
     @rowcount int
    exec sp_cursoropen @P1 output,@sqlstr,@scrollopt=1,@ccopt=1,@rowcount=@rowcount output
    select ceiling(1.0*@rowcount/@pagesize) as 总页数,@rowcount as 总行数,@currentpage as 当前页 
    set @currentpage=(@currentpage-1)*@pagesize+1
    --exec sp_cursorfetch @P1,16,@currentpage,@pagesize 
    select 总页数=3,总行数=22,当前页=1
    exec sp_cursorclose @P1
    set nocount off
    GO
      

  4.   

    通过这样几个测试,初步判断一下,看看问题应该定位在jsp中,还是应该定位在存储过程中.
      

  5.   

    已经试过,只要不是exec sp_cursorfetch @P1,16,@currentpage,@pagesize 返回的结果集,用select语句或是存储过程(非sp_cursorfetch )返回的都可以正常得到结果集!