obtenir une liste d’objets AS400 via SQL

Que fait la fonction UDTFOBJLST

La fonction UDTFOBJLST retourne une liste d’objets as400.

Fonctionnement

La fonction utilise un programme RPGLE qui liste les objets AS400 dans un USERSPACE via l’API QUSLOBJ.

Paramètres en entrée de la fonction

 Nom de l’objet (*ALL, NOM*, Nom de l’objet).

 Type de l’objet (*FILE, *PGM, …, *ALL)

 Bibliothèque (Nom de la bibliothèque, *LIBL, *CURLIB, …)

Paramètres en sortie de la fonction

 Bibliothèque de l’objet

 Nom de l’objet

 Type de l’objet

 Attribut étendu de l’objet

 Texte de l’objet

 Date + heure de création de l’objet

 Date + heure de modification de l’objet

 Utilisateur ayant créé l’objet

Création du programme de service

Télécharger le source du programme UDTFOBJLST et compilez le comme ci-dessous.


1) CRTRPGMOD MODULE(BIB/UDTFOBJLST)
SRCFILE(BIB/QRPGLESRC)

2) CRTSRVPGM SRVPGM(BIB/UDTFOBJLST)
EXPORT(*ALL)

Création de la fonction SQL


CREATE FUNCTION UDTFOBJLST(VARCHAR(10), VARCHAR(10),VARCHAR(10))
RETURNS TABLE(
OBJ_LIB CHAR(10),
OBJ_NAME CHAR(10),
OBJ_TYPE CHAR(10),
OBJ_EXTA CHAR(10),
OBJ_TEXT CHAR(50),
OBJ_CRTDTE CHAR(19),
OBJ_CHGDTE CHAR(19),
OBJ_CRTUSR CHAR(10)
)
EXTERNAL NAME 'BIB/UDTFOBJLST(UDTFOBJLST)'
LANGUAGE RPGLE
DISALLOW PARALLEL
NO SQL
RETURNS NULL ON NULL INPUT
PARAMETER STYLE DB2SQL
NOT DETERMINISTIC

Exemple simple d’utilisation


select * from table(udtfobjlst('*ALL' , '*ALL' , '*CURLIB')) as liste

Exemples plus compliqués d’utilisation

A quoi peut bien servir une telle fonction, alors que l’on peut obtenir une liste d’objet via la commande DSPOBJD par exemple) ?

Essayez les requêtes ci-dessous, pour vous rendre compte de l’intérêt de ce type de fonction.

La requête ci-dessous liste tous les objets dont le nom + type se trouvent dans les deux bibliothèques BIB1 et BIB2.


SELECT * FROM
table(udtfobjlst('*ALL' , '*ALL' , 'BIB1')) as t1
inner join (
SELECT * FROM
table(udtfobjlst('*ALL' , '*ALL' , 'BIB2')) as liste
) as t2
on t2.obj_name = t1.obj_name
and t2.obj_type = t1.obj_type

La requête ci-dessous liste tous les objets dont le nom + type se trouvent dans la bibliothèque BIB1 mais pas dans BIB2.


SELECT * FROM
table(udtfobjlst('*ALL' , '*ALL' , 'BIB1')) as t1
exception join (
SELECT * FROM
table(udtfobjlst('*ALL' , '*ALL' , 'BIB2')) as liste
) as t2
on t2.obj_name = t1.obj_name
and t2.obj_type = t1.obj_type

La requête ci-dessous liste les objets de type fichier, en filtrant sur les fichiers physiques, l’utilisateur DAVID et en triant sur le nom de l’objet, puis la bibliothèque.

select * from table(udtfobjlst('*ALL' , '*FILE' , '*USRLIBL')) as liste
where obj_exta = 'PF'
and obj_user = 'DAVID'
order by obj_name, obj_lib

Avertissement

Le programme de service utilise l’API QUSLOBJ. Si vous passez en paramètres *ALL pour la liste de bibliothèques par exemple, le temps d’exécution devient très long et vous risquez fort d’obtenir un timeout. Votre requête n’aboutira pas.
Dans ce cas, augmentez le paramètre UDF_TIME_OUT comme indiqué dans l’article 393

Print Friendly, PDF & Email

Attachments