Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 8352571
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 9, 20262026-06-09T08:59:53+00:00 2026-06-09T08:59:53+00:00

I have a problem, I using jdbcTemplate exec a Sybase stored procedure returning mulit

  • 0

I have a problem, I using jdbcTemplate exec a Sybase stored procedure returning mulit ResultSet,how could I get all the resultSet?

if object_id('p_if_pms_spyh_upload') <> null 
    drop proc p_if_pms_spyh_upload
go
create procedure p_if_pms_spyh_upload
@status          char(1)                ---  订单状态  A/D
as
begin

    declare @rq char(8) , @errcode int, @errmsg varchar(60)     

    create table #head (
        op_type   char(2) not null,                     -- 操作类型 A 表示新建  D 表示删除
        xyqrid   varchar(30) not null,                --  确认函编号
        dh        varchar(20) not null,                -- 优惠单编号 
        yhdmc   varchar(30) not null,               -- 优惠单名称
        type      varchar(18) not null,                -- 直降种类  04表示10有函              
        qsrq     char(8) not null,                           --  起始日期
        jzrq         char(8) not null,                          -- 截止日期 
        qssj     char(8) not null,                      -- 起始时间 
        jzsj      char(8) not null,                             -- 截止时间
        jsfs      varchar(8) not null,                      ---结算方式
        oano    varchar(30) not null,                   -- OA公文号
        description   varchar(200)  not null,      -- 优惠单描述
        oprrq   char(8) not null,             -- 审批删除日期
        oprsj   char(6) not null               -- 审批删除时间    
    )     
    create table #detail (
        op_type   char(2) not null,                     -- 操作类型 A 表示新建  D 表示删除
        xyqrid   varchar(30) not null,                --  确认函编号
        dh        varchar(20) not null,                -- 优惠单编号 
        gdsid    varchar(20) not null,               --  优惠商品名称
        orgid    varchar(10)  not null,               -- 销售组织编码
        qdid     char(4) not null,                      -- 渠道编码
        tjlb        varchar(20)  not null,              -- 商品组
        pp        varchar(20)   not null,              -- 品牌编码
        gys       varchar(20)   not null,              -- 供应商编码
        fmid      varchar(10)   not null,             -- 库位编码
        yhed     numeric(16,4)  not null,            -- 优惠额度
        yhsl      numeric(16,4)   not null,            -- 优惠数量
        unit       varchar(3)  not null                 -- 销售单位
    ) 

    -- 删除1个月之前已成功发送的数据
    select @rq=convert(char(8),dateadd(month,-1,getdate()),112) 
    select @errcode=0
    select @errmsg = ''

    begin tran

        delete from IV_YHD_HEAD_SPYH_TO_PMS where  processflag = 'S' and convert(char(8),lastmodified,112)  = @rq
        if @@transtate = 2 or @@transtate = 3 or @@error != 0        
        begin       
                select @errcode=-1  
            select @errmsg = '删除IV_YHD_HEAD_SPYH_TO_PMS一月之前的数据失败!'                                     
                     goto procfail        
        end  

       delete from IV_YHD_DETAIL_SPYH_TO_PMS where  processflag = 'S' and convert(char(8),lastmodified,112)  = @rq
        if @@transtate = 2 or @@transtate = 3 or @@error != 0        
        begin     
                select @errcode=-1      
           select @errmsg = '删除IV_YHD_DETAIL_SPYH_TO_PMS一月之前的数据失败!'                                     
                     goto procfail        
        end  

        insert into #head 
        select op_type, xyqrid, dh, yhdmc, type, qsrq,jzrq, qssj, jzsj, jsfs, oano, description, oprrq, oprsj
        from IV_YHD_HEAD_SPYH_TO_PMS where processflag = 'Y' and op_type = @status

        update IV_YHD_HEAD_SPYH_TO_PMS set processflag = 'R'
        from IV_YHD_HEAD_SPYH_TO_PMS a, #head b
        where a.dh = b.dh and a.processflag = 'Y' and a.op_type = @status
      if @@transtate = 2 or @@transtate = 3 or @@error != 0        
        begin   
                select @errcode=-1       
           select @errmsg = '更新IV_YHD_HEAD_SPYH_TO_PMS表数据出错!'                                     
                     goto procfail        
        end  

        insert into #detail
        select a.op_type,a.xyqrid,a.dh,a.gdsid,a.orgid,a.qdid,a.tjlb,a.pp,a.gys,a.fmid,a.yhed,a.yhsl,a.unit
        from IV_YHD_DETAIL_SPYH_TO_PMS a,#head b
        where a.dh = b.dh and a.processflag = 'Y' and  a.op_type = @status

        update IV_YHD_DETAIL_SPYH_TO_PMS set processflag = 'R'
        from IV_YHD_DETAIL_SPYH_TO_PMS a, #head b
        where a.dh = b.dh and a.processflag = 'Y' and a.op_type = @status
      if @@transtate = 2 or @@transtate = 3 or @@error != 0        
        begin   
                select @errcode=-1       
           select @errmsg = '更新IV_YHD_DETAIL_SPYH_TO_PMS表数据出错!'                                     
                     goto procfail        
        end  


    procsuccess:
         commit trans
         goto myexit

    procfail:
         rollback trans
         goto myexit

       myexit:
          select  @errcode,@errmsg  
          select  op_type, xyqrid, dh, yhdmc, type, qsrq, jzrq,qssj, jzsj, jsfs, oano, description, oprrq, oprsj from #head
          select op_type,xyqrid,dh,gdsid,orgid,qdid,tjlb,pp,gys,fmid,yhed,yhsl,unit from #detail

end
go
grant all on p_if_pms_spyh_upload to ws
go

