• The Four Hundred
  • Subscribe
  • Media Kit
  • Contributors
  • About Us
  • Contact
Menu
  • The Four Hundred
  • Subscribe
  • Media Kit
  • Contributors
  • About Us
  • Contact
  • Fetch a Variable Number of Records with SQL

    June 15, 2005 Hey, Ted

    If you want to use a variable for the number of rows to fetch in an SQL query, there is an alternative to the FETCH FIRST n ROWS technique you presented recently in Four Hundred Guru. Here is some code from an SQLRPGLE program shell I have used since V5R1. It uses a cursor instead of placing the number of rows directly into the SELECT statement.

    c/Exec SQL                                         
    c+ Fetch from C1 for :NbrRows rows into :RtnDtaSet 
    c/End-Exec
    

    –Rick

    Rick’s comment is in response to the last paragraph of the issue he refers to. His idea is to use a multi-row fetch, which requires that a structure of some sort (depending on the language) be defined to receive the data. In RPG, the data is placed into a multiple-occurrence data structure.

    Here’s another example that is a tad more complete. I have omitted the error-checking logic. The FETCH retrieves the number of rows specified by the first parameter.

    Fqsysprt   o    f  132        printer               
                                                        
    D CustData        ds                  occurs(12)    
    D  CustNumber                    6  0               
    D  CustName                     12                  
                                                        
    D Rows            s              3p 0               
    D Ndx             s              3p 0               
                                                        
    C     *entry        plist                           
    C                   parm                    Rows    
                                                        
    C/exec sql                                          
    C+           declare Customers cursor for           
    C+             select cusnum, lstnam || ' ' || init 
    C+               from qiws/qcustcdt                 
    C/end-exec                                          
    C/exec sql                                          
    C+           open Customers                         
    C/end-exec                                          
    C/exec sql                                          
    C+           fetch Customers for :Rows Rows         
    C+             into :CustData                       
    C/end-exec                                     
    C                   for       ndx = 1 to Rows  
    C     ndx           occur     CustData         
    C                   except    PLine            
    C                   endfor                     
    C/exec sql                                     
    C+           close Customers                   
    C/end-exec                                     
    C                   eval      *inlr = *on      
    Oqsysprt   e            pline       1          
    O                       Ndx           4        
    O                       CustNumber       +   1 
    O                       CustName         +   1 
    

    After the FETCH retrieves the number of rows indicated by the ROWS variable, a simple loop lists the retrieved records.

    –Ted

    RELATED STORY

    SQL Can Return One or a Few Records


    Share this:

    • Reddit
    • Facebook
    • LinkedIn
    • Twitter
    • Email

    Tags:

    Sponsored by
    Rocket Software

    Unlock the full potential of your data with Rocket Software. Our scalable solutions deliver AI-driven insights, seamless integration, and advanced compliance tools to transform your business. Discover how you can simplify data management, boost efficiency, and drive informed decisions.

    Learn more today.

    Share this:

    • Reddit
    • Facebook
    • LinkedIn
    • Twitter
    • Email

    Now Solutions Brings HR App to DB2 Oracle Gives J.D. Edwards World Shops Something to Cheer About

    Leave a Reply Cancel reply

Volume 5, Number 23 -- June 15, 2005
THIS ISSUE
SPONSORED BY:

T.L. Ashford
iTera
WorksRight Software

Table of Contents

  • Query Active Directory from the iSeries
  • Fetch a Variable Number of Records with SQL
  • Admin Alert: A Quick Audit of Your IPL Parameters

Content archive

  • The Four Hundred
  • Four Hundred Stuff
  • Four Hundred Guru

Recent Posts

  • Meet The Next Gen Of IBMers Helping To Build IBM i
  • Looks Like IBM Is Building A Linux-Like PASE For IBM i After All
  • Will Independent IBM i Clouds Survive PowerVS?
  • Now, IBM Is Jacking Up Hardware Maintenance Prices
  • IBM i PTF Guide, Volume 27, Number 24
  • Big Blue Raises IBM i License Transfer Fees, Other Prices
  • Keep The IBM i Youth Movement Going With More Training, Better Tools
  • Remain Begins Migrating DevOps Tools To VS Code
  • IBM Readies LTO-10 Tape Drives And Libraries
  • IBM i PTF Guide, Volume 27, Number 23

Subscribe

To get news from IT Jungle sent to your inbox every week, subscribe to our newsletter.

Pages

  • About Us
  • Contact
  • Contributors
  • Four Hundred Monitor
  • IBM i PTF Guide
  • Media Kit
  • Subscribe

Search

Copyright © 2025 IT Jungle