BLOB_APPEND
Версии сервера
| 2.5 | 3.0 | 4.0 | 5.0 | 6.0 |
|---|---|---|---|---|
| − | − | Да | Да | Да |
Доступно в
Формат
BLOB_APPEND(<blob> [, <value1> [, <valueN> ...]])
| Параметр | Описание |
|---|---|
blob | BLOB или NULL |
value1..N | Значения любого типа |
Описание
Функция BLOB_APPEND конкатенирует BLOB без создания промежуточных BLOB. Обычная конкатенация с аргументами типа BLOB создаёт столько временных BLOB, сколько раз используется; BLOB_APPEND этого избегает.
Поведение для первого аргумента:
NULL— создаётся новый пустой незакрытый BLOB;- постоянный BLOB (из таблицы) или временный закрытый BLOB — создаётся новый незакрытый BLOB, в который копируется содержимое первого;
- временный незакрытый BLOB — используется далее (дописывается);
- другие типы — преобразуются в строку, создаётся временный незакрытый BLOB с её содержимым.
Остальные аргументы: NULL игнорируется; не-BLOB значения приводятся к строке и дописываются; BLOB при необходимости транслитерируются к набору символов первого аргумента и дописываются.
Результат — временный незакрытый BLOB (флаг BLB_close_on_read): новый либо тот же, что в первом аргументе. Поэтому цепочка blob = BLOB_APPEND(blob, ...) создаёт не более одного временного BLOB. Он автоматически закрывается движком при чтении клиентом, записи в таблицу или использовании в выражениях, требующих чтения содержимого.
Примечание. Проверка BLOB на
NULLоператоромIS [NOT] NULLего не читает — временный BLOB при такой проверке не закрывается.
Примечание. Используйте
LISTиBLOB_APPENDдля конкатенации BLOB: это экономит память и дисковый ввод-вывод и предотвращает разрастание базы из-за множества временных BLOB от операторов||.
Пример
Пошаговое наращивание текстового BLOB без промежуточных объектов:
execute block
returns (b blob sub_type text)
as
begin
-- NULL первым аргументом: создаётся новый временный незакрытый BLOB
b = blob_append(null, 'Hello ');
-- дописываем две строки, не закрывая BLOB
b = blob_append(b, 'World', '!');
-- сравнение BLOB со строкой читает его и закрывает
if (b = 'Hello World!') then
begin
-- ...
end
-- конкатенация с закрытым BLOB создаёт временный закрытый BLOB
b = b || 'Close';
suspend;
end
См. также
Встроенные функции по группам, Типы данных
Источник
Руководство по языку SQL СУБД Firebird 5.0 (sim1984 / ibase.ru, Public Documentation License)
Обсуждение