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

Recent Posts

IBM i: La gestione del sistema è più semplice di quanto pensi

Con questo post voglio consigliarti la lettura di questo articolo di Giancarlo Lui sulla TechXChange Community: IBM i System Management:…

2 mesi ago

RPG Free e option(*convert) per una migliore gestione parametri

Nel suo recente articolo "Option *convert in RPG Free" , Aldo Succi esplora l'opzione *CONVERT nel linguaggio RPG, evidenziando come…

2 mesi ago

Aggiornamento Certificati CA per BCE: Guida Pratica

Guida pratica all'aggiornamento dei certificati Java e DCM per consumo web services via SQL HTTPGETCLOB e HTTP_GET.

2 mesi ago

Gestione dei file video bloccati su IBM i: una soluzione efficace

Riceviamo e pubblichiamo ben volentieri questo "tip & trick" di Patrick Rizzi che presenta una tecnica che permette di intervenire…

6 mesi ago

Monitoraggio Messaggi QSYSOPR: SQL per Ottenere Messaggi e Reply

Prendo spunto da una risposta di Michael Mayer sulle mailing list di Midrange.com a chi chiedeva come monitorare i messaggi…

6 mesi ago

Perché l’ERP è la Chiave del Successo per le Imprese Moderne

Le imprese sono sempre più alla ricerca di strumenti che possano migliorare l'efficienza, la collaborazione e la gestione delle risorse.…

8 mesi ago