Работа с типом данных BLOB
В процедурном языке работа с типом данных BLOB реализована с помощью нижеследующих функций (таблица 5).
Имя | Функция |
---|---|
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-значениями.
- Установка текущего BLOB-столбца
- Добавление данных в конец BLOB-значения
- Чтение данных из BLOB-значения на общем уровне
- Чтение данных типа int из BLOB-значения
- Чтение данных типа smallint из BLOB-значения
- Чтение данных типа bigint из BLOB-значения
- Чтение данных типа real из BLOB-значения
- Чтение данных типа numeric из BLOB-значения
- Чтение данных типа double из BLOB-значения
- Чтение данных типа char из BLOB-значения
- Чтение данных типа nchar из BLOB-значения
- Чтение данных типа date из BLOB-значения
- Чтение данных типа bool из BLOB-значения
- Установка текущей позиции для чтения BLOB-данных
- Получение размера BLOB-значения
- Удаление BLOB-значения
- Типизация BLOB-значения
- Длина BLOB-значения