powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Чтение текстового файла из поля с типом BLOB средствами языка SQL/PLSQL
39 сообщений из 39, показаны все 2 страниц
Чтение текстового файла из поля с типом BLOB средствами языка SQL/PLSQL
    #39886645
fragmaker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Приветствую, форумчане, и всех грызущих и хвостатых, точащих основы СУБД Oracle! Только начинаю постигать вопросы администрирования СУБД Oracle и вот собственно вопрос: можно ли осуществить чтение из текстового файла через SQL/PLSQL запрос, который загружен в BLOB поле таблицы? Есть ли специальные инструменты, пакеты (наподобие DBMS_LOB), чтобы считать текст из BLOB? Если есть, то как это сделать на SQL/PLSQL? Требуется осуществить поиск по ключевым словам в этом текстовом файле и в зависимости от этого выдать сообщение о наличии или отсутствии этих слов.

P.S. Если что, то изначально известно, что в BLOB поле содержится текстовый файл с расширением txt.
...
Рейтинг: 0 / 0
Чтение текстового файла из поля с типом BLOB средствами языка SQL/PLSQL
    #39886648
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fragmaker
Только начинаю постигать


Начали с поиска ?
...
Рейтинг: 0 / 0
Чтение текстового файла из поля с типом BLOB средствами языка SQL/PLSQL
    #39886651
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fragmaker
осуществить чтение из текстового файла через SQL/PLSQL запрос, который загружен в BLOB поле таблицы?
Кто на ком стоял?
fragmaker
Есть ли специальные инструменты
Чем специальные отличаются от неспециальных?
...
Рейтинг: 0 / 0
Чтение текстового файла из поля с типом BLOB средствами языка SQL/PLSQL
    #39886654
fragmaker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dmdmdm, начинал...Пришёл к тому, что, как понял, текстовый файл во время записи в BLOB представляется в двоичной или 16-й системе и считывать данные нужно порционно. А примеры, как это сделать - не нашёл. Плохо искал видимо...Если же что-то путаю, то в какую сторону нужно копать? Просто вообще не понятно, с чего начать. Как выбирать "обычные" сведения из типов CHAR, varchar2, number понятно, а вот с чем есть BLOB - вообще непонятно...Нужно наставить на истинный путь силы
...
Рейтинг: 0 / 0
Чтение текстового файла из поля с типом BLOB средствами языка SQL/PLSQL
    #39886656
fragmaker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
-2-, хорошо...можно вообще хоть что-нибудь, хотя бы какой-нибудь пример, потому что поиск в Инете не увенчался успехом и непонятно, с чего начать
...
Рейтинг: 0 / 0
Чтение текстового файла из поля с типом BLOB средствами языка SQL/PLSQL
    #39886657
fragmaker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
-2-, текстовый файл с расширением txt загружен в поле BLOB. Требуется считать его средствами SQL/PLSQL и требуемые слова вывести на экран либо указать, что они есть. Объяснять основы SQL не нужно. Нужны инструменты (любые), которые решат поставленную задачу. И желательно примеры либо наставить на путь силы!
...
Рейтинг: 0 / 0
Чтение текстового файла из поля с типом BLOB средствами языка SQL/PLSQL
    #39886658
K790
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Чтение текстового файла из поля с типом BLOB средствами языка SQL/PLSQL
    #39886692
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fragmaker
Объяснять основы SQL не нужно.
Для общения на одном языке сначала нужно ознакомиться с азбукой и словарем. Это лучше делать по профессионально писанным книгам и документации.
...
Рейтинг: 0 / 0
Чтение текстового файла из поля с типом BLOB средствами языка SQL/PLSQL
    #39886800
MazoHist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Чтение текстового файла из поля с типом BLOB средствами языка SQL/PLSQL
    #39886818
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MazoHist

В решении по ссылке профукана важная деталь.
...
Рейтинг: 0 / 0
Чтение текстового файла из поля с типом BLOB средствами языка SQL/PLSQL
    #39886877
