Caricare un file in un campo LOB direttamente da disco


Oracle ci permette di salvare all’interno di una tabella grazie ai tipi di dati LOB (Large OBject) come CLOB, BFILE e BLOB. Il primo permette di archiviare stringhe di caratteri nolto lunghe, il secondo permette di salvare tipi di file binari, mentre il testo (decisamente più interessante) permette allo sviluppatore di inserire qualsiasi tipo di file, dal file di testo alle immagini.
Vediamo ora come dichiarare una tabella con una colonna di tipo blob e come creare una procedura che effettui il caricamento vero e proprio del file sulla base di dati dal file system.
CREATE TABLE provaBlob (fileName VARCHAR2(15),file BLOB)
 

A questo punto possiamo creare un’oggetto “Directory”, che rappresenta il ponte tra il database e la directory fisica:
CREATE OR REPLACE DIRECTORY myDirectory AS 'C:MyFiles'

 

Bene adesso creiamo la procedura vera e propria che poi andremo a lanciare per il caricamento del file:
CREATE OR REPLACE PROCEDURE loadFiles(nomeFile IN VARCHAR2) IS
bl BLOB;
bf BFILE;
bs INTEGER;
BEGIN
INSERT INTO provaBlob VALUES(nomefile, empty_blob());
bf := bfilename('myDirectory', nomeFile);
DBMS_LOB.FILEOPEN(bf);
bs := DBMS_LOB.GETLENGTH(bf);
SELECT file INTO bl FROM provaBlob WHERE fileName = nomefile;
DBMS_LOB.LOADFROMFILE(bl, bf, bs);
DBMS_LOB.FILECLOSE(bf);
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLCODE||' '||SQLERRM);
END;
/
SHOW ERRORS

 

Ora per lanciare la procedura basta eseguire il seguente comando:
EXEC loadFiles('documento.doc');

Caricare un file in un campo LOB direttamente da disco ultima modifica: 2006-05-08T00:00:00+00:00 da Enrico

Comments are closed.