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

¿Cómo guardar BLOB como archivo en PL/SQL?

Aquí doy un ejemplo para guardar datos BLOB como un archivo en PL/SQL. Puede obtener datos BLOB de la tabla que tiene la columna BLOB, o puede obtenerlos de un archivo en el disco.

Ejemplo de función PL/SQL para guardar BLOB como un archivo

El siguiente procedimiento toma los siguientes tres argumentos:

  1. Nombre del objeto de directorio de Oracle (como i_dir).
  2. Guardar como nombre de archivo (como i_file).
  3. Datos BLOB (como i_blob).
CREATE OR REPLACE PROCEDURE blob_to_file (i_dir    IN VARCHAR2,
                                          i_file   IN VARCHAR2,
                                          i_blob   IN BLOB)
AS
   l_file       UTL_FILE.file_type;
   l_buffer     RAW (32767);
   l_amount     BINARY_INTEGER := 32767;
   l_pos        INTEGER := 1;
   l_blob_len   INTEGER;
BEGIN
   l_blob_len := DBMS_LOB.getlength (i_blob);

   l_file :=
      UTL_FILE.fopen (i_dir,
                      i_file,
                      'WB',
                      32767);

   WHILE l_pos < l_blob_len
   LOOP
      DBMS_LOB.read (i_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);
EXCEPTION
   WHEN OTHERS
   THEN
      IF UTL_FILE.is_open (l_file)
      THEN
         UTL_FILE.fclose (l_file);
      END IF;

      RAISE;
END blob_to_file;

Prueba

El siguiente bloque PL/SQL llamará al procedimiento anterior pasando el objeto de directorio de Oracle, el nombre de archivo y los datos BLOB. Para los datos BLOB, estoy usando la función GET_BLOB para la cual he dado un ejemplo en mi publicación de blog anterior:Obtener BLOB de un archivo en PL/SQL. En el caso siguiente, obtendrá los datos BLOB de un archivo myfile.jpg desde la ubicación MY_DIR y los guardará en el archivo abc.jpg en la ubicación IMG_DIR.

DECLARE
   f_blob   BLOB;
BEGIN
   /* check the above mentioned link for get_blob function example */
   f_blob := get_blob ('MY_DIR', 'myfile.jpg');
   /* now pass the blob to blob_to_file procedure to save it as a file */
   blob_to_file ('IMG_DIR', 'abc.jpg', f_blob);
END;

Ahora puede verificar la ubicación del directorio IMG_DIR para el archivo creado a través de BLOB.

Ver también:

  • ¿Cómo crear un objeto de Oracle Directory?
  • Aprenda a extraer datos BLOB de Oracle Table usando Toad