SQL : UDTF avec retours liste
Création d'une fonction SQL qui renvoit une liste de valeur 

Exemple :

Une liste des utilisateurs de votre machine 

Il faudra créer une fonction de la manière suivante :

dans returns table la description  

CREATE FUNCTION votrebib/UTIL ( )                   
 RETURNS TABLE (                                 
   PROFIL CHAR(10) ,                             
   TEXTE  CHAR(50)                               
               )                                 
 LANGUAGE SQL                                    
 SPECIFIC votrebib/UTIL                             
 NOT DETERMINISTIC                               
 READS SQL DATA                                  
 CALLED ON NULL INPUT                            
 NOT FENCED                                      
 CARDINALITY 32767                               
 SET OPTION  ALWBLK = *ALLREAD ,                 
                        CLOSQLCSR = *ENDMOD,  
ALWCPYDTA = *OPTIMIZE ,              
COMMIT = *NONE ,                                                    
DECRESULT = (31, 31, 00) ,                                          
DFTRDBCOL = QSYS2 ,                                                 
DLYPRP = *NO ,                                                      
DYNDFTCOL = *NO ,                                                   
DYNUSRPRF = *OWNER ,                                                
SRTSEQ = *HEX                                                       
BEGIN DECLARE CMD CHAR ( 200 ) DEFAULT                              
  'QSYS/DSPOBJD QSYS/*ALL *USRPRF OUTPUT(*OUTFILE)                  
                                  OUTFILE(QTEMP/W_PROFIL) ' ;       
  DECLARE        WARN CONDITION FOR '01HII' ;                       
  DECLARE CONTINUE HANDLER FOR SQLEXCEPTION                         
          SIGNAL WARN SET MESSAGE_TEXT = 'Des Users indisponibles'; 
CALL QSYS/QCMDEXC ( CMD , 0000000200.00000 ) ;                      
RETURN SELECT ODOBNM as PROFIL, ODOBTX as TEXTE                     
              FROM QTEMP/W_PROFIL;        

et l'utiliser de la manière suivante dans votre requête en indiquant table (votre fonction)

SELECT a.PROFIL, a.texte FROM 
table (UTIL() ) as a 
WHERE a.PROFIL = 
'QSECOFR'       

Pour connaître les utilisateurs ayant les droits de modif dans les bases 

SELECT VARCHAR(A.profil,128) AS PROFILE, B.* FROM TABLE (util() ) AS A, 
LATERAL 
(SELECT DELETE, INSERT, UPDATE FROM TABLE (QSYS2.QMPROFILES(A.PROFIL)) AS X WHERE SUBSTR(X.PROFILE_NAME,1,1) <> ' ') as B