Доступные версии документации

Модификация подстроки BLOB-данных

Функция

Модификация заданной подстроки BLOB-данных с помощью SQL-запросов UPDATE и UPDATE CURRENT.

Спецификация
   
<модификация порции BLOB-данных>::=
<спецификация модифицируемой порции>::=
<столбец>::=
Синтаксические правила
  1. <Символьное выражение> в аргументе может иметь следующий тип данных: CHAR, VARCHAR, NCHAR, NCHAR VARYING, BYTE, VARBYTE.

  2. Длина <подстроки> не должна быть более 4000.

  3. <Позиция> задает позицию в байтах заменяемой подстроки в <столбце>. Отсчет начинается с 1. Если BLOB-столбец имеет кодовую страницу UNICODE, то <позиция> не может быть чётной, в противном случае выдаётся код завершения 1036 («Значение аргумента в недопустимом диапазоне»).

  4. <Длина> задает длину заменяемой подстроки в <столбце> в байтах. Если BLOB-столбец имеет кодовую страницу UNICODE, то <позиция> не может быть нечётной, в противном случае выдаётся код завершения 1036 («Значение аргумента в недопустимом диапазоне»).

  5. <Подстрока> задает значение, вставляемое вместо удаленной подстроки.

  6. Если <подстрока> имеет символьный тип данных (CHAR, VARCHAR, NCHAR, NCHAR VARYING), она автоматически перекодируется в кодовую страницу, заданную для BLOB-столбца. Если <подстрока> имеет байтовый тип данных, она будет использоваться «как есть».

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

    create or replace table test(bl blob character set "UCS2");
    insert into test(bl) values('0123456789 aaa 0123456789');
    select lenblob(bl), getblobstr(bl, 1, 60) from test;
    |         50|0123456789 aaa 0123456789|
    update test set bl=insert(bl, ? (int), ? (int), ? (char(2)));
    3
    2
    aa
    select lenblob(bl), getblobstr(bl, 1, 60) from test;
    |         50|01aa456789 aaa 0123456789|
Общие правила
  1. Начиная с <позиции>, в BLOB-столбце удаляется <длина> байт, и на их место вставляются символы или байты <подстроки>.

  2. Если будет предпринята попытка заменить часть BLOB-данных на порцию, <длина> которой в байтах отличается от заменяемой части, то будет выдан код завершения 1721 («Неверное смещение в странице BLOB»).

Возвращаемое значение

Отсутствует. Если значения аргументов функции правильные, выполняется корректировка BLOB-данных, в противном случае BLOB-данные не изменяются.

Пример
create or replace table test(bl blob character set "UCS2");
insert into test(bl) values('0123456789 aaa 0123456789');
select lenblob(bl), getblobstr(bl, 1, 60) from test;
|         50|0123456789 aaa 0123456789|
update test set bl=insert(bl, 3, 2, 'aa');
select lenblob(bl), getblobstr(bl, 1, 60) from test;
|         50|01aa456789 aaa 0123456789|
update test set bl=insert(bl, 5, 3, HEX('310031003100'));
select lenblob(bl), getblobstr(bl, 1, 60) from test;
|         50|01aa111789 aaa 0123456789|

Примечание

В конструкции «bl=insert(bl, 3, 10, 'aa')» часть «bl=» является вспомогательной, то есть реального присвоения не происходит, а собственно модификация BLOB-данных осуществляется внутри функции INSERT.

Заметили ошибку?
Выделите текст и нажмите Ctrl + Enter