Oracle
 sql >> Database >  >> RDS >> Oracle

Come ottenere file da BLOB in Oracle?

In questo tutorial imparerai come ottenere un file dalla colonna BLOB in Oracle. Per fare un esempio, ho creato una tabella EXT_FILES in Oracle e la seguente è la struttura della tabella.

CREATE TABLE EXT_FILES
(
FILE_NAME VARCHAR2(1000 BYTE),
FILE_CONTENT BLOB
)
/

Inserisci i dati nella tabella sopra. Se non sai come inserire un file nella colonna BLOB, consulta il seguente articolo Come inserire un file nella colonna BLOB della tabella Oracle?

Devi avere un oggetto directory Oracle creato nel tuo schema, per ottenere i file dalla colonna BLOB al disco. Per creare una directory in Oracle dai il seguente comando.

CREATE OR REPLACE DIRECTORY IMGDIR AS 'C:\TEMP\IMAGES';

Di seguito è riportato l'esempio di Oracle Stored Procedure, che recupererà i record dalla tabella EXT_FILES (contenente dati BLOB) utilizzando un cursore e quindi estrarrà i file uno per uno nella directory specificata.

Esempio di stored procedure Oracle per ottenere il file dalla colonna BLOB in Oracle

CREATE OR REPLACE PROCEDURE get_files_from_blob
IS
l_file UTL_FILE.file_type;
l_buffer RAW (32767);
l_amount BINARY_INTEGER := 32767;
l_pos INTEGER := 1;
l_blob_len INTEGER;
l_blob BLOB;
l_filename ext_files.file_name%TYPE;
/* cursor to get the records from the table */
CURSOR c_files
IS
SELECT file_name, file_content FROM ext_files;
BEGIN
OPEN c_files;

LOOP

FETCH c_files
INTO l_filename, l_blob;

EXIT WHEN c_files%NOTFOUND;

l_blob_len := DBMS_LOB.getlength (l_blob);

/* Change the directory name (IMGDIR) to your Oracle directory object name*/
l_file :=
UTL_FILE.fopen ('IMGDIR',
l_filename,
'wb',
32767);
l_pos := 1;

WHILE l_pos < l_blob_len
LOOP
DBMS_LOB.read (l_blob,
l_amount,
l_pos,
l_buffer);
UTL_FILE.put_raw (l_file, l_buffer, TRUE);
l_pos := l_pos + l_amount;
END LOOP;

UTL_FILE.fclose (l_file);
END LOOP;

CLOSE c_files;
EXCEPTION
WHEN OTHERS
THEN
IF UTL_FILE.is_open (l_file)
THEN
UTL_FILE.fclose (l_file);
END IF;

RAISE;
END;

Test

BEGIN
get_files_from_blob;
END;
/

Uscita

PL/SQL procedure successfully completed.

Ora puoi controllare la posizione dell'oggetto directory IMGDIR per i file estratti.

Vedi anche:

  • Estrai i dati BLOB da Oracle Table usando Toad