
- •Актюбинский государственный университет им. К.Жубанова
- •К.Ф.М.Н., доцент кафедры информационных систем _______Бигалиева м.Ж.
- •Лабораторная работа №1
- •Лабораторная работа №2-3
- •Лабораторная работа №4
- •Лабораторная работа №5-6
- •Лабораторная работа №7
- •Лабораторная работа №8
- •Лабораторная работа №9
- •Лабораторная работа №10
- •Лабораторная работа №11
- •Лабораториялық жұмыс №12
Лабораторная работа №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, а также процедуру, позволяющую изменять средний балл студента в опеределенном семестре; номер удостоверения студента задается пользователем.
Обеспечить вызов процедур из приложения.
Список литературы:
Архангельский А.Я. «Язык SQL в Delphi5». –Москва, ЗАО «Издательство Бином» , 2000.
Гофман В., Хомоненко А. «Delphi7».СПб.:ВХV-Петербург.
Епанешников Д.Д., «Delphi5.Базы данных»-Москва, «Диалог-Кифа»,2000.
Кандзюба С.П., Громов В.И. Delphi6. Базы данных и приложения. Лекции и упражнения. – К.: ДиаСофт, 2001.
Карпова Т. Базы данных: модели, разработка, реализация. – СПб.: Питер, 2001.
Пономарев В. Delphi7. Самоучитель баз данных. – СПб.: Питер, 2003.
Шумаков И., Фаронов В.В. «Руководство разработчика баз данных в Delphi5».-Москва, Нолидж, 1999.