oragraf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous
В решении по ссылке профукана важная деталь.
Кодировка?
...
Рейтинг: 0 / 0
Чтение текстового файла из поля с типом BLOB средствами языка SQL/PLSQL
    #39886879
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
oragraf
andrey_anonymous
В решении по ссылке профукана важная деталь.
Кодировка?

Да
...
Рейтинг: 0 / 0
Чтение текстового файла из поля с типом BLOB средствами языка SQL/PLSQL
    #39886882
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fragmaker,

OFF
если там всегда только текст лежит, можно было бы поле сразу CLOB вместо BLOB сделать
...
Рейтинг: 0 / 0
Чтение текстового файла из поля с типом BLOB средствами языка SQL/PLSQL
    #39886890
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кроик Семён
сразу CLOB
Если не мелочиться на "если", то varchar2(1) может оказаться еще сразей.
...
Рейтинг: 0 / 0
Чтение текстового файла из поля с типом BLOB средствами языка SQL/PLSQL
    #39888966
fragmaker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кроик Семён, нет. В БД может быть подцеплен любой файл, скрипт по выборке именно текстовых файлов уже сделали, теперь надо достать текст. И вот здесь мои познания заканчиваются. Теперь только надежда на богов SQL/PLSQL.
...
Рейтинг: 0 / 0
Чтение текстового файла из поля с типом BLOB средствами языка SQL/PLSQL
    #39889041
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fragmaker
скрипт по выборке именно текстовых файлов уже сделали
Множественное число "сделали" предполагает, что не сам. Если твоему пониманию недоступно условие равенства типа типафайла=текст, то по использованию функции нужно взывать не к просто богам, а к пантеону сингулярности.
...
Рейтинг: 0 / 0
Чтение текстового файла из поля с типом BLOB средствами языка SQL/PLSQL
    #39908285
fragmaker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey_anonymous
MazoHist

В решении по ссылке профукана важная деталь.

А каким образом изменить кодировку после преобразования в CLOB?
...
Рейтинг: 0 / 0
Чтение текстового файла из поля с типом BLOB средствами языка SQL/PLSQL
    #39908294
fragmaker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey_anonymous, привожу пример кода преобразования из BLOB в CLOB
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
declare 
    l_clob         CLOB;
    l_dest_offset  PLS_INTEGER := 1;
    l_src_offset   PLS_INTEGER := 1;
    l_lang_context PLS_INTEGER := DBMS_LOB.default_lang_ctx;
    l_warning      PLS_INTEGER;
    vtextfile blob;
    output_text VARCHAR2(1000);
    chars_read_1 BINARY_INTEGER;
    offset INTEGER;
begin
    select 
        ed.elado_bytes into vtextfile -- поле типа BLOB с текстовым файлом
    from 
        app_applications a,
        app_doc adoc,
        doc_foundations d,
        ela_document ed,
        ela_document_props ep
    where
        a.id = adoc.app_id(+)
        and adoc.doc_id = d.id(+)
        and d.id = ED.ELADO_EXT_ID(+)
        and ED.ELADO_DOCUMENT_ID = ep.elado_doc_id(+)
        and ed.ELADO_EXT_ENT_NAME(+) = 'DOC_FOUNDATIONS'
        and d.id = 19966375000; 
    
    -- переводим BLOB в CLOB
    DBMS_LOB.createTemporary(
    lob_loc => l_clob,
    cache   => TRUE);

    DBMS_LOB.converttoclob(
    dest_lob      => l_clob,
    src_blob      => vtextfile,
    amount        => DBMS_LOB.lobmaxsize,
    dest_offset   => l_dest_offset,
    src_offset    => l_src_offset, 
    blob_csid     => DBMS_LOB.default_csid,
    lang_context  => l_lang_context,
    warning       => l_warning);
    
    offset := 1;
    chars_read_1 := 300;
    
    -- Пытаемся прочитать первые 300 символов.
    DBMS_LOB.READ(l_clob, chars_read_1, offset, output_text);
    DBMS_OUTPUT.PUT_LINE(output_text);  
end;


На выводе получаются кракозябры
Код: xml
1.
PK


