Модификация подстроки BLOB-данных
Функция
Модификация заданной подстроки BLOB-данных с помощью SQL-запросов UPDATE
и UPDATE CURRENT
.
Спецификация
::=
::=
::=
Синтаксические правила
-
<Символьное выражение>
в аргументе может иметь следующий тип данных: CHAR, VARCHAR, NCHAR, NCHAR VARYING, BYTE, VARBYTE. -
Длина
<подстроки>
не должна быть более 4000. -
<Позиция>
задает позицию в байтах заменяемой подстроки в<столбце>
. Отсчет начинается с 1. Если BLOB-столбец имеет кодовую страницу UNICODE, то<позиция>
не может быть чётной, в противном случае выдаётся код завершения 1036 («Значение аргумента в недопустимом диапазоне»). -
<Длина>
задает длину заменяемой подстроки в<столбце>
в байтах. Если BLOB-столбец имеет кодовую страницу UNICODE, то<позиция>
не может быть нечётной, в противном случае выдаётся код завершения 1036 («Значение аргумента в недопустимом диапазоне»). -
<Подстрока>
задает значение, вставляемое вместо удаленной подстроки. -
Если
<подстрока>
имеет символьный тип данных (CHAR, VARCHAR, NCHAR, NCHAR VARYING), она автоматически перекодируется в кодовую страницу, заданную для 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, ? (int), ? (int), ? (char(2))); 3 2 aa select lenblob(bl), getblobstr(bl, 1, 60) from test; | 50|01aa456789 aaa 0123456789|
Общие правила
-
Начиная с
<позиции>
, в BLOB-столбце удаляется<длина>
байт, и на их место вставляются символы или байты<подстроки>
. -
Если будет предпринята попытка заменить часть 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
.