02a - SQL

Creare SQL Views per interpretare QSYS2.DISPLAY_JOURNAL

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

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

  • Ciao molto interessante e pratico. grazie per aver condiviso. Nel comando di creazione della procedura si fa riferimento a CRTJOUVIEW ... che non trovo

Recent Posts

VsCode Extension: Bob Cozzi’s RPG IV to RPG Free Conversion

L’estensione “RPG IV to Free Format Conversion” sviluppata da Bob Cozzi (Cozzi Research) è pensata per semplificare la conversione di…

10 mesi ago

IBM i & SQL Tips #010 – Localizzare programmi nella Call Stack con STACK_INFO

Ciao a tutti, oggi voglio segnalarvi un altro interessante contributo di Massimo Duca, parte della sua ormai nota serie IBM…

10 mesi ago

Display file DDS Edit per VsCode, nuova preview.

Incuriosito da alcuni messaggi di Cristian Larsen su Linkedin (New Release - Display File DDS Edit v.0.10.1) ho voluto scaricare…

10 mesi ago

Project Bob: il nuovo strumento AI di IBM per sviluppo COBOL su IBM Z e RPG su IBM i

Ciao a tutti,oggi voglio segnalarvi un annuncio che potrebbe segnare una svolta per lo sviluppo applicativo su ambienti IBM: Project…

10 mesi ago

IBM i & SQL Tips #6: chiamare API REST e analizzare le risposte JSON con SQL

Voglio segnalarvi un nuovo articolo molto interessante di Massimo Duca nella serie IBM i & SQL Tips. In questo sesto…

11 mesi ago

Come funziona il passaggio di parametri a un programma IBM i (RPG / Cobol)

Ciao a tutti, voglio segnalarvi un post molto utile di Marco Riva sul suo sito Markonetools, in cui spiega in…

11 mesi ago