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