Как сделать выборку из 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 Если решение не будет достатоно производительно, то возможно поможет индексация текстовой информации ещё до архивации, как описано здесь.