Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Shpory_po_SUBD.docx
Скачиваний:
9
Добавлен:
01.04.2025
Размер:
135.36 Кб
Скачать
  1. Работа с blob и функции, определенные пользователем

BLOB – (большой двоичный объект) предназначен для хранения данных произвольного формата переменной длины, и, как правило, значительного размера. BLOB представляет собой тип данных с динамически изменяемым размером, для этого типа не указываются ни размеры, ни способ кодирования. Внутри таблиц вместо данных BLOB записываются их уникальные дескрипторы (указатели) фиксированного размера на место их фактического хранения. Доступ к дескрипторам данным BLOB в InterBase осуществляется также, как к данным, хранимым в других форматах. Кроме того, InterBase хранит данные BLOB внутри базы.

Прежде чем сохранить элементы типа BLOB в базе данных, эти элементы создаются как файлы определенной структуры:

  • Растровые или векторно-графические файлы;

  • Звуковые файлы;

  • Интерактивные аудио-видео файлы;

  • Текстовые файлы

  • Файлы CAD.

Далее эти файлы программно загружаются в базу данных. Доступ к данным также осуществляется программно.

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

К UDF можно обращаться из программ на базовом языке, а также из хранимых процедур и триггеров.

Пользовательские функции не являются частью базы. Они помещаются в отдельную библиотеку (DLL), находящуюся на той же машине, что и база данных. Чтобы сделать функции доступными в базе, их надо в ней объявить. После этого, обращение к ним осуществляется точно так же, как к стандартным функциям InterBase. Вызов этих функций может производится везде, где синтаксисом SQL предусмотрено использование выражений

Объявление внешней функции

Как только UDF была написана и откомпилирована в библиотеку, она должна быть объявлена в базе данных, где предполагается ее использование. Каждая функция в базе данных должна быть объявлена отдельно. Пока точка входа и имя модуля (библиотеки) и путь к нему не изменяется, нет необходимости в переобъявлении функции, даже если сама функция меняется.

Синтаксис объявления внешней функции:

DECLARE EXTERNAL FUNCTION <имя функции>

[<список типов данных входных параметров>]

RETURNS {<тип данных> [BY VALUE] | CSTRING (int)}

[FREE IT]

ENTRY_POINT ‘имя функции в библиотеке’

MODULE_NAME ‘имя файла библиотеки’;

Синтаксические контсрукции объявления внешних функций:

Конструкция

Описание

имя функции

Имя UDF для использования в командах SQL; может отличаться от имени (в библиотеке) указанной после слова ENTRY_POINT

список типов данных

Может принимать значение либо <тип данных> либо CSTRING (int)

тип данных

Любой разрешенный в InterBase тип данных, кроме массивов и BLOB. Тип данных входного параметра или возвращаемого значения. Все входные параметры передаются в UDF по ссылке.

Возвращаемые значения могут передаваться как по ссылке, так и по значению.

Использование элементов массивов запрещено.

RETURNS

Определяет возвращаемое функцией значение

BY VALUE

Указывает на то, что параметр возвращается по значению. Если конструкция пропущена, то значение возвращается по ссылке.

CSTRING (int)

Специальный тип для представления строк, представляющий собой последовательность символов, заканчивающуюся двоичным нулем.

FREE IT

Указывает на необходимость освобождения памяти, выделенной UDF для возвращаемого значения, передаваемого по ссылке. Необходимость для такой конструкции вызвана тем, что запрос памяти производится в UDF, а освобождение выполняется в InterBase.

имя функции в библиотеке

Заключенное в кавычки имя имя функции, как оно записано в библиотеке.

имя файла библиотеки

Спецификация файла, идентифицирующая библиотеку, которая содержит UDF. Текс должен заключаться в кавычках.

  • Библиотека должна постоянно находиться на сервере; путь должен относиться к местоположению на сервере.

  • На любой платформе модуль может быть указан без имени пути, если он находится в путь_InterBase/ Lib.

  • Следует использовать полное имя файла библиотеки, включая расширение, даже если имя пути не указано.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]