Fil d’Ariane du forum – Vous êtes ici :ForumForums techniques: AS/400Lignes de codes source
Vous devez vous identifier pour créer des messages et des sujets.

Lignes de codes source

Bonjour,

Je suis persuadé qu'il est possible de déterminer le nombre de lignes de codes source dans une bibliothèque donnée LIB1.

L'idée serait de parcourir les fichiers de type PF-SRC (QCBLSRC, QRPGSRC, etc.) et pour chaque fichier parcourir les membres et pour chaque membre faire un COUNT(*), ensuite additionner le tout.

Peut-on trouver une solution avec SQL ?

Bonjour

la commande DSPFD donne ces informations...

exemple : DSPFD FILE(MABIB/QCLSRC)  TYPE(*MBRLIST)  OUTPUT(*OUTFILE)  OUTFILE(&BIB/&FILE)

à suivre...

Christian

 

Le "problème" des fichiers source est qu'ils sont multi membres et qu'à ma connaissance, on ne peut lire que le 1er en SQL

On peut travailler sur les membres d'un fichier en SQL avec un ALIAS, par exemple :

/* création d'un alias */

CREATE ALIAS MABIB/UN_ALIAS FOR MABIB/QCLSRC(NOM_MEMBRE)

/* utilisation : compte les enregistrements du membre NOM_MEMBRE de MABIB/QCLSRC */

SELECT COUNT(*) FROM MABIB/UN_ALIAS

/* destruction de l'alias */

DROP ALIAS MABIB/UN_ALIAS

remarque : l'alias est un objet Os400, de type *FILE, avec l'attribut DDMF

 

Ceci étant, c'est plus simple avec la commande ci-dessus, suivie de SELECT SUM(MLNRCD) FROM BIB/FILE.

 

 

Oui mais comment faire pour donner un alias à tous les membres d'un fichier source, ensuite faire ça pour tous les fichiers source d'une bibliothèque ?

Si tu ne veux que determiner le nombre de lignes dans des membres d'un fichier, tu peux utiliser SQL et lire les vues catalogues SYSTABLES and SYSPARTITIONSTAT.

La vue SYSTABLES contient tous les tables, vues, fichier phyisques et logiques.

La colonne FILE_TYPE contient un 'S' pour un fichier source

La vue SYSPARTITIONSTAT contient des information des membres. Il y a la colonne Number_Rows qui contient le numero des lignes. La colonne Number_Deleted_Rows contient le numero des lignes effacees.

Pour determiner le numero des lignes dans tous les membres de source, il ne faut que joindre ses deux vues et cumuler les colonnes Number_Rows et Number_Deleted_Rows.

Example:

Select Sum(Number_Rows) TotalRows,
Sum(Number_Deleted_Rows) TotalDeleted,
Sum(Number_Rows - Number_Deleted_Rows) TotalDiff
from SysTables a join Syspartitionstat b
on     a.System_Table_Schema = b.System_Table_Schema
and a.System_Table_Name = b.System_Table_Name
Where    a.File_Type = 'S'
and b.System_Table_Schema = 'YOURSCHEMA';

 

Merci B.Hauser votre réponse m'a été d'une grande utilité.

Comment modifier la requête de manière à ce qu'elle traite toutes les bibliothèques et qu'elle m'affiche le nom de la bibliothèque suivi du TotalRows ?

SELECT A.SYSTEM_TABLE_SCHEMA, SUM(NUMBER_ROWS) TOTALROWS
FROM SYSTABLES A JOIN SYSPARTITIONSTAT B
ON A.SYSTEM_TABLE_SCHEMA = B.SYSTEM_TABLE_SCHEMA
AND A.SYSTEM_TABLE_NAME = B.SYSTEM_TABLE_NAME
WHERE A.FILE_TYPE = 'S'
GROUP BY A.SYSTEM_TABLE_SCHEMA;

Merci beaucoup remit c'est super.