• 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:

    • Share on Reddit (Opens in new window) Reddit
    • Share on Facebook (Opens in new window) Facebook
    • Share on LinkedIn (Opens in new window) LinkedIn
    • Share on X (Opens in new window) X
    • Email a link to a friend (Opens in new window) Email

    Tags:

    Sponsored by
    Raz-Lee Security

    The MFA Mobile App provides a secure and user-friendly way to add strong authentication without complicating access. It enables users to approve login requests or generate one-time passwords directly from their mobile device, ensuring that access is granted only after a second, trusted factor is verified.

    Learn More

    Share this:

    • Share on Reddit (Opens in new window) Reddit
    • Share on Facebook (Opens in new window) Facebook
    • Share on LinkedIn (Opens in new window) LinkedIn
    • Share on X (Opens in new window) X
    • Email a link to a friend (Opens in new window) Email

    Query Active Directory from the iSeries Admin Alert: A Quick Audit of Your IPL Parameters

    Leave a ReplyCancel 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

  • Inside The Encryption Key Management Changes In IBM i 7.6
  • FalconStor Moved To The Blue Lagoon, And Is Poised For Growth Because Of It
  • Guru: Claude’s SQL Tip
  • Astera Makes Extracting Legacy Report Data an AI Specialty
  • IBM i PTF Guide, Volume 28, Number 27
  • Welcoming The New IBM i Chief Architect And Other New Top Brass
  • A Deep Dive Into That Power S1112 Entry Power11 Server
  • Guru: Beyond Three-Part Naming – Running SQL Across Remote IBM i Systems
  • How IBM Bolstered IBM i Resilience In The Summer Tech Refreshes
  • IBM i PTF Guide, Volume 28, Number 26

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