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