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