Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Чтение текстового файла из поля с типом BLOB средствами языка SQL/PLSQL  [new]
fragmaker
Member

Откуда:
Сообщений: 23
Приветствую, форумчане, и всех грызущих и хвостатых, точащих основы СУБД Oracle! Только начинаю постигать вопросы администрирования СУБД Oracle и вот собственно вопрос: можно ли осуществить чтение из текстового файла через SQL/PLSQL запрос, который загружен в BLOB поле таблицы? Есть ли специальные инструменты, пакеты (наподобие DBMS_LOB), чтобы считать текст из BLOB? Если есть, то как это сделать на SQL/PLSQL? Требуется осуществить поиск по ключевым словам в этом текстовом файле и в зависимости от этого выдать сообщение о наличии или отсутствии этих слов.

P.S. Если что, то изначально известно, что в BLOB поле содержится текстовый файл с расширением txt.

Сообщение было отредактировано: 8 ноя 19, 11:04
8 ноя 19, 10:56    [22012160]     Ответить | Цитировать Сообщить модератору
 Re: Чтение текстового файла из поля с типом BLOB средствами языка SQL/PLSQL  [new]
dmdmdm
Member

Откуда: Нижний Новгород
Сообщений: 1640
fragmaker
Только начинаю постигать


Начали с поиска?
8 ноя 19, 11:04    [22012164]     Ответить | Цитировать Сообщить модератору
 Re: Чтение текстового файла из поля с типом BLOB средствами языка SQL/PLSQL  [new]
-2-
Member

Откуда:
Сообщений: 15330
fragmaker
осуществить чтение из текстового файла через SQL/PLSQL запрос, который загружен в BLOB поле таблицы?
Кто на ком стоял?
fragmaker
Есть ли специальные инструменты
Чем специальные отличаются от неспециальных?
8 ноя 19, 11:09    [22012167]     Ответить | Цитировать Сообщить модератору
 Re: Чтение текстового файла из поля с типом BLOB средствами языка SQL/PLSQL  [new]
fragmaker
Member

Откуда:
Сообщений: 23
dmdmdm, начинал...Пришёл к тому, что, как понял, текстовый файл во время записи в BLOB представляется в двоичной или 16-й системе и считывать данные нужно порционно. А примеры, как это сделать - не нашёл. Плохо искал видимо...Если же что-то путаю, то в какую сторону нужно копать? Просто вообще не понятно, с чего начать. Как выбирать "обычные" сведения из типов CHAR, varchar2, number понятно, а вот с чем есть BLOB - вообще непонятно...Нужно наставить на истинный путь силы
8 ноя 19, 11:12    [22012170]     Ответить | Цитировать Сообщить модератору
 Re: Чтение текстового файла из поля с типом BLOB средствами языка SQL/PLSQL  [new]
fragmaker
Member

Откуда:
Сообщений: 23
-2-, хорошо...можно вообще хоть что-нибудь, хотя бы какой-нибудь пример, потому что поиск в Инете не увенчался успехом и непонятно, с чего начать
8 ноя 19, 11:14    [22012172]     Ответить | Цитировать Сообщить модератору
 Re: Чтение текстового файла из поля с типом BLOB средствами языка SQL/PLSQL  [new]
fragmaker
Member

Откуда:
Сообщений: 23
-2-, текстовый файл с расширением txt загружен в поле BLOB. Требуется считать его средствами SQL/PLSQL и требуемые слова вывести на экран либо указать, что они есть. Объяснять основы SQL не нужно. Нужны инструменты (любые), которые решат поставленную задачу. И желательно примеры либо наставить на путь силы!
8 ноя 19, 11:18    [22012173]     Ответить | Цитировать Сообщить модератору
 Re: Чтение текстового файла из поля с типом BLOB средствами языка SQL/PLSQL  [new]
K790
Member

Откуда:
Сообщений: 634
fragmaker,

