Функции для работы с BLOB-данными

С точки зрения поиска информации внутри BLOB-данных все возможные виды BLOB-данных (текст, графика, музыка, видеоизображение и т.п.) рассматриваются СУБД ЛИНТЕР одинаково – как набор слов.

Слово внутри BLOB-данных – это непрерывная последовательность из букв, цифр, знаков подчеркивания и дефисов длиной не более 239 знаков, все остальные знаки, встреченные в BLOB-значении (пробелы, знаки табуляции, графические символы и др.), считаются разделителями и в поиске не участвуют.

Более широкие возможности для работы с BLOB-данными, содержащими только текстовую информацию в различных форматах (DOC, PDF, RTF и т.д.), предоставляют средства полнотекстового поиска (см. документ «СУБД ЛИНТЕР. Полнотекстовый поиск в базе данных», раздел «Элементы языка»).

Еще один набор функций для работы с BLOB-данными предоставляет утилита inl (см. документ «СУБД ЛИНТЕР. Командный интерфейс», подраздел «Работа с BLOB-данными»):

blob {insert | clear | append | get}
{rowid=< rowid записи >
< имя схемы >.< имя таблицы >.< имя столбца >
|column=< номер столбца >} {file=< имя файла >
|< BLOB-данные >};

Например,

username SYSTEM/MANAGER8
create or replace table test(i int, bl1 blob, bl2 blob);
insert into test(i,bl1,bl2) values(1,NULL,NULL);
blob insert column=2 333333ABCD;
blob append column=3 444444ABCD;

Пример

Пусть в качестве BLOB-данных записан следующий текст:

SELECT $$$S34,$$$S13 FROM $$$SYSRL,$$$USR WHERE $$$S12 =$$$S31
AND $$$S32 =0 AND ACCESS(USER,$$$S11) <  > '------';

Этот текст содержит следующий набор слов (с точки зрения функций BLOB):

SELECT S34 S13 FROM SYSRL USR WHERE S12 S31 AND S32 0 ACCESS USER S11

Присутствующие в BLOB-значении символы «$», «,», «=», «)», «(», «< », « >», «'» не являются элементами слов и интерпретируются как разделители.

Каждое слово BLOB-значения имеет смещение – номер (от начала BLOB-значения) первого байта (знака) слова. Смещения начинаются с нуля.