Текстовый файл в формате UTF-8. Каким образом преобразовать в нормальный текст?
...
Рейтинг: 0 / 0
Чтение текстового файла из поля с типом BLOB средствами языка SQL/PLSQL
    #39908297
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для начала нужно убедиться, что в исходных данных текст.
Заголовок похож на заголовок бинарного zip-файла.
А дальше читать про преобразование кодировок .
...
Рейтинг: 0 / 0
Чтение текстового файла из поля с типом BLOB средствами языка SQL/PLSQL
    #39908298
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fragmaker
Код: xml
1.
PK

Текстовый файл в формате UTF-8. Каким образом преобразовать в нормальный текст?
Распаковать zip.
...
Рейтинг: 0 / 0
Чтение текстового файла из поля с типом BLOB средствами языка SQL/PLSQL
    #39908333
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmdmdm
Заголовок похож на заголовок бинарного zip-файла.
Или эксел 504B0304
...
Рейтинг: 0 / 0
Чтение текстового файла из поля с типом BLOB средствами языка SQL/PLSQL
    #39908375
irbis_al
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fragmaker

Текстовый файл в формате UTF-8. Каким образом преобразовать в нормальный текст?

Ну а база в какой кодировке ведь
Код: plsql
1.
 l_lang_context PLS_INTEGER := DBMS_LOB.default_lang_ctx;


даёт текущую.(И если оне не AL32UTF8 то будет лажа)
Вот тут ниже по ссылке преобразовывают.
https://dba.stackexchange.com/questions/175411/convert-returns-garbage-with-clobs-in-oracle
...
Рейтинг: 0 / 0
Чтение текстового файла из поля с типом BLOB средствами языка SQL/PLSQL
    #39908609
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fragmaker
andrey_anonymous, привожу пример кода преобразования из BLOB в CLOB
Код: plsql
1.
    blob_csid     => DBMS_LOB.default_csid, --вот тут и надо указать идентификатор кодировки BLOB.


Текстовый файл в формате UTF-8. Каким образом преобразовать в нормальный текст?


Но для начала обратите внимание на сообщения коллег о нетекстовой природе содержимого BLOB, я бы тоже предположил ZIP.
Его, кстати, можно распаковать прямо в БД, если лицензированного процессора не жаль
...
Рейтинг: 0 / 0
Чтение текстового файла из поля с типом BLOB средствами языка SQL/PLSQL
    #39908822
fragmaker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dmdmdm, и действительно..., скорей всего в нашей БД данные предварительно заархивированы и помещены в zip файл, потому что при элементарных проверках
Код: plsql
1.
DBMS_LOB.SUBSTR(ed.elado_bytes, 30)


видим текстовую сигнатуру (епта, новые слова выучил!!! ...)
Код: plsql
1.
504B0304140000000800A93E6E4EF14C5B9E710200002C0700000C002400


а в БД под интерфейсом виден файл *.txt.

Я то вначале подумал, что это Oracle на меня на японо-корея-китайском языке обругалась, а оно вон что значит - ТЕКСТОВАЯ СИГНАТУРА!
...
Рейтинг: 0 / 0
Чтение текстового файла из поля с типом BLOB средствами языка SQL/PLSQL
    #39908823
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fragmaker
а в БД под интерфейсом виден файл *.txt.
Кулибин, обратись к разработчикам, пока ещё чего-нибудь не сломал.
...
Рейтинг: 0 / 0
Чтение текстового файла из поля с типом BLOB средствами языка SQL/PLSQL
    #39908824
fragmaker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Elic, в том то и дело, что нас кинули с ПО и отправили в самостоятельное плавание. Ждём новое ПО, а это уже не грех доломать.
...
Рейтинг: 0 / 0
Чтение текстового файла из поля с типом BLOB средствами языка SQL/PLSQL
    #39908827
fragmaker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Elic, а дак может поможешь zip распаковать? Как функцию или процедуру правильно указать? Инструментами DBMS_LOB?
...
Рейтинг: 0 / 0
Чтение текстового файла из поля с типом BLOB средствами языка SQL/PLSQL
    #39908830
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fragmaker
zip распаковать?
RTFM/STFF utl_compress
...
Рейтинг: 0 / 0
Чтение текстового файла из поля с типом BLOB средствами языка SQL/PLSQL
    #39909633
