Модификация подстрок 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
.