с Firebird 4.0 ваша версия: любая

BLOB_APPEND

Версии сервера

2.53.04.05.06.0
−−ДаДаДа

Доступно в

DSQL, PSQL

Формат

BLOB_APPEND(<blob> [, <value1> [, <valueN> ...]])
ПараметрОписание
blobBLOB или NULL
value1..NЗначения любого типа

Описание

Функция BLOB_APPEND конкатенирует BLOB без создания промежуточных BLOB. Обычная конкатенация с аргументами типа BLOB создаёт столько временных BLOB, сколько раз используется; BLOB_APPEND этого избегает.

Поведение для первого аргумента:

Остальные аргументы: 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)

Обсуждение