rpovarov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
fragmaker
Elic, а дак может поможешь zip распаковать? Как функцию или процедуру правильно указать? Инструментами DBMS_LOB?

https://github.com/yallie/as_zip
...
Рейтинг: 0 / 0
Чтение текстового файла из поля с типом BLOB средствами языка SQL/PLSQL
    #39909817
fragmaker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Следуя религиозным канонам, набираю как в библии
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
declare 
    file_blob BLOB;
    handle   BINARY_INTEGER;
    datatxt BLOB;
    s_txt varchar2(4000);
    l_compressed_blob    BLOB;
    l_uncompressed_blob  BLOB;
begin
    select 
        ed.elado_bytes into datatxt
    from 
        app_applications a,
        app_doc adoc,
        doc_foundations d,
        ela_document ed,
        ela_document_props ep
    where
        a.id = adoc.app_id(+)
        and adoc.doc_id = d.id(+)
        and d.id = ED.ELADO_EXT_ID(+)
        and ED.ELADO_DOCUMENT_ID = ep.elado_doc_id(+)
        and ed.ELADO_EXT_ENT_NAME(+) = 'DOC_FOUNDATIONS'
        and d.id = 19966375000; 
    
    l_uncompressed_blob:= UTL_COMPRESS.lz_uncompress(datatxt);
    
end;


но TOAD указывает на грехи:
Код: plsql
1.
2.
3.
4.
5.
ORA-29294: Во время сжатия или разуплотнения возникла ошибка данных.
ORA-06512: на  "SYS.UTL_SYS_COMPRESS", line 56
ORA-06512: на  "SYS.UTL_SYS_COMPRESS", line 226
ORA-06512: на  "SYS.UTL_COMPRESS", line 89
ORA-06512: на  line 25


Не пойму, что не так в записи
Код: plsql
1.
l_uncompressed_blob:= UTL_COMPRESS.lz_uncompress(datatxt)


???!!!
...
Рейтинг: 0 / 0
Чтение текстового файла из поля с типом BLOB средствами языка SQL/PLSQL
    #39909825
fragmaker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в нашей СУБД нашёл также описание этой функции
Код: plsql
1.
2.
3.
4.
5.
 function lz_uncompress(src in blob) return blob;

  /* This lz_uncompress overload will return the uncompressed data into the
   * existing BLOB, dst.  Original dst data will be overwritten.
   */


и
Код: plsql
1.
2.
3.
4.
5.
6.
procedure lz_uncompress(src in blob, dst in out nocopy blob);


  /* This lz_uncompress overload will return a temporary BLOB for the
   * uncompressed data.
   */


Изменять существующие данные в БД мне не надо, только прочитать. Получается, нужно использовать именно процедуру и предварительно создавать темповский BLOB через DBMS_LOB.CREATETEMPORARY
???!!!
...
Рейтинг: 0 / 0
Чтение текстового файла из поля с типом BLOB средствами языка SQL/PLSQL
    #39909832
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fragmaker
Следуя религиозным канонам, набираю как в библии
zip есть архив файлов, а ты его декомпрессуешь. Что ты ожидаешь получить?
...
Рейтинг: 0 / 0
Чтение текстового файла из поля с типом BLOB средствами языка SQL/PLSQL
    #39909836
fragmaker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
-2-, если нельзя декомпрессовать, то тогда каким образом вывести текстовые данные?
...
Рейтинг: 0 / 0
Чтение текстового файла из поля с типом BLOB средствами языка SQL/PLSQL
    #39909839
fragmaker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
-2-, и тогда что есть архив? ) Вы библию похоже не читали...
...
Рейтинг: 0 / 0
Чтение текстового файла из поля с типом BLOB средствами языка SQL/PLSQL
    #39909846
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fragmaker
каким образом вывести текстовые данные?
На твоем скриншоте есть кнопка Открыть. Подозреваю позволяет просмотреть файлы.
fragmaker
что есть архив?
Например это:man arAn archive is a single file holding a collection of other files in a structure that makes it possible to retrieve the original individual files (called members of the archive).
...
Рейтинг: 0 / 0
Чтение текстового файла из поля с типом BLOB средствами языка SQL/PLSQL
    #39909854
