RPG/i5 Tools - FREE RPG/i5 (AS400) software downloads.  This site has examples (source) of many utilities that use APIs and procedures.  Most of them are written with Free Format RPG IV/ILE and take advantage of RPG/i5 (AS400) service programs.

Example of SQL procedure to call iSeries RPG program that returns paramaters (output).

Try Sticky Password Manager
This is an example of the main procedure that would call your RPG program.

This procedure would reference all the parameters that your RPG program used. In the RPG program you would define the input (IN) parameters with a CONT keyword and the output (OUT) parameters you would not.

		CREATE PROCEDURE YourLibrary/MainProc( 
		    IN ParentContact Dec (9,0 ),  
		    IN ChildContact Dec (9,0 ),   
		    OUT ContactName CHAR (30 ),   
		    OUT ContactPhone CHAR (30 ),  
		    OUT ContactEMail CHAR (60 ),  
		    OUT BillToName CHAR (30 ),    
		    OUT BillToAddr1 CHAR (35 ),   
		    OUT BillToAddr2 CHAR (35 ),   
		    OUT BillToAddr3 CHAR (35 ),   
		    OUT BillToAddr4 CHAR (35 ),   
		    OUT BillToAddr5 CHAR (21 ),   
		    OUT BillToState CHAR (2 ),    
		    OUT BillToZipCode CHAR (10 ), 
		    OUT BillToPhone CHAR (30 ),   
		    OUT FaxNumber CHAR (14 ),       
		    OUT CustomerNumber CHAR (7 ))   
		 DYNAMIC RESULT SETS 1              
		 LANGUAGE RPGLE                     
		 NOT DETERMINISTIC                  
		 MODIFIES SQL DATA                  
		 EXTERNAL NAME YourLibrary/MainRPG     
		 PARAMETER STYLE SQL                
			 
This is an example of the main procedure that would call your Main Procedure.

This procedure would reference all the input parameters and the define the output parameters VIA the SQL. The SQL statement would select the entire list of parameters and return them to the calling procedure.

		CREATE PROCEDURE YourLibrary/WrapProc(   
		    IN ParentContact Dec (9,0 ),         
		    IN ChildContact Dec (9,0 ))      
		 DYNAMIC RESULT SETS 1               
		 LANGUAGE SQL                        
		 BEGIN                               
		   DECLARE ContactName CHAR (30);    
		   DECLARE ContactPhone CHAR (30);   
		   DECLARE ContactEMail CHAR (60);   
		   DECLARE BillToName CHAR (30);     
		   DECLARE BillToAddr1 CHAR (35);    
		   DECLARE BillToAddr2 CHAR (35);    
		   DECLARE BillToAddr3 CHAR (35);    
		   DECLARE BillToAddr4 CHAR (35);    
		   DECLARE BillToAddr5 CHAR (21);    
		   DECLARE BillToState CHAR (2);     
		   DECLARE BillToZipCode CHAR (10);  
		   DECLARE BillToPhone CHAR (30);    
		   DECLARE FaxNumber CHAR (14);               
		   DECLARE CustomerNumber CHAR (7);           
		   DECLARE c1 CURSOR WITH RETURN FOR          
		     SELECT ParentContact,                    
		         ChildContact,                     
		         ContactName,                      
		         ContactPhone,                     
		         ContactEMail,                     
		         BillToName,                       
		         BillToAddr1,                      
		         BillToAddr2,                      
		         BillToAddr3,                      
		         BillToAddr4,                      
		         BillToAddr5,                      
		         BillToState,                      
		         BillToZipCode,                    
		         BillToPhone,                      
		         FaxNumber,                               
		         CustomerNumber                           
		      FROM SYSIBM/SYSDUMMY1;                       
		    SET ContactName = ' ';                          
		    SET ContactPhone = ' ';                         
		    SET ContactEMail = ' ';                         
		    SET BillToName = ' ';                           
		    SET BillToAddr1 = ' ';                          
		    SET BillToAddr2 = ' ';                          
		    SET BillToAddr3 = ' ';                          
		    SET BillToAddr4 = ' ';                          
		    SET BillToAddr5 = ' ';                          
		    SET BillToState = ' ';                          
		    SET BillToZipCode = ' ';                        
		    SET BillToPhone = ' ';                          
		    SET FaxNumber = ' ';                       
		    SET CustomerNumber = ' ';                  
		    CALL MainProc(ParentContact,                
		                  ChildContact,                 
		                  ContactName,                  
		                  ContactPhone,                 
		                  ContactEMail,                 
		                  BillToName,                   
		                  BillToAddr1,                  
		                  BillToAddr2,                  
		                  BillToAddr3,                  
		                  BillToAddr4,                  
		                  BillToAddr5,                  
		                  BillToState,                  
		                  BillToZipCode,                   
		                  BillToPhone,                     
		                  FaxNumber,                       
		                  CustomerNumber);                 
		    OPEN c1 USING ParentContact,                  
		                  ChildContact,                   
		                  ContactName,                    
		                  ContactPhone,                   
		                  ContactEMail,                   
		                  BillToName,                     
		                  BillToAddr1,                    
		                  BillToAddr2,                    
		                  BillToAddr3,                    
		                  BillToAddr4,                    
		                  BillToAddr5,                  
		                  BillToState,                  
		                  BillToZipCode,                
		                  BillToPhone,                  
		                  FaxNumber,                    
		                  CustomerNumber;               
		END