Scrivere file con Oracle

Oggi tratteremo un argomento molto semplice. Si tratta della gestione dei file da parte di Oracle.

Oracle consente di poter leggere/scrivere dei file attraverso un package standard: UTL_FILE; che mette a disposizione tutti i metodi necessari per poter eseguire qualsiasi operazione sui file.

Una piccola raccomandazione: Prima di poter utilizzare il package, assicurarsi che l’utenza funzionale, cui impostare la stored procedure/package di utilizzo dei file, disponga delle grant di execute per poter usare il package. Se non dispone di tali grant, chiedere all’amministratore del Database di fornirle.

Come prima cosa, occorre indicare ad Oracle dove si intende andare ad eseguire le operazioni di lettura/scrittura dei file. Per far ciò, occorre definire una DIRECTORY, ovvero indicare ad Oracle dove eseguire le varie operazioni. Per far ciò, si utilizza il seguente comando:

CREATE OR REPLACE DIRECTORY TMP_DIR AS ‘<path completo della directory>’;

Attraverso questa istruzione si indica la directory (locale al server dove è installato il DB Oracle), dove sarà possibile eseguire le varie operazioni di lettura/scrittura dei file. E’ bene ribadire che le operazioni di lettura/scrittura sono eseguite sulla macchina locale e non su dei server remoti. Se si ha la necessità di poter scrivere su dei server remoti, occorre disporre di altre procedure, che magari sfruttando il protocollo FTP, possano scrivere i file su server remoti. Package e procedure sono disponibili e saranno trattati in un altro post.

Si segnala altresì che la directory non appartiene ad uno schema specifico. Occorre quindi prestare attenzione al nome della directory da usare, in quanto è univoco per l’intero database.

Una volta che a directory è stata creata, adesso usiamo i metodi del package per scrivere un semplice file:

/*
* Codice di esempio di scrittura di un file
*/

DECLARE

lv_nome_file VARCHAR2(2000);
lv_percorso_file VARCHAR2(2000);
lv_file_id UTL_FILE.file_type;

BEGIN

lv_percorso_file := ‘<directory_definita>’;
lv_nome_file := ‘<nome_file_da_scrivere>;

— Apertura del file
lv_file_id := UTL_FILE.fopen( lv_percorso_file, lv_nome_file, ‘w’ );

— Scrittura della riga nel file
UTL_FILE.put_line(file => lv_file_id , buffer => ‘Questo è un esempio di testo scritto su di un file’ );

— Chiusura del file.
UTL_FILE.fclose(file => lv_file_id );

EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(‘Errore – ‘ || TO_CHAR(SQLCODE) || ‘ – ‘ || SUBSTR(SQLERRM,1,150));
END;

Analogamente, la lettura di un file viene eseguita con un codice similare e sfruttando gli stessi metodi.

/*
* Codice di esempio di lettura di un file
*/

DECLARE
lv_nome_file VARCHAR2(2000);
lv_percorso_file VARCHAR2(2000);
lv_file_id UTL_FILE.file_type;
lv_text VARCHAR2(32767);
BEGIN

lv_percorso_file := ‘<directory_definita>’;
lv_nome_file := ‘<nome_file_da_scrivere>;;

lv_file_id := UTL_FILE.fopen( lv_percorso_file,  lv_nome_file, ‘r’, 32767);

BEGIN

LOOP

UTL_FILE.get_line(lv_file_id, lv_text, 32767);
DBMS_OUTPUT.put_line(‘Line: |’ || lv_text || ‘|’);
END LOOP;
EXCEPTION
WHEN NO_DATA_FOUND THEN
NULL;
END;

DBMS_OUTPUT.put_line(‘Line : |’ || lv_text || ‘|’);

UTL_FILE.fclose(lv_file_id);
END;

Come si vede il package è molto semplice e consente di poter eseguire tutte le operazioni di cui si abbisogna senza grandi difficoltà.

