Модификация подстрок BLOB-данных
Функция
Модификация всех заданных подстрок BLOB-данных с помощью SQL-запросов UPDATE и UPDATE CURRENT.
Спецификация
::=
::=
Синтаксические правила
-
< Подстрока1 >
,< подстрока2 >
должны иметь типы данных: CHAR, VARCHAR, NCHAR, NCHAR VARYING, BYTE, VARBYTE. -
Длина
< подстроки1 >
,< подстроки2 >
не должна быть более 4000. -
< Подстрока1 >
задает удаляемое из< столбца >
значение. -
< Подстрока2 >
задает вставляемое вместо удаленной< подстроки1 >
значение. -
Если
< подстрока1 >
и< подстрока2 >
имеют символьный тип данных (CHAR, VARCHAR, NCHAR, NCHAR VARYING), они автоматически перекодируются в кодовую страницу, заданную для BLOB-столбца. Если< подстрока1 >
и< подстрока2 >
имеют байтовый тип данных, они будут использоваться «как есть». -
Аргументы
< подстрока1 >
и< подстрока2 >
могут быть заданы< SQL-параметром >
, который должен содержать спецификацию типа данных параметра.create or replace table test(bl blob); insert into test(bl) values('Мы едем, едем, едем в далекие края.'); select lenblob(bl), getblobstr(bl, 1, 35) from test; | 35|Мы едем, едем, едем в далекие края.| update test set bl=replace(bl, :line1 (char(4)), :line2 (char(4))); едем ЕДЕМ select lenblob(bl), getblobstr(bl, 1, 35) from test; | 35|Мы ЕДЕМ, ЕДЕМ, ЕДЕМ в далекие края.|
Общие правила
-
В текущей строке BLOB-столбца удаляются символы или байты всех
< подстрок1 >
, и вместо них вставляются символы или байты< подстроки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=replace(bl, '123456', 'замена'); select lenblob(bl), getblobstr(bl, 1, 60) from test; | 50|0замена789 aaa 0замена789| update test set bl=replace(bl, HEX('37003800'), HEX('78007800')); select lenblob(bl), getblobstr(bl, 1, 60) from test; | 50|0заменаxx9 aaa 0заменаxx9|
Примечание
В конструкции «set bl=replace(bl, '123456', 'замена')
» часть «bl=
» является вспомогательной, т.е. реального присвоения не происходит, а собственно модификация BLOB-значения осуществляется внутри функции REPLACE
.