4. По одному разу для каждого наименования подразделения.
5. Нет правильного ответа.
7.41 Заключение.
Механизм хранимых процедур, как самый универсальный и экономичный используется:
Для ведения данных серверных БД;
Для формирования наборов данных для построения отчетов;
При реализации сложных алгоритмов бизнес-правил, обеспечивающих целостность БД;
При формировании результатов сложных поисковых запросов.
7.42 Ограничения.
Механизм ХМ не может управлять структурой данных.
В отличии от компонента запроса (Query), в коде хранимой процедуры нельзя выполнять операторы управления структурой данных, таких как, CREATE … , ALTER… , DROP… и других.
Реализация функции управления зависит от программной реализации SQL – сервера. Например, MS SQL – сервер позволяет в хранимой процедуре выполнять оператор CREATE TABLE…
Вызов одной процедуры из нескольких приложений может привести к исключительной ситуации, вызванной нарушением ссылочной целостности данных, такие вопросы решаются на уровне управления транзакциями.
7.43 Вопрос.
Какой SQL – оператор создания хранимой процедуры не будет выполнен:
A) CREATE PROCEDURE Name_SP ( EMP_NO SMALLINT, PROJ_ID CHAR(5))
AS BEGIN BEGIN
INSERT INTO "N_table" (emp_no, proj_id) VALUES (:emp_no, :proj_id);
WHEN SQLCODE -530 DO EXCEPTION unknown_emp_id;
END SUSPEND; END ^
B) CREATE PROCEDURE Name_SP (Var_I INTEGER)
AS BEGIN
INSERT (Col_Value) INTO "N_table" VALUES (:Var_I);
END^
C) CREATE PROCEDURE Name_SP
RETURNS (CODE VARCHAR(5), COUNTRY VARCHAR(15), LANG VARCHAR(15))
AS BEGIN
FOR SELECT job_code, job_country FROM job INTO :code, :country DO
BEGIN FOR SELECT languages FROM show_langs (:code, :country) INTO :lang DO
SUSPEND; code = '====='; country = '==============='; lang = '==============';
SUSPEND; END END ^
D) Все SQL – операторы будут выполнены.
7.44 Вопросы по 4 лабораторной.
Типы хранимых процедур, преимущества использования, особенности реализации.
Параметры хранимых процедур, определение параметров в теле процедуры.
Совместимость типов данных SQL – сервера и среды разработки приложений Delphi.
Операторы алгоритмического языка триггеров и хранимых процедур.
Особенности использования оператора SELECT в теле хранимой процедуры.
Операторы организации циклов в процедурах.
Вызов процедур в среде управления SQL – сервера, параметры анализа выполнения процедур.
Вызов процедур из приложения клиента. Использование процедур одновременно несколькими клиентскими приложениями.
Вызов процедур действия из приложения клиента, компонент TSTOREDPROC.
Вызов процедуры выбора, отображение набора данных, навигация по набору данных, изменение полученных данных.
7.45 Задания СРСП.
1. Выбор и защита не менее четырех процессов, реализуемых ХП;
2. Ответить на контрольные вопросы четвертого модуля [1];
3. Провести отладку SQL – кода спроектированных хранимых процедур;
4. Защитить отчет по четвертой лабораторной работе;
5. Защитить отчет по разделу 3.3 курсовой работы [2];
6. Разработать пример вопроса тестового задания по теме раздела.
7.46 Задания СРС.
1. Изучить методические указания к четвертой лабораторной работе [1];
2. Ответить на примеры тестовых заданий к четвертому модулю [1];
3. Изучить код ХП, используемых в учебной БД (FONEBOOK.GDB);
4. Изучение системы помощи (HELP), утилиты InteractivSQL, операторы: CREATE PROCEDURE, ALTER PROCEDURE, DROP PROCEDURE, EXECUTE PROCEDURE, SELECT;
5. Изучить конспект 7,8 лекций, агрегатные функции SQL – сервера [3];
6. Проектирование индивидуальной функции пользователя (UDF).
7.47 Демонстрация.
Создание хранимой процедуры действия, выводящей агрегированные значения.
Вызов ХП в редакторе SQL – запросов.
Порядок создания ХП выбора, метод от простого к сложному.
Вызов ХП выбора при помощи оператора SELECT.
Отладка процедуры средствами IBExpert.
Проектирование приложения для вызова ХП выбора, связи компонентов.
Проектирование приложения для вызова ХП действия.
Изменение и удаление хранимых процедур.
7.48 Тренировочный тест, 10 вопросов.
Ответы
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
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 Files\Borland\InterBase\UDF
Если каталог не существует, необходимо создать.
Каталог содержит файл библиотеки - 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 Files\Borland\InterBase\examples\Udf\ ib_udf.sql
Файл содержит краткое описание и операторы определения функций, готовые к выполнению в редакторе запросов среды управления.
Там же расположены модули проектов в языке программирования С.
8.6 Порядок действий.
Например, выполним объявление функции rand():
DECLARE EXTERNAL FUNCTION rand
RETURNS DOUBLE PRECISION BY VALUE
ENTRY_POINT 'IB_UDF_rand' MODULE_NAME 'ib_udf';
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 Files\Borland\InterBase\UDF
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.