fragmaker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
-2-, тебя в детстве, наверное, обижали...сочувствую...
...
Рейтинг: 0 / 0
Чтение текстового файла из поля с типом BLOB средствами языка SQL/PLSQL
    #39913257
fragmaker, Чел, ты разобрался? У меня такая же проблема с чтением архива в BLOB-е.
...
Рейтинг: 0 / 0
Чтение текстового файла из поля с типом BLOB средствами языка SQL/PLSQL
    #39916864
fragmaker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Илья Вишневский, временно остановился на использовании средств языка Java. Подогнали функции запаковки и распаковки. Вот сие чудо Питерской сборки
Путь Силы
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
CREATE USER ZAPROS
  IDENTIFIED BY <password>
  DEFAULT TABLESPACE USERS
  TEMPORARY TABLESPACE TEMP
  PROFILE DEFAULT
  ACCOUNT UNLOCK;
  -- 1 Role for ZAPROS 
  GRANT DBA TO ZAPROS;
  ALTER USER ZAPROS DEFAULT ROLE ALL;
  -- 1 System Privilege for ZAPROS 
  GRANT UNLIMITED TABLESPACE TO ZAPROS;
  -- 1 Tablespace Quota for ZAPROS 
  ALTER USER ZAPROS QUOTA UNLIMITED ON USERS;
  -- 7 Java Privileges for ZAPROS
  
DECLARE
 KEYNUM NUMBER;
BEGIN
  SYS.DBMS_JAVA.GRANT_PERMISSION(
     grantee           => 'ZAPROS'
    ,permission_type   => 'SYS:java.util.PropertyPermission'
    ,permission_name   => '*'
    ,permission_action => 'read,write'
    ,key               => KEYNUM
    );
END;
/

CREATE OR REPLACE AND RESOLVE JAVA SOURCE NAMED ZAPROS.MY_JAVA as import java.io.*;
import java.util.zip.*;
import java.util.*;
import java.sql.*;
import oracle.sql.*;
import java.net.*;
import static java.lang.Math.abs;
import java.util.ArrayList;
import java.util.Arrays;

 
      public class MY_ZIP
      {
        public static byte[] packRaw(byte[] b, String s) {
          ByteArrayOutputStream outBuffer = new ByteArrayOutputStream();
          try {
            ZipOutputStream zip = new ZipOutputStream(outBuffer);
            zip.putNextEntry(new ZipEntry (s)); 
            zip.write(b);
            zip.close();
          }
          catch (IOException e) {
            System.err.println(e);     
          }
          return outBuffer.toByteArray();
        }
 
        public static byte[] unpackRaw(byte[] b) {
          ByteArrayOutputStream outBuffer = new ByteArrayOutputStream();
          ByteArrayInputStream inBuffer = new ByteArrayInputStream(b);
          try {
            ZipInputStream zip = new ZipInputStream(inBuffer);
            byte[] tmpBuffer = new byte[256];
            int n;
            while ((n = zip.read(tmpBuffer)) >= 0)
              outBuffer.write(tmpBuffer, 0, n);
          }
          catch (IOException e) {
            System.err.println(e);     
          }
          return outBuffer.toByteArray();
        }
 
        public static void packBlob(String filename, oracle.sql.BLOB srcBlob, oracle.sql.BLOB dstBlob) {
          try {
            //OutputStream outBuffer = dstBlob.getBinaryOutputStream();
            InputStream inBuffer = srcBlob.getBinaryStream();
            ZipOutputStream zip = new ZipOutputStream(dstBlob.getBinaryOutputStream());
            byte[] tmpBuffer = new byte[srcBlob.getBufferSize()];
            zip.putNextEntry(new ZipEntry(filename));
            int n;
            while ((n = inBuffer.read(tmpBuffer)) >= 0)
              {zip.write(tmpBuffer, 0, n);
              }
            inBuffer.close();
            zip.close();
          }
          catch (SQLException e) {
            System.err.println(e);     
          }
          catch (IOException e) {
            System.err.println(e);     
          }
        }
 
        public static void unpackBlob(oracle.sql.BLOB srcBlob, oracle.sql.BLOB dstBlob) {
          try {
            OutputStream outBuffer = dstBlob.getBinaryOutputStream();
            //InputStream inBuffer = srcBlob.getBinaryStream();
            ZipInputStream zip = new ZipInputStream(srcBlob.getBinaryStream());
            byte[] tmpBuffer = new byte[srcBlob.getBufferSize()];
            ZipEntry ze = zip.getNextEntry();
            int n;
            while ((n = zip.read(tmpBuffer)) >= 0)
              outBuffer.write(tmpBuffer, 0, n);
            zip.close();  
            outBuffer.close();
          }
          catch (SQLException e) {
            System.err.println(e);     
          }
          catch (IOException e) {
            System.err.println(e);     
          }
        }
 
      };