I got you what you say and try something else. I show you the code blow:

                        ResultSet rs = null;
                        int updateCount = -1;
                        int index = 1;

                        do {
                            updateCount = cs.getUpdateCount();
                            if (updateCount != -1) {      // it means it's a updateConut
                                cs.getMoreResults();
                                System.out.println("updateCount:" + updateCount);
                                continue;
                                }

                            rs = cs.getResultSet();
                            System.out.println(rs);
                            if (rs != null) {// it means updateCount == -1 and returns a resultSet

                                if (1 == index) {
                                    index++ ;
                                    if(rs.next()) {
                                        int errCode = rs.getInt(1);
                                        String errMsg = rs.getString(2);
                                        System.out.println("errCode:" + errCode + "    errMsg:" + errMsg);
                                        if (!(Constants.PROC_ERRORCODE_SUCC == errCode)) {
                                            logger.error("call sp errror:" + errMsg);
                                        }
                                    }
                                } else if (2 == index) {
                                    index++ ;
                                    rs = cs.getResultSet();
                                    while (rs.next()) {
                                         //proc resultSet                                               
                                    }

                                } else if (3 == index) {
                                    index++ ;
                                    rs = cs.getResultSet();
                                      // proc resultSet

                                    }

                                } else {
                                    break;
                                }

                                cs.getMoreResults();
                                continue;
                                                             }
                            // it means updateCount == -1 && rs == null nothing left to return    
                        } while (!(updateCount == -1 && rs == null));

this is the debug result

updateCount:1
updateCount:1
updateCount:1
updateCount:0
updateCount:0
updateCount:1
updateCount:1
updateCount:1
updateCount:1
org.apache.commons.dbcp.DelegatingResultSet@bd4e3c
errCode:0    errMsg: 
updateCount:1
updateCount:1
updateCount:1
null

This is the correct code

                        ResultSet rs = null;
                        int updateCount = -1;
                        int index = 1;

                        do {
                            updateCount = cs.getUpdateCount();
                            if (updateCount != -1) {// it means it returns a updateCount
                                cs.getMoreResults();
                                continue;
                            }

                            rs = cs.getResultSet();
                            if (rs != null) {// it means it returns a ResultSet
                                if (1 == index) {
                                    index++;
                                    if(rs.next()) {
                                        int errCode = rs.getInt(1);
                                        String errMsg = rs.getString(2);
//                                        System.out.println("errCode:" + errCode + "    errMsg:" + errMsg);
                                        if (!(Constants.PROC_ERRORCODE_SUCC == errCode)) {
                                            logger.error("call sp execute error:" + errMsg);
                                        }
                                    }
                                    rs.close();  // it should call close() here 
                                } else if (2 == index) {

                                    index++;
                                    while (rs.next()) {
                                          //proc the second resultSet
                                    }
                                    rs.close();     // it should call close() here 
                                } else if (3 == index) {
                                    index++;
                                    while (rs.next()) {
                                        //proc the second resultSet                                         
                                    }

                                    rs.close();  // it should call close() here 
                                } else {
                                    break;
                                }

                                cs.getMoreResults();
                                continue;                                 
                            }


                        } while (!(updateCount == -1 && rs == null)); //nothing to return 
  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-06-09T08:59:54+00:00Added an answer on June 9, 2026 at 8:59 am

    You keep calling the getMoreResults in a loop

    CallableStatement cstmt;
    ResultSet rs;
    int i;
    ...
    cstmt.execute();                            // Call the stored procedure 
    
    while (cstmt.getMoreResults()){             // If we have more Results
    
        rs = cstmt.getResultSet();              // Get the result set
    
        while (rs.next()) {                     
            i = rs.getInt(1);                      
            System.out.println("Value from result set = " + i);  
    
        }
    }
    
    rs.close();
    cstmt.close();
    

    For your stored proc, it looks like you always return the three resultsets

    The code should get you close, but if you want to debug it, you can do the loop like I showed you, and inside the loop, call ResultSetMetaData rsmd = rs.getMetaData(); and the rsmd object will tell you pretty much everything about that current resultset, this way you can get a true idea of what is being returned.

    CallableStatement cstmt;
    ResultSet rs;
    int i;
    ...
    cstmt.execute();                            // Call the stored procedure 
    
        // select  @errcode,@errmsg
    
        rs = cstmt.getResultSet();              // Get the result set
    
        while (rs.next()) {                     
            // Process the resultset   
    
        }
    
        rs.close();
    
        // select  op_type, xyqrid, dh, yhdmc, type, qsrq, jzrq,qssj, jzsj, jsfs, oano, description, oprrq, oprsj from #head
    
        rs = cstmt.getResultSet();              // Get the result set
    
        while (rs.next()) {                     
            // Process the resultset   
    
        }
    
        rs.close();
    
        // select op_type,xyqrid,dh,gdsid,orgid,qdid,tjlb,pp,gys,fmid,yhed,yhsl,unit from #detail
    
        rs = cstmt.getResultSet();              // Get the result set
    
        while (rs.next()) {                     
            // Process the resultset   
    
        }
    
        rs.close();
    
    cstmt.close();
    
    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I have problem using arabic font for iOS. All fonts have the same render,
i have problem using LIKE structure in DB2 : for example: select * from
I have problem while using jquery maskedinput with asp.net textbox. I have a check
I have a problem using a local SQL Server CE database with C# and
I have a problem using Linq to NHibernate to load an object and eagerly
I have a problem using the SSIS. I try to import data from database
I have a problem using JSON and arrays. Here is my code: while($row =
i have a problem using the Catch Clipboard Events code found on this link
I have a problem using the string function erase with iterators. The function below
I have a problem using a simple AppleScript on Mac OSX 10.7.3. With the

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.