Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КлсервБД_лаб.doc
Скачиваний:
4
Добавлен:
15.11.2019
Размер:
1.71 Mб
Скачать

Лабораторная работа №7

Тема: Хранимые процедуры.

Цель: знакомство с операторами Create procedure, drop procedure, execute procedure.

Материалы и оборудование: IBConsole, Delphi6/7

Методические рекомендации

Хранимые процедуры – это модули, написанные на языке InterBase и сохраненные как метаданные базы данных.

Хранимые процедуры можно вызывать из приложения.

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

Create procedure <название процедуры> [(<входные параметры>)]

[returns] [(< выходные параметры>)]

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

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

При использовании параметра в выражениях тела процедуры перед его именем нужно указывать знак «:».

Тело процедуры состоит из двух частей - описательной и исполнительной – и имеет следующий формат:

[<Объявление переменных>]

BEGIN

<Оператор>

[<Оператор>]

END

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

По числу строк, возвращаемых в качестве результата, можно выделить следующие виды ХП:

  • Возвращающие одну строку;

  • Возвращающие несколько строк.

Процедуры, возвращающие одну строку, практически не отличаются от процедур языка Pascal и обеспечивают возврат значений выходных параметров. Такие ХП также называют процедурами действия (выполняемыми процедурами).

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

Вызов процедуры:

EXECUTE PROCEDURE <название процедуры> [<входные параметры>] [RETURNING _ VALUES [<выходные параметры>];

К процедуре выбора можно также обратиться с помощью оператора Select * from <название процедуры>(<параметры>).

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

Databasename

Псевдоним базы данных

StoredProcName

Название процедуры

ParamType

Свойство, определяющее коллекцию параметров компонента. Значения:

ptUnknown-тип не определен;

ptInput-входные параметры, передаваемые процедуре;

ptOutput-выходные параметры, получаемые из процедуры;

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

ptResult-параметр, применяемый для вывода сообщений о режиме завершения работы или ошибке.

Задания для самостоятельного выполнения.

1. В окне Interactive SQL создайте следующие процедуры.

Процедура, подсчитывающая средний балл студента по номеру удостоверения:

Set term!!;

Create procedure avg_b(pud_n integer)

Returns (pa_b float) as

begin

select avg(sr_ball)

from avg_ball

where nom_ud=:pud_n

into:pa_b;

suspend;

end!!

Set term;!!

2. Процедура, возвращающая информацию о студенте по введенной фамилии (выводятся имя, дата рождения и адрес студента):

Set term!!;

Create procedure selectd(psurn varchar(15))

Returns (pnam varchar(15), pdata date, padr varchar(20)) as

begin

for select name, data_r, adres from grup

where (surname=:psurn)

into:pnam, pdata, padr

do

suspend;

end!!

Set term;!!

3. Создайте новое приложение для вызова процедур из среды Delphi. Для этого на форме разместите следующие компоненты и установите соответствующие значения:

Компонент

Свойство

Значение

IBDatabase1

DatabaseName

Путь к базе данных (полное имя БД)

Username=SYSDBA

Password=masterkey

Connected

True

DefaultTransaction

IBTransaction1

IBTransaction1

DefaultDatabase

IBDatabase1

Active=true

IBQuery1

SQL

Select * from grup

Database

IBDatabase1

Active

true

Datasource1

Dataset

IBQuery1

DBGrid1

Datasource

Datasource1

IBQuery2

Database

IBDatabase1

Datasource2

Dataset

IBQuery2

DBGrid2

Datasource

Datasource2

IBQuery3

Datasource

Datasource1

SQL

Select * from avg_ball where ud_nom=:ud_nom

Database

IBDatabase1

Active

true

Datasource3

Dataset

IBQuery3

DBGrid3

Datasource

Datasource3

IBStoredProc1

Database

IBDatabase1

StoredProcName

Avg_b

4. Для кнопки «Вывод информации о студенте по фамилии» запишите следующий обработчик события (кнопка вызывает процедуру Selectd):

procedure TForm1.SpeedButton1Click(Sender: TObject);

begin

with ibQuery2 do begin

close;

sql.Clear;

sql.Add('select * from selectd('''+edit1.Text+''')');

open;

end;end;

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

procedure TForm1.SpeedButton2Click(Sender: TObject);

begin

ibstoredproc1.UnPrepare;

ibstoredproc1.parambyname('pud_n').AsInteger:=ibquery3.fieldbyname('nom_ud').AsInteger;

ibstoredproc1.Prepare;

ibstoredproc1.ExecProc;

label4.Caption:=floattostr(ibstoredproc1.parambyname('pa_b').AsFloat);

end;

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

Обеспечить вызов процедур из приложения.

Список литературы:

  1. Архангельский А.Я. «Язык SQL в Delphi5». –Москва, ЗАО «Издательство Бином» , 2000.

  2. Гофман В., Хомоненко А. «Delphi7».СПб.:ВХV-Петербург.

  3. Епанешников Д.Д., «Delphi5.Базы данных»-Москва, «Диалог-Кифа»,2000.

  4. Кандзюба С.П., Громов В.И. Delphi6. Базы данных и приложения. Лекции и упражнения. – К.: ДиаСофт, 2001.

  5. Карпова Т. Базы данных: модели, разработка, реализация. – СПб.: Питер, 2001.

  6. Пономарев В. Delphi7. Самоучитель баз данных. – СПб.: Питер, 2003.

  7. Шумаков И., Фаронов В.В. «Руководство разработчика баз данных в Delphi5».-Москва, Нолидж, 1999.