/

create or replace procedure zapros.my_packBlob (filename varchar2, srcBlob Blob, zipBlob Blob)
as LANGUAGE java NAME 'MY_ZIP.packBlob(java.lang.String, oracle.sql.BLOB, oracle.sql.BLOB)';
/
create or replace procedure zapros.my_unpackBlob (zipBlob Blob, dstBlob Blob)
as LANGUAGE java NAME 'MY_ZIP.unpackBlob(oracle.sql.BLOB, oracle.sql.BLOB)';
/



ну а дальше дело техники...в моём случае тестил пока так
код
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
declare 
    --file_blob BLOB;
    --handle   BINARY_INTEGER;
    --datatxt BLOB;
    
    --l_compressed_blob    BLOB;
    --l_uncompressed_blob  BLOB;
    --xmldoc  xmltype;
  s_txt varchar2(4000);
  v_clob clob;
  v_blob blob;
  v_zipBlob blob;
  v_unzipBlob blob;
  dest_offset     INTEGER := 1; 
  src_offset      INTEGER := 1;
  lang_context    INTEGER := dbms_lob.default_lang_ctx;
  p_csid          INTEGER := 871;
  v_error INTEGER;
begin
    select 
        ed.elado_bytes into v_zipBlob
    from 
        app_applications a,
        app_doc adoc,
        doc_foundations d,
        ela_document ed,
        ela_document_props ep
    where
        a.id = adoc.app_id(+)
        and adoc.doc_id = d.id(+)
        and d.id = ED.ELADO_EXT_ID(+)
        and ED.ELADO_DOCUMENT_ID = ep.elado_doc_id(+)
        and ed.ELADO_EXT_ENT_NAME(+) = 'DOC_FOUNDATIONS'
        and d.id = 19966375000; 
    
    dbms_lob.createtemporary(v_blob, true);
    zapros.my_unpackBlob (v_zipBlob, v_blob);
    
    dbms_lob.createtemporary(v_clob, true);
    dest_offset := 1; src_offset := 1;
    DBMS_LOB.CONVERTTOCLOB(v_CLOB, v_BLOB, DBMS_LOB.LOBMAXSIZE, dest_offset, src_offset, 871, lang_context, v_error);
    s_txt:= dbms_lob.substr(v_clob,4000);
    dbms_output.put_line(s_txt);
    --dbms_output.put_line(DBMS_LOB.default_csid);
end;



Пока разбираюсь, с чем это едят. В процессе возникла ситуация, когда требуется текстовые результаты PL/SQL из dbms_output.put_line вывести в Delphi

P.S. Знания должны принадлежать человечеству
...
Рейтинг: 0 / 0
Чтение текстового файла из поля с типом BLOB средствами языка SQL/PLSQL
    #39916887
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fragmaker
..
Пока разбираюсь, с чем это едят. В процессе возникла ситуация, когда требуется текстовые результаты PL/SQL из dbms_output.put_line вывести в Delphi

P.S. Знания должны принадлежать человечеству


ну знай, болезный, что если в итоге не прибьешь этого (того с правами), то придут с паяльником к тебе
...
Рейтинг: 0 / 0
39 сообщений из 39, показаны все 2 страниц
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Чтение текстового файла из поля с типом BLOB средствами языка SQL/PLSQL
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]