URL di riferimento

 

  • Semplice articolo in inglese su UTL_FILE
  • Indicazioni sulle Directory di Oracle sono presenti su questo link e su questa URL.

 




Numero massimo di JOB che possono essere eseguiti sotto Oracle

Sarà comunicato a molti che, lanciando dei Jobs, questi non venissero eseguiti. Nessuna indicazione, nessun failure, niente di niente. Quindi? che cosa causa il problema?

Semplice. Oracle imposta un numero massimo di JOB che possono essere eseguiti. Se si vuole eseguire un numero maggiore, occorre controllare un parametro:

JOB_QUEUE_PROCESSES

Eseguendo la query:

Select * from v$parameter
where name like ‘%job%’

è possibile visionare il valore impostato.

La modifica del valore viene eseguita attraverso una ALTER SYSTEM, come mostrato di seguito.

alter system set job_queue_processes=10

Potete trovare un pò di informazioni aggiuntive nel seguente link.

Una piccola annotazione. Per poter eseguire l’istruzione di Alter System, occorre che l’utenza disponga delle corrispondenti grant. Fare riferimento al seguente link per ulteriori delucidazioni




Come realizzare la funzione di SLEEP in PLSQL

In alcune circostanze, occorre impostare dei ritardi nella procedura che deve essere eseguita. Fino a qualche tempo fa avevo risolto attraverso un ciclo, eseguito un tot di volte, in modo da simulare un ritardo.

Consultando il prolifico sito di Ask Tom, ho scoperto che esiste una funzione che realizza il tutto. Si tratta di:

DBMS_LOCK.SLEEP(<numero di secondi>)




Installare Oracle XE 32 bit su Windows 7 64 bit

In questo post cercherò di riassumere come sono riuscito ad installare Oracle XE 32 bit per windows, su di un sistema operativo 64 bit. In particolare, su Windows 7 Professional 64 Bit.

Avevo la necessità di disporre di un sistema Oracle su di un PC, dove era presente una installazione Windows 7 Professional, ma non ero mai riuscito a eseguire l’installazione.

Ho in prima battuta consultato diversi forum, dove si dibatteva il fatto che l’installazione di non era possibile su di un sistema a 64 bit, con le soluzioni più strane che ho visto.

Ne riporto alcuni che ho consultato:

per darvi un esempio di quanto è presente su internet.

Dopo diversi tentativi, ho verificato che è possibile installare Oracle XE 32 bit sotto Windows 7 64 bit senza fare chissà quali passi. Occorre solo prendere alcuni accorgimenti ed eseguire delle semplici operazioni manuali. Passiamo ai vari step per arrivare al risultato.

Fase 1 – Download del setup

Il Setup è disponibile alla seguente pagina. Ricordarsi di accettare le condizioni per poter eseguire il download.

Fase 2 – Installazione di Oracle XE

Lanciare il setup e seguire tutti i passi. Sicuramente sarà intercettato un errore, come mostrato dalla seguente figura:

Date OK ed andate fino in fondo. L’installazione procederà fino alla fine.

Fase 3 – Configurazione manuale

Una volta che avete installato Oracle, definite le seguenti variabili di ambiente:

  • TNS_ADMIN    
  • ORACLE_HOME
  • OCIDLL

specificando il path dove avete installato Oracle. Se avete lasciato i valori di default, basta che inseriate:

C:oraclexeapporacleproduct11.2.0server

  • NLS_LANG (opzionale. Serve per definire un settaggio che sarà utilizzato. Mettete ITALIAN per italiano).

La variabile PATH risulterà già configurata. Se non fosse, semplicemente aggiungete in coda ai vari path anche quello di Oracle.

Fase 4 – Iniziate a lavorare

Fatto ciò, potete iniziare a lavorare. L’interfaccia WEB, selezionabile dalla Icona Get Started presente sul Desktop, sarà utilizzabile e potrete iniziare a lavorare con la vostra installazione di Oracle.