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” di queste Faq le potete trovare in fondo a questo post negli “Articoli Corretali” … ma veniamo alle nuove FAQ:

iDB2-FAQ-031 – QYS2.IFS_OBJECT_PRIVILEGES … DB2 for i Service … per controllare autorizzazioni di oggetti IFS

Se avete la fortuna e l’attenzione di stare aggiornati con il sistema operativo e avete installato la TR8 per 7.3 o la TR2 per 7.4 avete a disposizione un ottimo DB2 for i service per il controllo delle autorizzazioni di file e directory IFS; “IFS_OBJECT_PRIVILEGES”:

select * from table (
QSYS2.IFS_OBJECT_PRIVILEGES( path_name=>'/home/faq400/*');

Ce ne parlano Tim Rowe e Scott Forstie in questo webinar del Commo: Manage your IFS with IBM i services

iDB2-FAQ-032 – Creare CSV con SQL (con “Leading Zeros” per i numeri decimali da -1 a +1)

Prendendo spunto da una richiesta sulle mailing list di Midrange.com dove si chiedeva come ottenere un CSV mantenendo i “leading zeros” dai numeri decimali (da -1 a +1) come nel caso del valore 0.12 da portare nel CSV come “0.12” e non “.12” come fa il normale comando CPYTOIMPF.

Ho trovato su Gist Github delle ottime procedure SQL di Niels Liesberg … con poche righe in più alla procedura SQL_TO_CSV di Niels possiamo mantenere i Leading Zeros nel CSV creato!

Ecco i pochi e semplici passi:

Alla ottima procedura di Niels applicare questa semplice modifica

            .....
            get descriptor 'modified' value colNo
                colValue = DATA;
            
            --------------------------------    
            -- Start FAQ400 Modifications
            ---------------------------------
            
            -- If is a number from -1 to +1 add a leading 0 (example .12 --> 0.12)
            if colType in (2, 3) then
               if to_number(colValue)>0 and to_number(colValue)<1 then
                  set colValue = '0' concat colValue;
               elseif to_number(colValue)>-1 and to_number(colValue)<0 then
                  set colValue = '-0' concat substr(colValue, 2);
                  end if;
            end if;
            
            --------------------------------    
            -- End FAQ400 Modifications
            ---------------------------------
            
            
            if colType in (1, 12) then -- char or varchar
            ....

Ora proviamo a creare un CSV da una semplice tabella con dati numerici, decimali, negativi ecc

create table faq400.testtable 
 (alfa01 char(10),
  num01  decimal(15, 2),
  num02  decimal(15, 4));
  
  
  insert into faq400.testtable
  (alfa01, num01, num02)
  values('A', 0.12, 0.1234),
        ('B', 1.12, 1.1234),
        ('C', 0.00, 100),
        ('D', -0.10, -0.1234);
        
call QUSRSYS.sql_to_csv(
   sql_statement => 'SELECT * FROM faq400.testtable',
   output_file   => '/tmp/testtable.csv'
);

E questo è il risultato (considerando che in Italia usiamo la virgola decimale):

iDB2-FAQ-033 – Leggere le variabili di Ambiente ENVVAR da SQL?

Dai nostri programmi RPG possiamo leggere i valori delle variabili di ambiente ENVVAR con le apposite API di sistema … oppure utilizzare questa ottima procedura SQL di Niels Liesberg:

ENVVAR.SQL – https://gist.github.com/NielsLiisberg/093b9bc18b603abac5a297ec239aa690

iDB2-FAQ-034 – Tenere sotto controllo la directory /tmp di IFS

Nella directory /tmp di IFS spesso si accumulano file temporanei … con poche righe di SQL proposte da Scott Forstie in uno dei suoi Gist di Github, riusciamo a tenerlo sotto controllo:

Bringing order to the IFS: https://gist.github.com/forstie/eb619063f46284365901dc88033bc6ce

iDB2-FAQ-035 – Vari formati di timestamp

Timestamp e precisione decimale … ce ne parla Simon Hutchinson su RPGPGM.COM – SQL NOW and playing with timestamps

SELECT NOW() AS NONE,
         NOW(0) AS ZERO,
         NOW(1) AS ONE,
         NOW(6) AS SIX,
         NOW(12) AS TWELEVE
  FROM SYSIBM.SYSDUMMY1;

Dalla TR2 della 7.4 (o TR8 per la 7.3) , in RPG, è disponibile anche un livello superiore di precisione a 32 decimali …. con la %BIF %TIMESTAMP(*UNIQUE).

Vedi IBM i 7.4 – TR2 Enhancements

iDB2-FAQ-036 – QSYS.QADBFDEP Alternativa SQL a DSPDBR

Esiste una ottima alternativa SQL al comando DSPDBR per vedere logici, index, viste e MQT legate, ad esempio, ad una tabella – phisical file … eccone un esempio di utilizzo:

Select *
From QSYS.QADBFDEP
Where dbffil = 'MYTABLE' and dbflib='MYLIB';

Maggiori informazioni in questo post di RPPGM.COM: Getting database relationships using SQL

iDB2-FAQ-037 – Cercare nelle stringhe (campi char-varchar) dei caratteri “speciali”

Se dobbiamo creare l’apostrofo oppure il segno percentuale o l’underscore dentro i campi char/varchar di una tabella dobbiamo utilizzare i caratteri Escape … come già ne parlavamo nella iDB2-FAQ-001 “Come faccio a cercare % Percentuale o _ Underscore con SQL LIKE?“

Anche in questo post su RPGPGM.COM Simon Hutchinson ne parla: “Searching for reserved characters in SQL“

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

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…

11 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…

11 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…

12 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…

12 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…

1 anno 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…

1 anno ago