Работа с типом данных BLOB

                                   

В процедурном языке работа с типом данных BLOB реализована с помощью нижеследующих функций (таблица 5).

Таблица 5. Функции для работа с типом данных BLOB
ИмяФункция
set_cur_blobУстановка текущего BLOB-столбца при обработке запроса с несколькими BLOB-значениями
add_blobДобавление порции данных в конец BLOB-значения (запись в произвольное место не допустима)
read_blobЧтение указанного типа данных из BLOB-значения
read_blob_int
read_blob_smallint
read_blob_bigint
read_blob_real
read_blob_double
read_blob_numeric
read_blob_char
read_blob_date
read_blob_bool
read_blob_nchar
seek_blobУстановка текущей позиции для чтения BLOB-данных
clear_blobУдаление BLOB-значения
blob_sizeПолучение информации из описателя BLOB-значения
modify_blob_typeТипизация BLOB-значения
lengthДлина BLOB-значения

В момент операции с BLOB-значением должны быть определены текущая запись таблицы и номер BLOB-столбца, для которых будет производиться эта операция. Текущая запись устанавливается в следующих случаях:

  • после успешного выполнения SELECT-запроса;

  • после выборки определенной записи (FETCH);

  • после добавления новой записи в таблицу.

Номер BLOB-столбца, к которому добавляется порция данных, предварительно устанавливается с помощью функции set_cur_blob. Если эта функция не была вызвана, то используется последний BLOB-столбец.

Так как процедурный язык обеспечивает два способа выполнения манипуляций с БД, а именно, с помощью курсоров и оператора EXECUTE, в функциях работы с BLOB-данными существуют, соответственно, два способа указывать выборку, для которой производится операция с BLOB-значением:

  • для курсоров в качестве первого параметра функции указывается курсорная переменная и далее остальные параметры;

  • если необходимо работать с BLOB-значением для записи, которая была выбрана в результате выполнения SELECT-запроса или INSERT-запроса оператором EXECUTE, ссылка на курсор не задается, и сразу перечисляются остальные параметры функции.

При работе с BLOB-данными первым способом (через курсор) в описании курсора используется ключевое слово BLOB для указания поля, которое в выборке соответствует столбцу типа BLOB. При выборке записей SELECT-запроса для поля типа BLOB возвращается только информационный заголовок длиной 14 байт. Для работы собственно с BLOB-значениями (чтение, добавление, очистка) используются специальные стандартные функции. Фактически ключевое слово BLOB является синонимом для BYTE(14), в такое поле как раз и считывается заголовок. Полезной информацией, которую можно извлечь из заголовка, является размер порции BLOB-данных. Для его получения используется функция blob_size.

Чтение данных из BLOB-значения организовано так, что каждый новый вызов функции чтения выбирает очередную информацию, расположенную в BLOB-значении, сразу после тех данных, которые были прочитаны предыдущим вызовом (или с начала, если с момента выборки текущей записи операций чтения еще не было). Это аналогично чтению данных из последовательного файла и достаточно удобно в использовании. Если необходимо произвести чтение с конкретной позиции в BLOB-значении, перед вызовом функции чтения можно установить указатель текущей позиции с помощью функции seek_blob.

Попытка работы с BLOB-значениями таким образом, когда сначала выбираем BLOB-значение, затем работаем с другой таблицей (например, делаем insert), затем снова возвращаемся к старому BLOB-значению в рамках внутреннего канала процедуры (то есть делаем это все не по разным курсорам), является недопустимой.

Чтобы реализовать такую схему работы, необходимо использовать дополнительный курсор, по которому ведется работа с BLOB-значениями.