Смекни!
smekni.com

Проектирование информационных систем 3 (стр. 11 из 17)

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

BEGIN ... END

Оператор присваивания

Имя переменной = выражение;

7.7 Операторы циклов.

Оператор условного перехода IF... THEN ... ELSE

IF (<условие>) THEN

< оператор 1> [ELSE

< оператор 2>]

Оператор цикла FOR SELECT ... DO

FOR

<оператор SELECT>

DO

< оператор>;

Оператор условного цикла WHILE ... DO

WHILE (<условие>)

DO < оператор>

7.8 Оператор выбора SELECT.

SELECT AVG(KOLVO), SUM(KOLVO) FROM RASHOD

WHERE TOVAR = :INJTOVAR

INTO :AVG_KOLVO, :SUM_KOLVO;

Отличие в предложении INTO

Оператор SUSPEND возвращает полученные значения в приложение.

7.9 Операторы.

Оператор завершения алгоритма

EXIT

Оператор вызова EXECUTE PROCEDURE

EXECUTE PROCEDURE имя [параметр [, параметр …]]

[RETURNING_VALUES параметр [, параметр ...]];

Оператор генерации события POST _EVENT

POST_EVENT "Имя события";

7.10 Подразделы SQL.

Data Definition Language (DDL) – язык определения данных. Те операторы, которые затрагивают структуру данных. Создают, изменяют и удаляют объекты метаданных. Операторы – CREATE, ALTER, DROP.

Data Manipulation Language (DML) – язык управления данными. Операторы INSERT, UPDATE, DELETE.

Data Control Language (DCL) – управление доступом к данным. Привилегии пользователей. Операторы GRANT и REVOKE.

Transaction Control Language (TCL) – язык управления изменениями, сделанными группами пользователей. Управление транзакциями. Операторы START TRANSACTION, COMMIT, ROLLBACK.

Cursor Control Language (CCL) – язык определения и управления курсором для подготовки выполнения SQL

7.11 Алгоритмический язык.

Язык проектирования триггеров и хранимых процедур включает:

1. DML и оператор SELECT.

2. Операторы и выражения, включая UDF, связанные с БД и генераторы.

3. Инструкции присвоения,

control – flow инструкции,

контекстные переменные только для триггеров,

инструкции обработки событий,

инструкции обработки ошибок.

7.12 Проектирование ХП.

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

Для проектирования ХП необходимо выполнить следующие действия:

1. Выделить пункт «Процедуры».

2. Вызвать контекстное меню.

3. Выбрать пункт «Новая процедура».

4. В открывшемся окне редактора задать:

- имя новой процедуры;

- входные и выходные параметры;

- код тела процедуры;

5. Выполнить команду компиляции кода (Ctrl+F9).

7.14 Код ХП для IBConsole.

SET TERM ^ ;

CREATE PROCEDURE COL_EMP

RETURNS (NUM_D INTEGER, CNT_EMP INTEGER)

AS BEGIN

FOR SELECT EMPLOYEE.NUM_D, count(EMPLOYEE.TAB_NUM)

FROM EMPLOYEE

GROUP BY EMPLOYEE.NUM_D

INTO :NUM_D, :CNT_EMP

DO SUSPEND; END ^

SET TERM ; ^

7.15 Выполнение ХП.

Выполнение ХП действия FIND_COL учебного примера.

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

7.16 Вызов из SQL - редактора.

Для защиты лабораторной обязательно знание вызова процедуры в окне редактора SQL – запросов.

Для вызова процедур действия:

EXECUTE PROCEDURE FIND_COL

(‘Кафедра информационных систем’)

Для вызова процедур выбора:

SELECT * FROM D_ARX(2006)

7.17 Изменение ХП.

Изменение хранимой процедуры производится оператором:

ALTER PROCEDURE ИмяПроцедуры

[(входной_параметр тип_данных

[,входной_параметр тип_данных...])]

[RETURNS (выходной_параметр тип_данных

[,выходной_параметр тип_данных ...])]

AS

<тело процедуры>;

7.18 Удаление ХП.

Для удаления хранимой процедуры из базы данных используется оператор:

DROP PROCEDURE ИмяПроцедуры;

7.19 Функции агрегирования.

Для построения сложных алгоритмов проверки используются агрегатные функции:

AVG(), SUM(), COUNT(),

MAX(), MIN(),

CAST(),

UPPER(),

EXTRACT()

и оператор SELECT с использованием ключевых слов

DISTINCT, GROUP BY, HAVING, LIKE и др.

7.20 EXTRACT().

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

extract (year from arx_emp.dat_izm) = :d_emp

month

day

hour

minute

second

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

7.21 Вопрос.

Какой тип данных имеет переменная d_emp ?

1. DATE.

2. INTEGER.

3. TIMESTAMP.

4. NUMERIC().

5. Любой из перечисленных.

7.22 Пример.

Пример использования в операторе, извлечения года из поля даты:

for select

S_NUM, TAB_NUM, FIRST_NAME, LAST_NAME, PHONE, NUM_T, NUM_D, DEISTV

from arx_emp where

extract(year from arx_emp.dat_izm) = :d_emp

into :s_num, :tab_num, :first_name, :last_name, :phone, :num_t, :num_d, :deistv

do

7.23 Текущие параметры.

Для задания значения текущего времени используются следующие служебные операторы:

CURRENT_DATE

CURRENT_TIME

CURRENT_TIMESTAMP

Например:

UPDATE TablName SET Name Field = CURRENT_TIME;

7.24 Вопрос.

Функция EXTRACT() позволяет извлекать компоненты из полей типа?

1. DATE.

2. TIME.

3. TIMESTAMP.

4. Только DATE и TIMESTAMP.

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

7.25 Привилегии пользователя.

Для вызова хранимой процедуры из приложения, пользователю или объекту требуется привилегия EXECUTE на нее, задаваемая оператором:

GRANT

EXECUTE ON PROCEDURE ИмяПроцедуры

TO {<Пользователь>} ;

На момент выполнения операторов все объекты метаданных и пользователи должны быть определены.

7.26 Приложение Delphi.

Демонстрация работы хранимых процедур при помощи вызова их в среде разработки Delphi.

Для обращения к хранимой процедуре выбора в приложении клиента используется компонент TQuery. Вызов хранимой процедуры производится в предложении FROM оператора SELECT с указанием входных параметров процедуры. Выходные параметры процедуры (все или часть) указываются в качестве возвращаемых значений оператора SELECT.

Компонент IBStoredProc предназначен для вызова хранимых процедур действия SQL - сервера. Для вызова каждой хранимой процедуры в приложении лучше использовать собственный компонент.

7.27 Технология IBExpress.

Вкладка Delphi – «InterBase». Компоненты:

7.28 Вызов ХП выбора.

Новый проект с одной формой для вызова ХП «FIND_DIV»

7.29 Соединение с БД.

Для настройки параметров соединения вызываем окно редактора (Database Editor) компонента базы данных и устанавливаем имя пользователя, пароль, кодировку символов и убираем флаг в поле Login Prompt, после чего можно активизировать соединение.

7.30 Связи компонентов.

1. IBTransaction и IBDatabase

2. IBQuery и IBDatabase

3. DataSource и IBQuery

4. DBGrid и DataSource

Демонстрация проектирования приложения.

7.31 Параметры Query.

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

SELECT * FROM FIND_DIV(:in_divis),

Свойство SQL может определяться на стадии выполнения программы, через вызов соответствующего метода. В этом случае один компонент Query может использоваться для вызова различных процедур.

Свойство Params позволяет задать в Инспекторе Объектов свойство нашего параметра in_divis:

ParamType – ptInput,

DataType – ftString.

7.32 Код вызова.

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

procedure TForm1.Button1Click(Sender: TObject);

begin

IBQuery1.Close;

IBQuery1.ParamByName('in_divis').Value := StrToInt(Edit1.Text);

IBQuery1.Open;

end;

После выполнения всех действий проект компилируется и в запущенном приложении проверяется работа процедуры.

7.33 Ошибки.

Нет соединения с БД, не запущен сервер.

Не преобразован тип данных параметров.

Превышение лимита подключений клиентов.

Используется не тот метод, или не в той последовательности.

Выбрана не та процедура.

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

7.34 Вызов ХП действия.

Для вызова хранимой процедуры действия из приложения клиента используется специальный класс компонентов TStoredProc.

Рассмотрим последовательность действий для вызова процедуры INS_DIV, выполняющей добавление записи в таблицу DIVISION, содержащий код:

BEGIN

INSERT INTO DIVISION (NUM_DIV, NAME_DIV, "LEVEL", MAIL_DIV)

VALUES (:NUM_D, :NAME_D, :LEVELS, :e_mail);

END

В процедуре определяется четыре входных параметра

NUM_D, :NAME_D, :LEVELS, :e_mail

в соответствии с полями таблицы.

7.35 Проверка в Expert.

В среде проверка работы процедуры производится двумя способами, выполнением SQL оператора и запуском с консоли:

7.36 Приложение.

Добавляем в проект с вкладки InterBase поочередно следующие компоненты: IBTable; IBStoredProc. Для ввода значений параметров добавляем с вкладки Standard три компонента Edit. В результате форма примет вид:

7.37 Связи компонентов.

1. IBTransaction и IBDatabase

2. IBTable и IBDatabase, выбрать таблицу

3. IBStoredProc и IBDatabase, выбрать процедуру

4. DataSource и IBTable

5. DBGrid и DataSource

Демонстрация.

7.38 Параметры StoredProc.

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

0 – NUM_DIV;

1 – NAME_DIV;

2 – LEVELS;

3 – E_MAIL.

Определение типа данных происходит автоматически, в соответствии с типами данных Delphi, как и индексация параметров.

7.39 Код вызова.

В обработчике TForm1.Button1Click (Sender: TObject), сделаем следующие изменения:

{IBQuery1.Close;

IBQuery1.ParamByName('D_EMP').Value := StrToInt(Edit1.Text);

IBQuery1.Open;}

IBStoredProc1.ParamByName('NUM_DIV').Value:=StrToInt(Edit1.Text);

IBStoredProc1.ParamByName('NAME_DIV').Value:=(Edit2.Text);

IBStoredProc1.ParamByName('LEVELS').Value:=StrToInt(Edit3.Text);

IBStoredProc1.ParamByName('E_MAIL').Value:=(Edit4.Text);

IBStoredProc1.ExecProc;

IBTable1.Refresh;

Обратить внимание на отсутствие ограничений полей.

7.40 Вопрос.

Сколько раз в разработанном приложении можно нажать на клавишу «Button1» с введенным набором данных, без появления ошибки?

1. Один.

2. Любое количество раз.

3. По одному разу для каждого нового набора данных.