Use SQL to read lots of rows (records) into a data structure (array)

IBM i

Nov 29

Us IBM i blokes love reading things from files. Hashtag internet fact. But sometimes we just want to read a certain number of records, or rows in SQL speak. For example, when building a page by page subfile with say 15 lines per page, we might want to be able to read an entire file, but read it in 15 row chunks. In native IO style RPG, we would probably set a counter and increment it by one for each row read, stopping at 15. But using SQL for IO it does all that counting for us  🙂

This means that in most cases we can just wrap the read a DOW loop and fetch until the cows come home i.e. nothing more to fetch.

Lets look at a quick and dirty example reading 15 rows at a time into a data structure with 15 elements.

Using SQL for Single Page Subfiles

Code:
 // read the items 
runsql 
 FETCH from (someIncrediblyInterestingFile)
 For 15 rows 
 into :data_structure
 
 // now write the sfl1 recs 
 for x1 = 1 to 15; 
   %occur(data_structure) = x1; --> this is for MODS 
   ... do stuff with the data_structure fields
 endFor;
Follow

About the Author

IBM i Software Developer, Digital Dad, AS400 Anarchist, RPG Modernizer, Alpha Nerd and Passionate Eater of Cheese and Biscuits. Nick Litten Dot Com is a mixture of blog posts that can be sometimes serious, frequently playful and probably down-right pointless all in the space of a day. Enjoy your stay, feel free to comment and in the words of the most interesting man in the world: Stay thirsty my friend.