2017-05-05 1 views
1

Je souhaite créer un CL qui affiche les noms des versions les plus récentes de tous les fichiers physiques d'une bibliothèque. En utilisant le nom de la bibliothèque comme paramètre d'entrée, comment puis-je afficher les noms de tous les fichiers physiques? Une fois que je reçois les noms, je peux continuer avec les versions, mais je suis coincé là-dessus. Veuillez suggérer.CL: Comment puis-je traverser tous les fichiers physiques dans une bibliothèque?

Merci à l'avance :)

Répondre

7

Old school réponse

La commande Description de l'objet d'affichage (DSPOBJD) a une parm de sortie qui accepte * OUTFILE. Vous utilisez simplement le fichier de modèle, QADSPOBJ, dans votre déclaration DCLF et utilisez OVRDBF pour remplacer votre fichier de sortie réel avant d'utiliser la commande RCVF pour lire le premier enregistrement.

Problèmes avec cela est que le format du fichier de sortie pourrait changer avec une nouvelle version ou même avec l'application d'un PTF.

réponse moderne Générique
utilisation CL ILE et la liste d'objets API (QUSLOBJ). Les données renvoyées sont déversées dans un espace utilisateur. Vous pouvez utiliser les API de l'espace utilisateur pour y accéder dans votre programme ILE CL.

Tableau (PF) de réponse moderne spécifique
(Extrait d'une réponse par jmarkmurphy)
Vous pouvez également essayer d'utiliser SQL comme référencé par John Y. Voici une requête qui renverra tous les fichiers physiques dans un bibliothèque:

select * 
from qsys2.systables 
where table_type in ('P', 'T') 
    and table_schema = 'MYLIB' 
    and file_type = 'D' 
+0

Je cherche une liste de fichiers physiques dans la bibliothèque, cela ne me donne pas cette information – uSeruSher

+1

@uSeruSher - Ils vous donneront ce dont vous avez besoin. Qu'avez-vous essayé? Si vous utilisez DSPOBJD, n'oubliez pas que vous pouvez utiliser '* ALL' comme nom d'objet. –

+0

Personnellement, je ne suis pas un fan des API, surtout si vous devez créer des appels à partir de zéro. (Une histoire différente si vous avez déjà des wrappers qui traînent.) La façon "old school" est plus simple et ne devrait pas être découragée. (Il s'agit de récupérer la sortie '* PRINT' qui devrait être déconseillée.) De plus, la nouvelle * nouvelle * méthode utilise SQL et les catalogues et services DB2 for i. –

2

Vous pouvez également essayer d'utiliser SQL comme référencé par John Y. Voici une requête qui renverra tous les fichiers physiques dans une bibliothèque:

select * 
from qsys2.systables 
where table_type in ('P', 'T') 
    and table_schema = 'MYLIB' 
    and file_type = 'D' 

Notez que table_type inclut 'T' qui est une table SQL et qui apparaît comme un fichier physique dans DSPOBJD. file_type fait la différence entre les fichiers de données et les fichiers source.

+0

J'ai ajouté vos informations à ma réponse – Charles