Попробуйте так поискать
8 ноя 19, 11:18    [22012174]     Ответить | Цитировать Сообщить модератору
 Re: Чтение текстового файла из поля с типом BLOB средствами языка SQL/PLSQL  [new]
-2-
Member

Откуда:
Сообщений: 15330
fragmaker
Объяснять основы SQL не нужно.
Для общения на одном языке сначала нужно ознакомиться с азбукой и словарем. Это лучше делать по профессионально писанным книгам и документации.
8 ноя 19, 12:10    [22012221]     Ответить | Цитировать Сообщить модератору
 Re: Чтение текстового файла из поля с типом BLOB средствами языка SQL/PLSQL  [new]
MazoHist
Member

Откуда:
Сообщений: 145
blob_to_clob
8 ноя 19, 14:37    [22012369]     Ответить | Цитировать Сообщить модератору
 Re: Чтение текстового файла из поля с типом BLOB средствами языка SQL/PLSQL  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18370
MazoHist
blob_to_clob

В решении по ссылке профукана важная деталь.
8 ноя 19, 15:03    [22012396]     Ответить | Цитировать Сообщить модератору
 Re: Чтение текстового файла из поля с типом BLOB средствами языка SQL/PLSQL  [new]
oragraf
Member

Откуда: Moscow
Сообщений: 1317
andrey_anonymous
В решении по ссылке профукана важная деталь.
Кодировка?
8 ноя 19, 16:47    [22012489]     Ответить | Цитировать Сообщить модератору
 Re: Чтение текстового файла из поля с типом BLOB средствами языка SQL/PLSQL  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18370
oragraf
andrey_anonymous
В решении по ссылке профукана важная деталь.
Кодировка?

Да
8 ноя 19, 16:51    [22012492]     Ответить | Цитировать Сообщить модератору
 Re: Чтение текстового файла из поля с типом BLOB средствами языка SQL/PLSQL  [new]
Кроик Семён
Member

Откуда: СПб --> Dortmund
Сообщений: 6656
fragmaker,

OFF
если там всегда только текст лежит, можно было бы поле сразу CLOB вместо BLOB сделать
8 ноя 19, 17:01    [22012495]     Ответить | Цитировать Сообщить модератору
 Re: Чтение текстового файла из поля с типом BLOB средствами языка SQL/PLSQL  [new]
-2-
Member

Откуда:
Сообщений: 15330
Кроик Семён
сразу CLOB
Если не мелочиться на "если", то varchar2(1) может оказаться еще сразей.
8 ноя 19, 17:19    [22012506]     Ответить | Цитировать Сообщить модератору
 Re: Чтение текстового файла из поля с типом BLOB средствами языка SQL/PLSQL  [new]
fragmaker
Member

Откуда:
Сообщений: 23
Кроик Семён, нет. В БД может быть подцеплен любой файл, скрипт по выборке именно текстовых файлов уже сделали, теперь надо достать текст. И вот здесь мои познания заканчиваются. Теперь только надежда на богов SQL/PLSQL.
14 ноя 19, 11:41    [22016023]     Ответить | Цитировать Сообщить модератору
 Re: Чтение текстового файла из поля с типом BLOB средствами языка SQL/PLSQL  [new]
-2-
Member

Откуда:
Сообщений: 15330
fragmaker
скрипт по выборке именно текстовых файлов уже сделали
Множественное число "сделали" предполагает, что не сам. Если твоему пониманию недоступно условие равенства типа типафайла=текст, то по использованию функции нужно взывать не к просто богам, а к пантеону сингулярности.
14 ноя 19, 13:14    [22016149]     Ответить | Цитировать Сообщить модератору
 Re: Чтение текстового файла из поля с типом BLOB средствами языка SQL/PLSQL  [new]
fragmaker
Member

Откуда:
Сообщений: 23
andrey_anonymous
MazoHist
blob_to_clob

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

