• 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
    New Generation Software

    A New Year, Big Goals, Exciting Projects.

    But What Do Your Users See?

    FREE Webinar

    It’s 2026. You have big plans for your IBM i environment – new technologies, methods, and languages. But what about your users? Are they still seeing reports and displays from outdated or unsupported query and reporting tools?

    See how NGS-IQ simplifies query, reporting, analytics, and data transfer tasks without requiring a consulting team or large budget.

    February 10, 2026, 11am Pacific/2pm Eastern

    RSVP: https://ngsi.news/NewYear

    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

  • Profound Says New Agentic AI Dev Tool Delivers Huge Productivity Boost
  • FalconStor Doubles Down On IBM Power With Habanero Offsite Data Protection
  • Guru: Taming The CRTSRVPGM Command – Options That Can Save Your Sanity
  • Izzi Taps Virtutem To Modernize Infor LX Environments With Valence
  • IBM i PTF Guide, Volume 28, Numbers 1 Through 3
  • 2025: An IBM i Year In Review
  • A Tale Of Two Server Markets
  • Guru: CRTSRVPGM Parameters That Can Save or Sink You
  • As I See It: What’s Past is Prologue
  • IBM i PTF Guide, Volume 27, Numbers 49 Through 52

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