01 - Programmazione

QUANDO LA QTEMP NON BASTA

Last Updated on 6 Marzo 2020 by Roberto De Pedrini

Chi sviluppa applicazioni IBM i conosce molto bene la libreria QTEMP, la libreria temporanea che il sistema crea e distrugge automaticamente per ogni lavoro. Ma non sempre può essere usata; per esempio, il comando RTVDIRINF (Richiamo informazioni indirizzario) non accetta la libreria QTEMP; oppure, in certe applicazioni particolari c’è bisogno di creare degli oggetti temporanei che però devono essere condivisi con altre applicazioni. Può essere quindi utile avere delle alternative alla QTEMP. Vediamone alcune.

La directory /tmp è una directory che può essere usata per creare dei stream file temporanei. Se decidete di usare /tmp è importante sapere che la utility Unix clrtmp pulisce la directory /tmp cancellando tutti i file presenti. In altri sistemi, la directory /tmp viene pulita ogni volta che il sistema viene avviato; in IBM i, la directory /tmp non viene pulita all’avvio del sistema, quindi bisogna eseguire il comando ‘QSH CMD(clrtmp)’ nel programma di avvio specificato dal valore di sistema QSTRUPPGM per pulire la directory /tmp immediatamente dopo IPL, l’unico momento in cui abbiamo la certezza che nessun file è usato. Prima di creare dei file nella directory /tmp bisogna pensare ad un metodo per evitare che i lavori si pestino i piedi tra di loro; una buona soluzione è quella di creare i file in una sub directory con il nome qualificato del lavoro, per esempio ‘/tmp/[job-user]/[job-name]/[job-number]’ avendo cura di cancellarla alla fine del lavoro con il comando RMVDIR (Rimozione indirizzario) perché, a differenza della libreria QTEMP, la directory /tmp non è legata al lavoro, quindi sappiate che i file creati in /tmp sono a disposizione di tutti gli utenti in possesso di adeguata autorizzazione.

Analogamente alla directory /tmp, potrebbe essere comodo creare uno schema temporaneo per ogni lavoro in cui creare degli oggetti temporanei. Anche in questo caso il nome qualificato del lavoro ci aiuta ad avere una buona univocità, quindi possiamo creare lo schema con l’istruzione SQL ‘CREATE SCHEMA xxxxx_[job-user]_[job-name]_[job-number]’ dove xxxxx è un prefisso dedicato a questi schema, a cui il sistema assegna automaticamente il nome libreria ‘xxxxxnnnnn’ dove nnnnn è un progressivo da 00001 a 99999 gestito dal sistema. Il nome della libreria può essere facilmente reperito con l’istruzione SQL ‘GET DIAGNOSTICS CONDITION 1 :[host-variable] = MESSAGE_TEXT’ eseguita dopo la creazione dello schema, che restituisce il messaggio ‘Schema xxxxxnnnnn creato’. Al termine del lavoro è buona regola cancellare lo schema con l’istruzione ‘DROP SCHEMA’ per non correre il rischio di superare le 99999 librerie e nel programma QSTRUPPGM inserire il comando ‘DLTOBJ OBJ(QSYS/xxxxx*) OBJTYPE(*LIB)’.

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

About author

Dal 1989 sviluppo applicazioni gestionali per IBM i.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *