sql—如何从外部存储过程返回多个数据集

insrf1ej  于 2021-07-24  发布在  Java
关注(0)|答案(0)|浏览(252)

我正在使用access客户机解决方案在ibmi上测试一个sql存储过程。该存储过程有两个对其他外部存储过程的调用,这些外部存储过程调用rpgsqle程序,每个程序都向所选数据的客户端返回一个数据集。如果我使用sql返回数据,我可以得到两个返回的数据集,但是由于我还有其他处理要做,所以我使用sqlrpgle程序来选择、更新和返回数据。在我的测试中,我一次只能得到一个数据集——第二个。如果我把第二个电话评论掉,我就能得到第一个。我尝试过增加返回的数据集的数量,只是想看看是否有问题,但结果是一样的。
注意:两个sqlrpgle程序都创建一个全局临时表,其中包含将在数据集中返回的数据。

CREATE PROCEDURE SP_PROC             
       ( IN    STORE        DEC(3,0) )
       DYNAMIC RESULT SETS 2         
       LANGUAGE SQL                   
       MODIFIES SQL DATA              
       CALLED ON NULL INPUT           

BEGIN                                 
       CALL SP_PGM01(STORE);          
       CALL SP_PGM02(STORE);          
END

pgm01编号:

CREATE PROCEDURE SP_PGM01             
       ( IN    STORE        DEC(3,0) )
       DYNAMIC RESULT SETS 1          
       LANGUAGE RPGLE                 
       MODIFIES SQL DATA              
       CALLED ON NULL INPUT           
       EXTERNAL NAME PGM01
       PARAMETER STYLE GENERAL ;    

... (PGM01 SQLRPGLE additional processing not shown)

SqlStmt = 'Select * from session.SKUS +                               
           ORDER BY T1SKU, T1TypeA, T1TypeB, T1TypeC' ;      
Exec Sql Prepare s1 From :SqlStmt;                           
Exec Sql Declare C1_SKU Cursor WITH RETURN TO CLIENT For s1; 
Exec Sql Open C1_SKU;                                        
Exec Sql SET RESULT sets WITH RETURN TO CLIENT cursor C1_SKU;

* INLR = *On;

Return;

pgm02编号:

CREATE PROCEDURE SP_PGM02             
       ( IN    STORE        DEC(3,0) )
       DYNAMIC RESULT SETS 1          
       LANGUAGE RPGLE                 
       MODIFIES SQL DATA              
       CALLED ON NULL INPUT           
       EXTERNAL NAME PGM02
       PARAMETER STYLE GENERAL ;  

... (PGM02 SQLRGPLE additional processing not shown)

SqlStmt = 'Select * from session.UPCS +                               
           ORDER BY T2UPC, T2SKU' ;                          
Exec Sql Prepare s2 From :SqlStmt;                           
Exec Sql Declare C1_UPC Cursor WITH RETURN TO CLIENT for s2; 
Exec Sql Open C1_UPC;                                        
Exec Sql SET RESULT sets WITH RETURN TO CLIENT cursor C1_UPC;

* INLR = *On;

Return;

这似乎很直截了当-任何帮助将不胜感激。
迈克

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题