Проектирование информационных систем

Автор работы: Пользователь скрыл имя, 20 Октября 2009 в 15:59, Не определен

Описание работы

Загайнов И.А. Проектирование информационных систем: Конспект мультимедиа лекций для студентов специальностей 050704 – Вычислительная техника и программное обеспечение, 050703 – Информационные системы.

Файлы: 1 файл

kml_pis_2008.doc

— 2.82 Мб (Скачать файл)

 

8 UDF

 
 

      8.1 Функции (UDF).

Функции, определяемые пользователем – User Defined Functions (UDF).

Определение и назначение.

Набор функций SQL – сервера InterBase.

Объявление  функции, определяемой пользователем.

Разработка  функций в Delphi.

Совместимость переменных SQL – сервера и среды разработки Delphi.  

      8.2 Определение.

Функции (UDF) предназначены для расширения возможностей серверной части проектируемой информационной системы, поскольку набор встроенных функций ограничен: AVG(), SUM(), COUNT(), MAX(), MIN(), CAST(), UPPER(), EXTRACT(), ||, математические операции.

Используется  механизм подключения внешних библиотек.

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

Реализация  в виде dll – библиотеки. Одна библиотека должна содержать минимум одну функцию. 

      8.3 Примеры функций.

Встроенная  библиотека функция сервера IB расположена в каталоге:

    C:Program FilesBorlandInterBaseUDF

Если  каталог не существует, необходимо создать.

Каталог содержит файл библиотеки - ib_udf.dll, с примерами некоторых функций:

    abs(), acos(), asin(), cos(), log(), rand() …

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

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

Определение функции на сервере производится SQL – оператором:

    DECLARE EXTERNAL FUNCTION name [datatype | CSTRING (int)

                [, datatype | CSTRING (int) …]]

          RETURNS {datatype [BY VALUE] | CSTRING (int)} [FREE_IT]

          ENTRY_POINT 'entryname'     // Имя функции

          MODULE_NAME 'modulename'; // Имя файла (путь к библиотеке)

По умолчанию  сервер ищет функцию в корневом каталоге, определяемом при инсталляции. 

      8.5 Пример объявления.

Для всех функций библиотеки примера ib_udf.dll создан файл описания ib_udf.sql, содержащий полный перечень операторов объявления на сервере, хранящийся в каталоге

    C:Program FilesBorlandInterBaseexamplesUdf ib_udf.sql

Файл  содержит краткое описание и операторы  определения функций, готовые к  выполнению в редакторе запросов среды управления.

Там же расположены модули проектов в языке  программирования С. 

      8.6 Порядок действий.

Например, выполним объявление функции rand():

  1. Открыть в блокноте файл «ib_udf.sql».
  2. Скопировать оператор

    DECLARE EXTERNAL FUNCTION rand

    RETURNS DOUBLE PRECISION BY VALUE

    ENTRY_POINT 'IB_UDF_rand' MODULE_NAME 'ib_udf'; 

  1. Выполнить в редакторе запросов.
  2. Проверить вызов функции.
 

      8.7 Пример.

Просмотр  объявленной функции в среде  Expert:

 

      8.8 Вопрос.

Функцию вызова значения генератора gen_id() можно использовать в операторе: 

1. Создания  триггера.

2. Создания  хранимой процедуры.

3. INSERT.

4. UPDATE.

5. Нет  правильного ответа. 

      8.9 Проверка вызова.

Проверка  объявленной функции осуществляется посредством добавления записи в  таблицу:

    CREATE TABLE TUDF (    T1  INTEGER,

    T2  DOUBLE PRECISION,     T3  FLOAT );

Выполнением нескольких операторов:

    insert into tudf (T2 ) values (rand());   или

    insert into tudf (T3 ) values (rand());

Обратите  внимание на отсутствие случайности  в данных. 

      8.10 Проектирование библиотеки.

Проектирование  библиотеки функций в Delphi осуществляется в шаблоне DLL Wizard выбираемом из репозитория проектов:

 
 

      8.11 Код функции.

В открывшемся  окне создаем набор функций:

 

      8.12 Листинг кода.

    library MyIB_UDF;

    Uses   SysUtils,   Classes;

    {$R *.res}

    function randomx(var InInt:Integer):Integer; cdecl; export;

    begin

    Result:=(Trunc(Int(Random(InInt))));

    end; 

    function randvar():PChar; cdecl; export;

    begin

    Result:=PChar(Trim(AnsiString(Chr(192+Random(31)))));

    end;

    exports randomx, randvar;

    begin

    end.  

      8.13 Описание параметров.

cdecl – директива, указывающая компилятору на использование соглашений для передачи параметров, принятых в С++.

export – объявление функции экспортируемой.

Совместимость переменных.

Для совместимости  строковых переменных InterBase и Delphi используются соответствующие форматы:

CSTRING –  PChar;

DOUBLE PRECISION – Double;  

      8.14 Объявление.

Операторы объявления вновь созданных функций  оформляются аналогично операторам встроенной библиотеки:

    DECLARE EXTERNAL FUNCTION RANDVAR

    RETURNS CSTRING(1) FREE_IT

    ENTRY_POINT 'randvar' MODULE_NAME 'MyIB_UDF'  

    DECLARE EXTERNAL FUNCTION RANDOMX  INTEGER

    RETURNS INTEGER BY VALUE

    ENTRY_POINT 'randomx' MODULE_NAME 'MyIB_UDF'

Библиотеку  необходимо разместить в каталоге

    C:Program FilesBorlandInterBaseUDF 

      8.15 Удаление библиотеки.

Удаление  объявленных функций библиотеки производится оператором:

    DROP EXTERNAL FUNCTION name;

При внесении изменении в оператор объявления функции IBExpert генерирует два оператора, на удаление старого объявления, и  создание нового.  

      8.16 Вопрос.

Выбрать наиболее точный ответ для среды разработки функций, определяемых пользователем в SQL – сервере InterBase: 

1. Функции процедурного языка и SQL – операторы сервера InterBase.

2. Элементы языка управления данными (DML) и типы данных, используемых в SQL – сервере InterBase.

3. Элементы любого алгоритмического языка, позволяющего создавать динамически загружаемые библиотеки (DLL).

4. Функции и типы данных, определенные в Delphi, для динамически загружаемых библиотек.

5. Любые функции и типы данных, используемых в языке Object Pascal. 

      8.17 Предупреждения.

Объектом  метаданных является оператор объявления функции, но не сама библиотека.

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

Для каждой задачи может создаваться собственный каталог для библиотек расширения. 

      8.18 Версия IB 7.

Из описания к 7  версии IB (DevGuide.pdf).

Встроенная  библиотека -  ib_util.dll , примеры:

Function

name   Description    Inputs   Outputs

abs()   Absolute value   Double precision  Double precision

acos( )   Arc cosine   Double precision  Double precision

ascii_char( )  Return character based

            on ASCII code    Integer    Char(1)

ascii_val( )  Return ASCII code for given

            character    Char(1)    Integer

asin( )   Arc sine     Double precision  Double precision

atan( )   Arc tangent    Double precision  Double precision

atan2( )  Arc tangent divided by second Double precision,

            argument    Double precision  Double precision

bin_and( )  Bitwise AND operation   Integer    Integer

bin_or( ) Bitwise OR operation   Integer    Integer

bin_xor( )  Bitwise XOR operation   Integer    Integer

ceiling() Round up to nearest whole value  Double precision  Double precision

cos( )   Cosine     Double precision   Double precision

Информация о работе Проектирование информационных систем