Выборка порции текста внешнего файла

Функция

Получение заданной порции текстовых данных внешнего файла.

Спецификация
 
< синтаксис >::=
< имя столбца >::=
< идентификатор >
< длина >::=
целое положительное число
Синтаксические правила
  1. < Имя столбца > должно принадлежать столбцу типа BLOB, EXTFILE, CHAR, VARCHAR, NCHAR, NCHAR VARYING.

  2. < Смещение > – целое положительное число, задающее начальную позицию требуемой порции текста. Первый символ текста имеет смещение 1.

  3. < Длина > – размер требуемой порции текста в символах (целое число в диапазоне от 1 до 2000). Количество символов (и смещение) задаётся в символах оригинального документа. Если у пользователя стоит кодировка MBCS или UTF-8, то длина результата преобразования может превысить допустимые для столбца 4000 байт. В результате часть данных не будет передана. Нужно учитывать эту особенность в случае, когда извлекаются непрерывные куски текста несколькими порциями.

Возвращаемое значение
  1. Возвращается затребованная порция прошедшего через фразовый фильтр текста, определяемая указанными < смещением > и < длиной >.

  2. В возвращаемом значении порция текста после последнего символа текста столбца заполняется пробелами.

  3. Если размер требуемой порции текста превышает 2000 символов, то возвращается 2000 символов текста, а оставшаяся часть результата заполняется пробелами.

  4. Для файлов типа XML и HTML функция возвращает только чистый текст (пары «атрибут-значение» игнорируются).

  5. NULL-значение возвращается в случае, если требуемый файл не существует (для столбца типа EXTFILE) или если в процессе получения требуемой порции текста произошла ошибка.

  6. Правила выбора фразового фильтра совпадают с правилами, используемыми при создании фразового индекса со значениями флагов, принятыми по умолчанию для данного типа столбца (см. функцию CREATE PHRASE INDEX, подраздел Создание фразового индекса).

  7. Даже если в системной таблице $$$CHARSET не задана кодировка 866, 1251 или 20866, то перекодировка текста все равно будет выполнена правильно с помощью встроенных в СУБД ЛИНТЕР внутренних таблиц кодировки. В противном случае символы с кодами меньше 0x80 извлекаются как есть (подразумевается 7-битный ASCII), а остальные символы заменяются на '?'.

Примечание

Поскольку выдается текст, прошедший через фильтр, в нем могут отсутствовать знаки препинания, символы разметки и т.п.

Пример

Найти позицию третьего повторения фразы «баз данных» в документе с идентификатором 10

select instr(gettext(text_doc,1,1500),'баз данных',1,3) from "ph" where id_doc=10;