Как сделать выборку из BLOB колонки по условию?

В таблице есть BLOB колонка, и в ней в заархивированном виде хранится HTML файл.

Нужно сделать выборку из этой таблицы, и найти все записи, где внутри HTML файла есть определенный тег.

Кто с данной задачей сталкивался, как это можно реализовать в запросе? Или вообще, как это можно реализовать?


Ответы (1 шт):

Автор решения: 0xdb

Сделайте вот так:

create table tblob (name varchar2 (16), data blob)
/
declare 
    val raw (32767) := utl_raw.cast_to_raw (
    '<html><body><mytag>My tag</mytag></body></html>');
begin
    insert into tblob values ('mypage', utl_compress.lz_compress (val));
end;    
/    
select name, text, data from (
    select name, data,
        utl_raw.cast_to_varchar2 (
            dbms_lob.substr (utl_compress.lz_uncompress (data), 4000, 1)) text
    from tblob b)
where regexp_like (text, '<mytag>')    
/

Результат:

NAME     TEXT                             DATA            
-------- -------------------------------- ----------------
mypage   <html><body><mytag>My            1F8B080000000000
         tag</mytag></body></html>        0003B3C928C9CDB1
                                          B349CA4FA9B4B3C9
                                          AD2C494CB7F3AD54
                                          005236FA109E8D3E

PS Если решение не будет достатоно производительно, то возможно поможет индексация текстовой информации ещё до архивации, как описано здесь.

→ Ссылка