sql >> Base de Datos >  >> RDS >> Oracle

¿Cómo obtener un archivo de BLOB en Oracle?

En este tutorial, aprenderá cómo obtener un archivo de la columna BLOB en Oracle. Para dar un ejemplo, he creado una tabla EXT_FILES en Oracle y la siguiente es la estructura de la tabla.

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

Inserte los datos en la tabla anterior. Si no sabe cómo insertar un archivo en la columna BLOB, consulte el siguiente artículo ¿Cómo insertar un archivo en la columna BLOB de la tabla de Oracle?

Debe tener un objeto de directorio de Oracle creado en su esquema para obtener los archivos de la columna BLOB en el disco. Para crear un directorio en Oracle da el siguiente comando.

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

El siguiente es el ejemplo de procedimiento almacenado de Oracle, que obtendrá los registros de la tabla EXT_FILES (que contiene datos BLOB) usando un cursor y luego extraerá los archivos uno por uno en el directorio especificado.

Ejemplo de procedimiento almacenado de Oracle para obtener el archivo de la columna BLOB en 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;

Prueba

BEGIN
get_files_from_blob;
END;
/

Salida

PL/SQL procedure successfully completed.

Ahora puede verificar la ubicación del objeto de directorio IMGDIR para los archivos extraídos.

Ver también:

  • Extraer datos BLOB de una tabla de Oracle usando Toad