I sorgenti (statement SQL) di questo post sono disponibili su Github a questo link : https://github.com/Faq400Git/Create_Display_Journal_Table_View
Personalmente sono un grande fan degli IBM i Services, quella serie di Funzioni SQL (UDF e UDTF) e Stored Procedure che, ad ogni Technology Refresh, si arricchisce nel numero e nelle funzionalità.
La QSYS2.DISPLAY_JOURNAL è una UDTF ormai presente dalla 7.1 del sistema operativo, ed è una ottima alternativa al comando DSPJRN per interrogare le registrazione nei Journal Receiver.
Interrogare gli eventi del Journal non è mai stato così semplice: una istruzione SQL è in grado di estrarre da un Journal (o meglio dai Journal Receiver di un Journal) tutti gli eventi riguardanti una o più tabelle sotto controllo.
Finché si tratta di interrogare le informazioni riguardo all’evento sulla tabella (ad esempio tipo evento (insert/delete/update..), il data/ora evento, utente, job ecc) QSYS2.DISPLAY_JOURNAL è veramente fantastica, ma se abbiamo bisogno di interpretare il contenuto del campo ENTRY_DATA (il campo Blob con l’immagine del record) la cosa non è proprio così immediata.
Cercando qua e là so Google ho trovato diversi modi per leggere/interpretare il contenuto di questo campo ENTRY_DATA:
Nonostante le mie ricerche su Google non ho mai trovato nessuno che mi permettere di leggere ed interpretare le Journal Entries direttamente con SQL senza impazzire nel mappare campo campo a seconda della tabella di mio interesse.
Ecco allora l’idea: creare una Stored Procedure SQL che legge dal catalogo SYSCOLUMNS nomi, tipi, lunghezze e offset dei campi e crea in automatico una SQL View sulla table function QSYS2.DISPLAY_JOURNAL … insomma qualcosa che faccia per me lo sporco lavoro di mappare tutto il campo ENTRY_DATA a seconda della tabella interessata.
Una volta creata la Stored Procedure quindi sarà sufficiente richiamarla passandogli i seguenti parametri:
call FAQ400.CREATE_DISPLAY_JOURNAL_TABLE_VIEW(MYTABLE_LIBRARY => 'FAQ400JOU',
MYTABLE_NAME => 'MYSAMPLETABLE',
MYJOURNAL_LIBRARY => 'FAQ400JOU',
MYJOURNAL_NAME => 'QSQJRN',
MYVIEW_LIBRARY => 'FAQ400JOU',
MYVIEW_NAME => 'V_MYSAMPLETABLE_AUDIT2',
CREATEANDREPLACE => 'Y',
MYCMD => FAQ400.GV_VARCHAR);
E poi interrogare la view per vedere le registrazioni nel Journal della tabella interessata:
select * from FAQ400JOU.V_MYSAMPLETABLE_AUDIT;
Ottenendo qualcosa simile a queste due immagini
Il sorgente della stored procedure CREATE_DISPLAY_JOURNAL_TABLE_VIEW, e qualche esempio di utilizzo, lo puoi trovare nel mio Github a questo link: https://github.com/Faq400Git/Create_Display_Journal_Table_View
--- Roberto De Pedrini Faq400.comCon questo post voglio consigliarti la lettura di questo articolo di Giancarlo Lui sulla TechXChange Community: IBM i System Management:…
Nel suo recente articolo "Option *convert in RPG Free" , Aldo Succi esplora l'opzione *CONVERT nel linguaggio RPG, evidenziando come…
Guida pratica all'aggiornamento dei certificati Java e DCM per consumo web services via SQL HTTPGETCLOB e HTTP_GET.
Riceviamo e pubblichiamo ben volentieri questo "tip & trick" di Patrick Rizzi che presenta una tecnica che permette di intervenire…
Prendo spunto da una risposta di Michael Mayer sulle mailing list di Midrange.com a chi chiedeva come monitorare i messaggi…
Le imprese sono sempre più alla ricerca di strumenti che possano migliorare l'efficienza, la collaborazione e la gestione delle risorse.…
View Comments
Salve ROBERTO,
mi interessava molto quest'articolo ma credo che la funzione QSYS2.DISPLAY_JOURNAL non sia disponibile dalla 7.1 ma dalla 7.3
Il nostro sistema è alla 7.2 e mi dice che non trova il file.
Ps. Non sono esperto di QSYS2 e UDTF ma mi interessava molto poter leggere i dati dai giornali.
Un caro saluto e grazie