Prima serviva CPYSPLF in un file fisico e poi una query su quello. Dal rilascio 7.3 il
contenuto si legge direttamente.
SELECT ORDINAL_POSITION, SPOOLED_DATA
FROM TABLE(SYSTOOLS.SPOOLED_FILE_DATA(
JOB_NAME => '123456/UTENTE/CHIUSURA',
SPOOLED_FILE_NAME => 'QPJOBLOG'))
ORDER BY ORDINAL_POSITION
Per cercare una riga dentro il log di un job:
SELECT SPOOLED_DATA
FROM TABLE(SYSTOOLS.SPOOLED_FILE_DATA(
JOB_NAME => '123456/UTENTE/CHIUSURA',
SPOOLED_FILE_NAME => 'QPJOBLOG'))
WHERE SPOOLED_DATA LIKE '%CPF%'
Esempio: ricontrollare un report senza rieseguirlo
Il report della chiusura è già stampato, e qualcuno chiede se un totale è giusto. Rieseguire l'elaborazione per rispondere costa tempo e, se nel frattempo i dati si sono mossi, dà un numero diverso, che non risponde alla domanda.
Le righe che interessano si pescano dallo spool com'è:
SELECT ORDINAL_POSITION, SPOOLED_DATA
FROM TABLE(SYSTOOLS.SPOOLED_FILE_DATA(
JOB_NAME => '123456/UTENTE/CHIUSURA',
SPOOLED_FILE_NAME => 'QSYSPRT'))
WHERE SPOOLED_DATA LIKE '%TOTALE%'
ORDER BY ORDINAL_POSITION
I report sono a colonne fisse, quindi da lì il numero si isola per posizione e si somma:
SELECT SUM(DEC(REPLACE(SUBSTR(SPOOLED_DATA, 95, 14), '.', ''), 15, 2)) AS TOTALE
FROM TABLE(SYSTOOLS.SPOOLED_FILE_DATA(
JOB_NAME => '123456/UTENTE/CHIUSURA',
SPOOLED_FILE_NAME => 'QSYSPRT'))
WHERE SPOOLED_DATA LIKE '%TOTALE%'
Le posizioni (qui 95 e 14) vanno lette sul report vero, e cambiano a ogni stampa diversa. Il punto non è questa query: è che il documento stampato diventa una fonte interrogabile, e la verifica si fa su quello che il cliente ha in mano invece che su una riesecuzione.
Nota
il nome del job va scritto per intero, numero compreso, nella forma
numero/utente/nome. WRKACTJOB lo mostra su tre colonne separate: vanno unite con la
barra. Se ci sono più file di spool con lo stesso nome, si aggiunge
SPOOLED_FILE_NUMBER => n per scegliere quale.
Rilasci. SYSTOOLS.SPOOLED_FILE_DATA è disponibile dal 7.3; sui rilasci precedenti
arrivava con un PTF di gruppo Db2 e non è detto sia stato applicato. Per sapere se c'è, basta
eseguire la query: se manca, il sistema risponde SQL0204 (oggetto non trovato).
Sui sistemi dove non c'è resta la via lunga: CPYSPLF in un file fisico e query su quello.
Commenti
Nessun commento ancora. Sii il primo a commentare!
Devi avere un account per commentare. Accedi · Registrati