Quasi nascosta tra i molti utili strumenti messi a disposizione da IBM nella libreria SYSTOOLS, troviamo la procedura LPRINTF. Questa procedura fa una cosa molto semplice: scrive un messaggio nel job log del lavoro che la richiama; ha un solo parametro di tipo VARCHAR in cui passare la stringa di caratteri da mostrare nel log. Di fatto, LPRINTF interfaccia la API Qp0zLprintf, rendendola facilmente richiamabile anche con SQL.
A cosa può servire LPRINTF ? Ci sono varie situazioni in cui può essere utile scrivere nel joblog delle informazioni aggiuntive rispetto a quelle fornite dal sistema. Un esempio significativo è quello di programmi in cui le istruzioni SQL vengono costruite dinamicamente in un campo, inserendo anche delle variabili. Dopo aver composto l’istruzione, con LPRINTF si può caricare nel job log la stringa che la contiene, in modo da poter verificare cosa non va in caso di errore o di funzionamento non desiderato.
Per richiamare LPRINTF da un programma RPG è sufficiente eseguire questa istruzione SQL:

         Exec SQL
            CALL SYSTOOLS.LPRINTF(:message) ;

Vediamo un esempio di programma che compone dinamicamente una istruzione SQL che popola una tabella, usando anche delle variabili. Di seguito l’istruzione che imposta lo statement SQL:

sqlStmt = 'CREATE TABLE mduca1.Faq40013T AS (' +    
'SELECT CodCliente, RagioneSociale, NazCl, '   +    
'd.Articolo, Descrizione, SUM(OrdQty)         '  +  
'FROM AnCli00f '                             +      
'JOIN OrdDt00f d ON CodCliente = OrdCli '    +      
'JOIN AnaArt00f a ON a.Articolo = d.Articolo ' +    
'WHERE NazCl = ' + pNation +  ' '     +             
'GROUP BY CodCliente, RagioneSociale, NazCl, ' +    
'd.Articolo, Descrizione '                     +    
'ORDER BY CodCliente)'                         +    
' WITH DATA'                                        
;    

Il programma estrae dall’anagrafica tutti i clienti della nazione ricevuta come parametro, insieme ad altri dati da ordini di vendita e anagrafica articoli, e li scrive nella tabella FAQ40013T.
Lanciamo il programma e verifichiamo il risultato.

call faq40013 parm('IT') 

Il programma non ha creato la tabella… normalmente dovremmo attivare il debug, rilanciare il programma e vedere il contenuto della variabile sql per capire il problema… ma con LPRINTF, è sufficiente visualizzare il job log del lavoro per avere sott’occhio l’istruzione:

Ecco l’errore: è stata definita una colonna con la funzione scalare SUM, ma non gli è stato assegnato un nome. L’istruzione CREATE TABLE richiede che ogni colonna della tabella che si va a creare abbia la sua denominazione univoca.
Correggiamo, rilanciamo e vediamo se funziona:

C’è ancora qualche problema… vediamo quale.

Stavolta mancano gli apici intorno al codice della nazione… correggiamo ancora e vediamo se questa è la volta buona !

Ora è tutto OK ! Grazie alla possibilità di vedere direttamente nel joblog l’istruzione, abbiamo potuto risolvere i problemi molto più velocemente. Ovviamente questo è un esempio semplice, ma in presenza di istruzioni SQL molto più complesse, l’aiuto di LPRINTF si rivela più prezioso.
Naturalmente nulla vieta di sfruttare LPRINTF per scrivere nel joblog qualsiasi altra informazione si ritenesse utile per monitorare meglio le proprie applicazioni.

La procedura LPRINTF è disponibile nel prodotto DB2 for i dalle versioni 7.3 (level 16) e 7.4 (level 4)

Il source completo del programma è disponibile su GitHub: https://github.com/MD2706GIT/FAQ400/blob/master/FAQ40013.sqlrpgle

DOCUMENTAZIONE:
Procedura LPRINTF: https://www.ibm.com/support/pages/systoolslprintf-procedure

Related Posts
HAI LETTO IL MANUALE ?

È la domanda che faccio sempre ai miei colleghi programmatori quando mi chiedono qualcosa: "Hai letto il manuale?". Lo sappiamo, Read more

SQL and DB2 for i – FAQ & Howtos – (Parte 4 IT)

Eccoci alla quarta parte di questo "FAQ & Howtos" per SQL e DB2 for i ... le precedenti 3 "puntate" Read more

SQL and DB2 for i – FAQ & Howtos – (Parte 3 IT)

iDB2-FAQ-021 – Stored Procedure e Linked Server da MS SQL Server a DB2 for i From Microsoft MS SQL Server Read more

Gestione del Sistema IBM i: FAQ & Howto (Parte 4) IT

Questa è la terza parte della raccolta di FAQ & Howto sulla gestione del sistema IBM i : puoi vedere Read more

About author

Senior Analyst/Developer e divulgatore in ambito IBM i. Già collaboratore dell'edizione italiana della rivista "System i News" ed autore di diverse pubblicazioni su tools e tecniche di sviluppo in ambiente IBM i.

Rispondi

%d blogger hanno fatto clic su Mi Piace per questo: