Dove si trova il sorgente

SQL per trovare dove sono e quante copie esistono di un sorgente

Molto spesso ci si può trovare di fronte a domande del tipo:

  • Non so dove si trova Sorgente di un Oggetto
  • Non so quante copie del Sorgente esistono
  • Non so quante versioni del Sorgente esistono.
  • Non so quale sia il Sorgente corretto, ovvero il sorgente che ha generato l’oggetto in esecuzione

Nel caso quindi dovesse essere necessario sapere dove e quante copie / versioni ci sono dello stesso Sorgente di un Programma, File, DSPF, ecc, può risultare utile il seguente comando SQL:

SELECT 
       TABSCHEMA, TABNAME   , TABPART   , PARTTYPE  , PARTNBR   , DSTPARTS  ,
       CARD     , NPAGES    , FPAGES    , OVERFLOW  , CLUSTERED , ACTBLOCKS ,
       ACROWSIZE, ACROWRATIO, AVGROWSIZE, PCTCROWS  , PCTPGSAVED, DELETED   ,
       SIZE     , VLSIZE    , VLSEGMENTS, FLEXTENTS , VLEXTENTS , CSTATSSIZE,
       MTISIZE  , DISTINCTIX, OPENS     , CLOSES    , INSERTS   , BLKIOPS   ,
       BLKIROW  , UPDATES   , DELETES   , DSCLEARS  , DSCOPIES  , DSREORGS  ,
       DSINXBLDS, LGLREADS  , PHYREADS  , SEQREADS  , RANREADS  , CREATED   ,
       LASTCHG  , LASTSAVE  , LASTRST   , LASTUSED  , DAYSUSED  , LASTRESET ,
       NEXTVALUE, LOWINCL   , LOWVALUE  , HIGHINCL  , HIGHVALUE , NBRPKEYS  ,
       PARTKEYS , KEEPINMEM , MEDIAPREF , LASTSRCUPD, SRCTYPE   , "VOLATILE",
       "LABEL"  , PARTIALTX , APYRCVLIB , APYRCVNAME, SYS_DNAME , SYS_TNAME ,
       SYS_MNAME
  FROM QSYS2.SYSPARTITIONSTAT          
 WHERE SYSTEM_TABLE_MEMBER = 'MENU'
 ORDER BY 1, 2, 3

Nell’esempio il sorgente cercato ha il nome ‘MENU’

TABSCHEMA  TABNAM TABPART PARTNBR CARD SIZE   LASTSAVE         SRCTYPE LABEL                      SYS_DNAME  SYS_TNAME SYS_MNAME
LIBSR1     QCMDSR MENU    27      4    8192   09/05/2023 23:49 CMD     Avvio Menu                 LIBSR1     QCMDSRC   MENU
LIBSR1     QRPGSR MENU    91      986  98304  09/05/2023 23:49 RPG     Programma di gestione menu LIBSR1     QRPGSRC   MENU
HALSRC     HALOBJ MENU    66      1170 151552 10/05/2023 08:33 RPGLE   Programma di gestione menu HALSRC     HALOBJ    MENU
LIBBCK001  HALOBJ MENU    73      1017 139264 09/05/2023 23:49 RPGLE   Programma di gestione menu LIBBCK001  HALOBJ    MENU
LIBBCK015  HALOBJ MENU    1       1176 155648 09/05/2023 23:49 RPGLE   Programma di gestione menu LIBBCK015  HALOBJ    MENU
LIBBCK065  HALOBJ MENU    1       1018 139264 09/05/2023 23:49 RPGLE   Programma di gestione menu LIBBCK065  HALOBJ    MENU
LIBBCK112  HALOBJ MENU    1       1138 155648 09/05/2023 23:49 RPGLE   Programma di gestione menu LIBBCK112  HALOBJ    MENU
LIBBCK114  HALOBJ MENU    1       1176 155648 09/05/2023 23:49 RPGLE   Programma di gestione menu LIBBCK114  HALOBJ    MENU
LIBBCK156  HALOBJ MENU    1       1170 155648 09/05/2023 23:49 RPGLE   Programma di gestione menu LIBBCK156  HALOBJ    MENU
LIBSRC_OLD HALOBJ MENU    1       1138 155648 09/05/2023 23:49 RPGLE   Programma di gestione menu LIBSRC_OLD HALOBJ    MENU

Esempio di alcune colonne del risultato

Nota sul comando SQL:

Possono verificarsi dei casi in cui il comando SQL “sembra” non funzionare o peggio ancora che alcuni dati che dovrebbe estrarre non vengano “trovati”.
Questo succede se lo strumento con cui viene eseguito il comando SQL (STRSQL nativo AS400, strumenti esterni via ODBC, JDBC, OLEDB, ecc.) riscontra dei problemi nella conversione dei valori presenti all’interno delle varie colonne estratte (spesso dovuti a CCSID incompatibili fra Sistemi).
In circostanze di questo genere è necessario individuare per tentativi quali colonne NON estrarre o tentare di estrarre effettuando la conversione a carattere con la funzione “Char(colonna)”.

Articoli simili