А каким образом изменить кодировку после преобразования в CLOB?
26 дек 19, 09:21    [22049117]     Ответить | Цитировать Сообщить модератору
 Re: Чтение текстового файла из поля с типом BLOB средствами языка SQL/PLSQL  [new]
fragmaker
Member

Откуда:
Сообщений: 23
andrey_anonymous, привожу пример кода преобразования из BLOB в CLOB
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;

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

Текстовый файл в формате UTF-8. Каким образом преобразовать в нормальный текст?
26 дек 19, 09:59    [22049138]     Ответить | Цитировать Сообщить модератору
 Re: Чтение текстового файла из поля с типом BLOB средствами языка SQL/PLSQL  [new]
dmdmdm
Member

Откуда: Нижний Новгород
Сообщений: 1640
Для начала нужно убедиться, что в исходных данных текст.
Заголовок похож на заголовок бинарного zip-файла.
А дальше читать про преобразование кодировок.
26 дек 19, 10:08    [22049142]     Ответить | Цитировать Сообщить модератору
 Re: Чтение текстового файла из поля с типом BLOB средствами языка SQL/PLSQL  [new]
Elic
Member

Откуда:
Сообщений: 29990
fragmaker
PK
Текстовый файл в формате UTF-8. Каким образом преобразовать в нормальный текст?
Распаковать zip.
26 дек 19, 10:08    [22049143]     Ответить | Цитировать Сообщить модератору
 Re: Чтение текстового файла из поля с типом BLOB средствами языка SQL/PLSQL  [new]
-2-
Member

Откуда:
Сообщений: 15330
dmdmdm
Заголовок похож на заголовок бинарного zip-файла.
Или эксел 504B0304
26 дек 19, 11:14    [22049188]     Ответить | Цитировать Сообщить модератору
 Re: Чтение текстового файла из поля с типом BLOB средствами языка SQL/PLSQL  [new]
irbis_al
Member

Откуда: Симферополь
Сообщений: 1749
fragmaker

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

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

даёт текущую.(И если оне не AL32UTF8 то будет лажа)
Вот тут ниже по ссылке преобразовывают.
https://dba.stackexchange.com/questions/175411/convert-returns-garbage-with-clobs-in-oracle
26 дек 19, 12:17    [22049249]     Ответить | Цитировать Сообщить модератору
 Re: Чтение текстового файла из поля с типом BLOB средствами языка SQL/PLSQL  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18370
fragmaker
andrey_anonymous, привожу пример кода преобразования из BLOB в CLOB
    blob_csid     => DBMS_LOB.default_csid, --вот тут и надо указать идентификатор кодировки BLOB.

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


Но для начала обратите внимание на сообщения коллег о нетекстовой природе содержимого BLOB, я бы тоже предположил ZIP.
Его, кстати, можно распаковать прямо в БД, если лицензированного процессора не жаль
26 дек 19, 18:05    [22049559]     Ответить | Цитировать Сообщить модератору
 Re: Чтение текстового файла из поля с типом BLOB средствами языка SQL/PLSQL  [new]
fragmaker
Member

Откуда:
Сообщений: 23
dmdmdm, и действительно..., скорей всего в нашей БД данные предварительно заархивированы и помещены в zip файл, потому что при элементарных проверках
DBMS_LOB.SUBSTR(ed.elado_bytes, 30)

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

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

Я то вначале подумал, что это Oracle на меня на японо-корея-китайском языке обругалась, а оно вон что значит - ТЕКСТОВАЯ СИГНАТУРА!

К сообщению приложен файл. Размер - 57Kb
27 дек 19, 08:21    [22049857]     Ответить | Цитировать Сообщить модератору
 Re: Чтение текстового файла из поля с типом BLOB средствами языка SQL/PLSQL  [new]
Elic
Member

Откуда:
Сообщений: 29990
fragmaker
а в БД под интерфейсом виден файл *.txt.
Кулибин, обратись к разработчикам, пока ещё чего-нибудь не сломал.
27 дек 19, 08:24    [22049858]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Oracle Ответить