Модификация подстроки 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-столбца. Если< подстрока >
имеет байтовый тип данных, она будет использоваться «как есть». -
Аргументы
< позиция >
,< длина >
и< подстрока >
могут быть заданы< 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|
Общие правила
-
Начиная с
< позиции >
, в 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
.