Lignes de codes source
Citation de nombre pi le 29 octobre 2019, 8 h 17 minBonjour,
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,
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 ?
Citation de Khristian le 29 octobre 2019, 9 h 32 minBonjour
la commande DSPFD donne ces informations...
exemple : DSPFD FILE(MABIB/QCLSRC) TYPE(*MBRLIST) OUTPUT(*OUTFILE) OUTFILE(&BIB/&FILE)
à suivre...
Christian
Bonjour
la commande DSPFD donne ces informations...
exemple : DSPFD FILE(MABIB/QCLSRC) TYPE(*MBRLIST) OUTPUT(*OUTFILE) OUTFILE(&BIB/&FILE)
à suivre...
Christian
Citation de macounet le 29 octobre 2019, 10 h 22 minLe "problème" des fichiers source est qu'ils sont multi membres et qu'à ma connaissance, on ne peut lire que le 1er en SQL
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
Citation de remit le 29 octobre 2019, 13 h 26 minOn 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
.
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
.
Citation de nombre pi le 31 octobre 2019, 13 h 56 minOui 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 ?
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 ?
Citation de B.Hauser le 1 novembre 2019, 11 h 14 minSi 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';
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';
Citation de nombre pi le 6 novembre 2019, 8 h 14 minMerci 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 ?
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 ?
Citation de remit le 6 novembre 2019, 15 h 43 min
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;
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;
Citation de nombre pi le 8 novembre 2019, 13 h 13 minMerci beaucoup remit c'est super.
Merci beaucoup remit c'est super.