02 - Database DB2 for i02a - SQL02c - Varie Database DB2 for i

“Compilare” gli oggetti SQL nelle librerie desiderate – 1

Il linguaggio di definizione dati dell’SQL (DDL, Data Definition Language) permette di creare tutta una serie di oggetti, alcuni dei quali paragonabili ai tradizionali oggetti IBM i (es. tabelle ed indici), altri invece specifici del DB2 (funzioni, procedure, alias, ecc..). Questi oggetti vengono solitamente generati a partire da script memorizzati in un membro sorgente o in file di flusso IFS ed elaborati poi dal comando RUNSQLSTM.
Questo comando non ha però nessun parametro “Libreria oggetti” nel quale indicare la destinazione dell’oggetto che si sta creando (come nei comandi di compilazione standard). La libreria oggetti di default è la libreria corrente del lavoro (la *CURLIB); è possibile indicare la libreria di destinazione direttamente nel sorgente degli script, ma questa non è certo una pratica consigliabile… si pensi solo al caso in cui si debba distribuire uno stesso oggetto in più librerie; con questa tecnica saremmo costretti a creare uno script per ogni libreria (oppure a modificare di volta in volta lo script cambiando il nome della libreria). Non proprio una tecnica ideale.
Il comando RUNSQLSTM ha però un parametro che passa abbastanza inosservato, e che dà la soluzione: si tratta di DFTRDBCOL (Raccolta predefinita). Questo parametro permette di specificare la libreria (o meglio lo schema) da applicare a tutti gli oggetti non qualificati che compaiono nello script da eseguire.
Esempio:

RUNSQLSTM SRCFILE(MDUCA1/QSQLSRC) SRCMBR(TEST001) DFTRDBCOL(MDUCA1)

Grazie a questa caratteristica, è possibile costruire una opzione PDM o un comando personalizzato RDi per “compilare” gli script SQL:

RUNSQLSTM SRCFILE(&L/&F) SRCMBR(&N) COMMIT(*NONE) DFTRDBCOL(&L)

Gli script SQL si possono anche memorizzare in file IFS, infatti il comando RUNSQLSTM ha un apposito parametro (SRCSTMF) in cui specificare il file contenente lo script, in alternativa al classico membro di file source.

RUNSQLSTM SRCSTMF(/home/MDUCA/QSQLSRC/TEST001.sqltable) COMMIT(*NONE) DFTRDBCOL(MDUCA1)

Mettiamo qui a disposizione XCRTSQL, un piccolo comando che interfaccia RUNSQLSTM richiedendone i parametri basilari, e che può essere utilizzato come comando di “compilazione” per tutti gli oggetti derivati da script SQL. Il comando permette di indicare in modo “tradizionale” la libreria di destinazione dell’oggetto, la provenienza del source (libreria/file/membro oppure file IFS) e richiede il rilascio di destinazione in modo da gestire alcune feature dei comandi SQL che sono disponibili solo a partire da alcune versioni di IBM i.
Nel gestire sorgenti SQL in classici membri di un file source, è buona norma utilizzare un tipo di membro che ne identifichi il contenuto; personalmente adotto questo schema:

SQLTABLE	Tabelle
SQLVIEW		View
SQLINDEX	Indici
SQLUDF		Funzioni (UDF, UDTF)
SQLPROC		Procedure
SQLTRG		Trigger
SQLALIAS	Alias

Il programma CL di elaborazione verifica che il tipo di membro sia uno di questi, viene accettato anche un tipo membro generico (“SQL”). Al termine della “compilazione” viene emesso un messaggio con l’esito. Per i membri di file source viene inoltre impostato il parametro MARGIN con il valore corretto in base alla dimensione del file source.
Di seguito il link GitHub per scaricare i sorgenti, che ovviamente ognuno può personalizzare a piacimento:

https://github.com/MD2706GIT/XCRTSQL

Attenzione: il parametro DFTRDBCOL adotta la libreria indicata per tutti gli oggetti non qualificati dello script; quindi nel caso venissero indicati oggetti contenuti in più librerie, questo approccio non funziona, o può dare risultati indesiderati. Pensiamo per esempio ad una VIEW che mette insieme dati provenienti da tabelle presenti in diverse librerie.
In questo caso quindi, niente da fare ? Ci tocca per forza specificare le librerie nel source ?
Prima di arrendersi, una soluzione la si può trovare comunque… la vedremo nella prossima puntata !

Documentazione:
Comando RUNSQLSTM: https://www.ibm.com/support/knowledgecenter/en/ssw_ibm_i_74/cl/runsqlstm.htm

About author

Senior Analyst/Developer e divulgatore in ambito IBM i. Già collaboratore dell'edizione italiana della rivista "System i News" ed autore di diverse pubblicazioni su tools e tecniche di sviluppo in ambiente IBM i.

Rispondi

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