Дать порцию BLOB-значения в текстовом виде

Функция

Дать порцию BLOB-значения в текстовом виде.

Спецификация
 
Синтаксические правила
  1. При выполнении функции BLOB-данные рассматриваются как непрерывный массив байт, т.е. выделение слов игнорируется.

  2. < Смещение порции > – целое неотрицательное значение типа INTEGER, задающее номер байта, с которого начинается порция данных. Отсчет выполняется с 1. Если кодировка столбца UNICODE, то < смещение порции > должно быть нечётным (т.к. не допускается получение половины UNICODE-символа).

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

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

  5. < Режим подсчёта > задает режим подсчета длины:

    • 0 – в байтах (по умолчанию). Означает, что и < смещение порции >, и < размер порции > заданы в байтах;

    • 1 – в символах. Означает, что и < смещение порции >, и < размер порции > заданы в символах.

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

    create or replace table test(bl blob);
    insert into test values(null);
    blob insert column=1 333333ABCDc0ff4532;
    select getblobstr(bl, ? (int), 10,1) from test;
    2
    |33л-└ E2  |

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

  2. Тип возвращаемого значения:

    • NCHAR: в случае кодировки UCS2;

    • CHAR: во всех остальных случаях, текст будет автоматически перекодирован из кодировки, указанной при создании BLOB-столбца, в кодировку канала.

  3. Если BLOB-данные имеют NULL-значение, возвращается строка пробелов.

  4. Если один из параметров имеет значение NULL, то результат будет NULL.

Примеры
create or replace table tst ("Информация о БД"  blob);

insert into tst ("Информация о БД")
values ('СУБД ЛИНТЕР – реляционная мобильная ...');

select  getblob("Информация о БД",1,40) from tst;
| D1 D3 C1 C4 20 CB C8 CD D2 C5 D0 20 2D 20 F0 E5 EB FF F6 E8 EE ED ED E0 FF 20 EC EE E1 E8 EB FC ED E0 FF 20 2E 2E 2E 20|
select  getblobstr("Информация о БД",1,40) from tst;|СУБД ЛИНТЕР – реляционная мобильная ... |
create or replace table blb(bl blob character set "CP866");
insert into blb values (n'12АБВГ');
select getblobstr(bl,3,2),getblobstr(bl,3,2,1) from blb;
|АБ|АБ|
create or replace table blb(bl blob character set "UCS2");
insert into blb values (n'12АБВГ');
select getblobstr(bl,5,4),getblobstr(bl,3,2,1) from blb;
|АБ|АБ|
create or replace table blb(bl blob character set "UTF-8");
insert into blb values (n'12АБВГ');
select getblobstr(bl,3,4),getblobstr(bl,3,2,1) from blb;
|АБ  |АБ    |