samerselo Ответов: 4

Как я могу экспортировать поле Oracle blob в файл на диске


У меня есть база данных oracle с таблицей есть поле blob есть хранилище изображений в нем

как я могу экспортировать эти изображения, хранящиеся в поле blob, обратно в файл в папке на жестком диске компьютера

У меня есть oracle 11g и pl/sql developr 8.0 и visual basic 2013

4 Ответов

Рейтинг:
36

anup.bhunia

Вы можете использовать утилиту UTL_FILE для работы с файлами.

Пройдитесь по таблице, содержащей поле blob-объекта, и создайте файл по своему усмотрению с помощью утилиты UTL_FILE.

http://docs.oracle.com/cd/B19306_01/appdev.102/b14258/u_file.htm#BABDEJDH[^]


Рейтинг:
2

samerselo

не могли бы вы привести мне практический пример того, как я могу выполнять свою работу с помощью utl_file


Рейтинг:
2

krishna v

Привет,
Это работает для меня как чемпион

ФУНКЦИЯ F_WRITE_XML_TO_FILE
(
p_filename varchar2,
p_xml xmlType,
p_export_dir varchar2,
p_encoding_nr в номере по умолчанию 871
) Возвращает логическое значение как
v_blob BLOB-объектов;
количество v_length ;
количество v_offset:=1;
количество v_chunk:=32767;
v_output UTL_FILE.file_type;
НАЧАТЬ
v_blob:= p_xml.getblobval (p_encoding_nr);
v_length:= DBMS_LOB.метода getlength может служить метод (v_blob);

v_output := UTL_FILE. fopen (p_export_dir, p_filename, 'wb', 32767);
ПЕТЛЯ
Выход при v_offset > v_length;
UTL_FILE.put_raw (v_output, DBMS_LOB.Функцию substr (v_blob, v_chunk, v_offset), правда);
v_offset := v_offset + v_chunk;
КОНЦЕВАЯ ПЕТЛЯ;
UTL_FILE.функции fclose (v_output);
вернуть true;
КОНЕЦ;


Patrice T

Ответ на этот вопрос был дан 2 года назад !

Рейтинг:
12

samerselo

СПАСИБО МНЕ НАКОНЕЦ УДАЛОСЬ ЭТО СДЕЛАТЬ

ВОТ МОЯ ПРОЦЕДУРА ПОЖАЛУЙСТА ПОСОВЕТУЙТЕ ЕСЛИ ЕСТЬ ЛУЧШИЙ СПОСОБ

CREATE OR REPLACE PROCEDURE SAVE_FINGERS (
   p_directory   IN   VARCHAR2
)
IS
   v_blob        BLOB;
   v_start       NUMBER             := 1;
   v_bytelen     NUMBER             := 2000;
   v_len         NUMBER;
   v_raw         RAW (2000);
   v_x           NUMBER;
   v_output      UTL_FILE.file_type;
   v_file_name   VARCHAR2 (200);
BEGIN

   FOR i IN (SELECT DBMS_LOB.getlength (FINGERPRINT) v_len, CARD_NUMBER v_file_name,
                    FINGERPRINT v_blob
               FROM RECEPT_CARDS)
 
   LOOP
      v_output := UTL_FILE.fopen (p_directory, i.v_file_name || '.JPG', 'wb', 32760);
      v_x := i.v_len;
      v_start := 1;
      v_bytelen := 2000;

      WHILE v_start < i.v_len AND v_bytelen > 0
      LOOP
         DBMS_LOB.READ (i.v_blob, v_bytelen, v_start, v_raw);
         UTL_FILE.put_raw (v_output, v_raw);
         UTL_FILE.fflush (v_output);
         v_start := v_start + v_bytelen;
         v_x := v_x - v_bytelen;

         IF v_x < 2000
         THEN
            v_bytelen := v_x;
         END IF;
      END LOOP;

      UTL_FILE.fclose (v_output);
   END LOOP;
END SAVE_FINGERS;


Sanju TV

На каком диске будет сохранен файл? в Oracle server или в клиенте?

samerselo

Я не помню Извини

Код старый и я использовал его только один раз
Сейчас я использую SQl Server