Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Como obter o arquivo do BLOB no Oracle?


Neste tutorial, você aprenderá como obter um arquivo da coluna BLOB no Oracle. Para dar um exemplo, criei uma tabela EXT_FILES no Oracle e segue a estrutura da tabela.
CREATE TABLE EXT_FILES
(
FILE_NAME VARCHAR2(1000 BYTE),
FILE_CONTENT BLOB
)
/

Insira os dados na tabela acima. Se você não sabe como inserir um arquivo na coluna BLOB, consulte o artigo a seguir Como inserir um arquivo na coluna BLOB da tabela Oracle?

Você deve ter um objeto de diretório Oracle criado em seu esquema, para obter os arquivos da coluna BLOB para o disco. Para criar um diretório no Oracle, dê o seguinte comando.
CREATE OR REPLACE DIRECTORY IMGDIR AS 'C:\TEMP\IMAGES';

Segue abaixo o exemplo do Oracle Stored Procedure, que irá buscar os registros da tabela EXT_FILES (contendo dados BLOB) usando um cursor e então extrairá os arquivos um a um no diretório especificado.

Exemplo de procedimento armazenado do Oracle para obter o arquivo da coluna BLOB no 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;

Teste

BEGIN
get_files_from_blob;
END;
/

Saída

PL/SQL procedure successfully completed.

Agora você pode verificar a localização do objeto de diretório IMGDIR para os arquivos extraídos.

Veja também:

  • Extraia dados BLOB da tabela Oracle usando o Toad