02a - SQL

Creare SQL Views per interpretare QSYS2.DISPLAY_JOURNAL

Last Updated on 10 Marzo 2023 by Roberto De Pedrini

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:

  • Libreria del Journal
  • Nome della tabella (System Name o SQL Name)
  • Libreria del Journal
  • Nome del Journal
  • Libreria dove si vuole creare la View
  • Nome della View
  • Flag Y/N per eventuale REPLACE della View
  • Global Variable (o hsot variable da SQL Embedded) dove tornare lo statement SQL della CREATE VIEW (opzionale)
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

Related Posts
DB2 for i SQL – Stringhe – POSSTR-LOCATE-LOCATE_IN_STRING (IT)

Introduzione Spesso, nelle nostre applicazioni, abbiamo la necessità di lavorare con le stringhe di testo e l'SQL del DB2 può Read more

DB2 for i & SQL – FAQ & Howto (Part. 1) (IT)

Database DB2 e SQL ... forse lo strumento più potente e completo che abbiamo sulla piattaforma IBM i: ecco una Read more

Annuncio IBM i 7.4

Arriva direttamente con l'uovo di Pasqua questo annuncio IBM per le novità della versione IBM i 7.4, versione iNext secondo Read more

Generated Always Columns – Approfondimenti (IT)

Introduzione "Generated Always Column": sono colonne, campi, di una tabella il cui contenuto è controllato direttamente dal sistema ... e Read more

--- Roberto De Pedrini Faq400.com
About author

Founder di Faq400 Srl, IBM Champion, ideatore del sito Faq400.com e del Blog blog.faq400.com. Sviluppatore RPG da quando avevo i pantaloni corti, forte sostenitore della piattaforma IBM i (ex AS400), ho sempre cercato di convididere le mie conoscenze con gli altri tramite forum, eventi e corsi. Oggi, tramite Faq400 Srl, cerchiamo di aiutare le aziende a sfruttare al meglio questa fantastica piattaforma IBM i.

1 Comment

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *