DSPPGMREF elenca gli oggetti a cui fanno riferimento i programmi: file, aree dati, altri programmi, programmi di servizio. Con OUTPUT(*OUTFILE) scrive l'elenco in un file di database e da lì una query dice quali programmi usano un file, che è la domanda da farsi prima di cambiarne il tracciato.
Il file dei riferimenti
DSPPGMREF PGM(MIALIB/*ALL) OUTPUT(*OUTFILE) OUTFILE(QTEMP/RIFERIMENTI)
PGM accetta anche *ALLUSR come libreria per tutte le librerie utente; OBJTYPE dice quali oggetti guardare (*PGM, *SRVPGM, *MODULE, *SQLPKG, *QRYDFN, oppure *ALL). Il file prodotto ha il formato QWHDRPPR del file QADSPPGM di QSYS: una riga per ogni coppia programma-oggetto.
La query
SELECT WHLIB, WHPNAM, WHFUSG
FROM QTEMP.RIFERIMENTI
WHERE WHFNAM = 'ARTICOLI'
AND WHOTYP = '*FILE'
ORDER BY WHLIB, WHPNAM;
WHFUSG è l'uso del file da parte del programma, come somma di codici:
| Codice | Uso |
|---|---|
| 1 | lettura |
| 2 | scrittura |
| 4 | aggiornamento |
| 8 | non specificato |
Un 7 è lettura, scrittura e aggiornamento; un 5 lettura e aggiornamento. Prima di aggiungere un campo a un file, i programmi con 2 o 4 nel codice sono quelli da guardare per primi.
Che cosa non vede
DSPPGMREF mostra quello che il compilatore ha registrato quando il programma è stato creato. Da qui vengono i suoi limiti, scritti da IBM:
- Nomi in una variabile. In un CL, se il nome del file sta in una variabile, viene registrato il nome della variabile (
&FILE); se è un'espressione,*EXPR. In COBOL una chiamata con un identificatore invece di un letterale (chiamata dinamica) non viene registrata. - Linguaggi con poche informazioni. Per ILE C solo i programmi di servizio, né file né programmi; per un programma C non ILE niente.
- Nomi del giorno della compilazione. Se l'oggetto è stato spostato dopo, o c'era un override durante la compilazione, il nome registrato può essere diverso da quello vero.
- Righe che non spariscono. Con
UPDPGMeUPDSRVPGMsi aggiungono riferimenti, ma non se ne tolgono mai. - SQL. Le tabelle, le viste e gli indici usati dall'SQL incorporato sono registrati, con la libreria scritta come nel sorgente: con i nomi di sistema, un nome non qualificato e senza
DFTRDBCOLresta*LIBL. L'SQL dinamico, costruito a tempo di esecuzione, non c'è. - L'area dati locale non viene registrata.
Il risultato quindi dice con certezza chi usa un file; non dice con certezza che nessun altro lo usi.
Esempio
Nomi di libreria, file e programmi inventati.
Si deve allungare il campo descrizione del file ARTICOLI. DSPPGMREF su GESTLIB e la query danno 23 programmi: 17 con codice 1, 4 con 5, 2 con 3. I 6 che scrivono o aggiornano si guardano uno per uno; i 17 che leggono si ricompilano, perché il formato cambia.
Poi si cerca quello che DSPPGMREF non vede: i CL con il nome in una variabile si trovano cercando nella query WHFNAM LIKE '&%' e WHFNAM = '*EXPR' e per ciascuno si legge il sorgente; per l'SQL dinamico si cerca il nome del file nei sorgenti con FNDSTRPDM.
Su quali versioni funziona
DSPPGMREF è supportata dalla 7.1 in poi.
Commenti
Nessun commento ancora. Sii il primo a commentare!
Devi avere un account per commentare. Accedi · Registrati