Поиск слова в текстовых BLOB-данных

Функция

Поиск слова, соответствующего заданному шаблону, в текстовых BLOB-данных.

Поиск выполняется в BLOB-данных в форматах RTF, PDF, DOC, XLS, PPT и PS.

Спецификация
 
Синтаксические правила
  1. < Имя столбца > должно соответствовать столбцу с BLOB-данными.

  2. < Шаблон поиска > может содержать стандартные специальные символы: подчеркивание «_» представляет собой указатель на произвольный символ, процент «%» – указатель на подстроку (возможно, пустую).

  3. В качестве < шаблона поиска > можно использовать < UNICODE-литерал >.

  4. Поиск выполняется во всех BLOB-значениях, получаемых в < запросе выборки >.

  5. < Числовое выражение > в параметре < номер вхождения > – целое неотрицательное (больше нуля) значение типа INTEGER, задающее порядковый номер слова, которое должно быть найдено.

  6. Аргументы < шаблон поиска > и < номер вхождения > могут быть заданы < SQL-параметром >, который должен содержать спецификацию типа данных параметра.

    Например,

    Файл text.rtf:
    ЛИНТЕР: назначение и основные возможности
    ЛИНТЕР – это мощная система управления базами данных (СУБД).
    
    create or replace  table tst (i int, bl blob);
    insert into tst(i,bl) values(1,NULL);
    blob insert column=2 file=text.rtf;
    select findrtf(bl,'%ЛИН%', 2) from tst;
    select findrtf(bl,? (char(10)), ?(int)) from tst;
    %ЛИН%
    2
    |         43|
Возвращаемое значение
  1. Если BLOB-данные представлены в формате RTF (в соответствии со спецификацией формата RTF это определяется по наличию префикса ({/rtf в начале BLOB-данных)), то сначала осуществляется декодирование символов кириллицы (символы латиницы в RTF не кодируются), а затем поиск нужной строки.

  2. Если BLOB-данные представлены не в форматах PDF, DOC, XLS, PPT и PS, функция выполняется как FINDBLOB.

  3. Возвращается смещение найденного слова или 0, если все слова BLOB-значения не соответствуют шаблону. Смещение начинается с 1.

  4. Тип возвращаемого значения – INT.