02 - Database DB2 for i02a - SQL

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

--- 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.

Rispondi

%d blogger hanno fatto clic su Mi Piace per questo: