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