Oracle
 sql >> база данни >  >> RDS >> Oracle

Как да запишете BLOB като файл в PL/SQL?

Тук давам пример за запазване на BLOB данни като файл в PL/SQL. BLOB данни можете да ги получите от таблицата с колона BLOB или можете да ги получите от файл на диска.

Пример за PL/SQL функция за запазване на BLOB като файл

Процедурата по-долу приема следните три аргумента:

  1. Име на обект на директория на Oracle (като i_dir).
  2. Запазване като име на файл (като i_file).
  3. BLOB данни (като 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;

Тест

Следващият PL/SQL блок ще извика горната процедура, като предаде обекта на директорията на Oracle, името на файла и BLOB данни. За BLOB данните използвам функцията GET_BLOB, за която дадох пример в предишната си публикация в блога:Вземете BLOB от файл в PL/SQL. В случая по-долу той ще получи BLOB данните от файл myfile.jpg от местоположение MY_DIR и ще ги запише във файл abc.jpg в местоположение 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;

Сега можете да проверите местоположението на директорията IMG_DIR за файла, създаден чрез BLOB.

Вижте също:

  • Как да създадем обект на директория на Oracle?
  • Научете как да извлечете BLOB данни от Oracle Table с помощта на Toad
  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как можете да разберете дали се използва PL/SQL пакет, процедура или функция?

  2. Коригиране на грешка „ORA-01789:блокът на заявката има неправилен брой колони с резултати“

  3. Как да покажа грешки в sqlplus

  4. Oracle:LONG или CLOB?

  5. MySQL запитва примери с отговори