Leggere uno spooled file con SQL

Accedi per salvare

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.

← Torna al blog

Commenti

Nessun commento ancora. Sii il primo a commentare!

Devi avere un account per commentare. Accedi · Registrati