Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
PR5_2015.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
186.88 Кб
Скачать

Практична робота № 5

Тема: Створення збережених процедур

Мета: Вивчити види використовуваних збережених процедур.

Навчитись створювати та використовувати збережені процедури

при роботі з базою даних

ХІД РОБОТИ

  1. Створити не менш трьох збережених процедур, які реалізують бізнес-правила відповідно індивідуальному завданню.

  2. Створити у своїй базі даних по одній збереженій процедурі кожного виду в діалоговому режимі. Вони повинні називатися "TestProcedure1" і "TestProcedure2" і мати вхідні і вихідні параметри.

  3. Створити запити з кожної створеної збереженої процедурою.

  4. Продемонструвати викладачеві набуті навички при захисті на комп’ютері практичної роботи.

ТЕОРЕТИНА ЧАСТИНА

Хранимая процедура – это откомпилированная во внутреннее представление сервера СУБД подпрограмма, хранящаяся в базе данных. Хранимые процедуры пишутся на специальном языке хранимых процедур и триггеров, в котором имеются операторы присваивания, ветвлений и циклов, и в которых можно использовать операторы SQL, такие как INSERT, DELETE, UPDATE и SELECT.

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

Хранимые процедуры создаются оператором CREATE PROCEDURE, в котором указываются следующие элементы:

  • имя хранимой процедуры;

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

  • имена и типы данных локальных переменных, используемых процедурой;

  • последовательность инструкций, которые выполняются при вызове процедуры.

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

Многие СУБД поддерживают хранимые функции, которые отличаются от хранимых процедур тем, что возвращают значение. Firebird не поддерживает хранимых функций. В Firebird для возврата значений из хранимых процедур применяются выходные параметры.

Некоторые СУБД поддерживают параметры, которые одновременно являются и входными, и выходными. Firebird не поддерживает такой возможности.

Для параметров и локальных переменных хранимых процедур используются те же типы данных, которые поддерживаются СУБД для столбцов таблиц.

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

CREATE PROCEDURE Имя_Процедуры [(Параметр <тип данных> [, Пара-метр <тип данных> ...])]

[RETURNS (Параметр <тип данных> [, Параметр <тип данных> …])]

AS [<список переменных>] <блок>;

<список переменных> =

DECLARE [VARIABLE] Переменная <тип данных>; [DECLARE [VARIABLE] Переменная <тип данных>; …]

<блок> =

BEGIN

<составной оператор> [<составной оператор>...]

END

<составной оператор> = <блок> | Оператор;

<тип данных> = один из типов данных Firebird.

Оператор – любой одиночный оператор языка хранимых процедур и триггеров Firebird.

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

Основные преимущества хранимых процедур:

  1. Производительность – перенос на сервер часто используемых действий приводит к существенному повышению производительности.

  2. Многократное использование кода – части приложения, перенесенные на сервер, могут использоваться любыми другими приложениями, имеющими доступ к серверу.

Виды хранимых процедур в Firebird

В Firebird существует два типа хранимых процедур:

    1. Процедуры выбора данных – могут использоваться вместо таблиц в операторе SELECT.

    2. Выполняемые процедуры – производят какие-либо действия с базой дан-ных и не обязаны возвращать данные. Вызываются с помощью команды EXECUTE PROCEDURE.

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

Оба типа процедур имеют одинаковый синтаксис создания и формально ничем не отличаются. Любая выполнимая процедура, если она имеет выходные параметры, может быть вызвана в запросе SELECT, любая процедура выбора данных – с помощью EXECUTE PROCEDURE. Разница заключается в цели разработки процедур каждого вида. Процедура выбора данных специально создается для вызова из оператора SELECT, а выполняемая процедура – для вызова оператором EXECUTE PROCEDURE.

Пример создания процедуры выбора данных:

-- возвращает перечень служащих, работающих в отделе,

-- который передается в качестве входного параметра:

CREATE PROCEDURE Test_Procedure (DeptNo CHAR(3))

RETURNS (

Number INT, -- порядковый номер

EmpNo SMALLINT, -- идентификатор служащего

FirstName VARCHAR(15), -- имя

LastName VARCHAR(20) -- фамилия )

AS

BEGIN

Number = 0;

FOR SELECT EMP_NO, FIRST_NAME, LAST_NAME FROM Employee

WHERE DEPT_NO = :DeptNo

INTO :EmpNo, :FirstName, :LastName

DO

BEGIN Number = Number + 1;

SUSPEND;

END

END;

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

Пример вызова процедуры выбора данных:

SELECT * FROM Test_Procedure('000');

Пример создания выполняемой процедуры:

CREATE PROCEDURE MakeGenerator (

GenName VARCHAR(31), GenValue INTEGER )

AS

DECLARE VARIABLE

Sql VARCHAR(256);

BEGIN

Sql = 'CREATE GENERATOR ' || GenName || ';';

EXECUTE STATEMENT Sql;

Sql = 'SET GENERATOR ' || GenName || ' TO ' || CAST(GenValue

AS VARCHAR(10)) || ';';

EXECUTE STATEMENT Sql;

END;

Синтаксис оператора вызова процедуры:

EXECUTE PROCEDURE ИмяПроцедуры [Параметр [, Параметр ...]] [RETURNING_VALUES Параметр [, Параметр ...]];

Пример вызова выполняемой процедуры:

EXECUTE PROCEDURE MakeGenerator 'Test_Gen', 1;

Пример выполнения практической работы

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

  1. Подключиться к базе данных и выполнить команду главного меню База данных > Новая процедура. В результате откроется окно "Процедура" для создания процедуры (рисунок 1).

  2. В этом окне в правом верхнем углу следует ввести имя процедуры (заменив имя "NEW_PROCEDURE").

  3. При нажатой кнопке [Входные параметры] добавить входные параметры. Для этого находясь в сетке, расположенной в средней части окна, нажать клавишу [Insert]. После этого ввести в новой строке имя входного параметра, например – "PARAM1" и с помощью выпадающего списка выбрать его тип.

  4. При нажатой кнопке [Выходные параметры] таким же образом добавить выходные параметры.

  5. При необходимости точно так же добавить локальные переменные (нажать для этого кнопку [Переменные]).

  6. В поле ввода, расположенном в нижней части окна, ввести тело процедуры.

  7. Нажать кнопку [Компилировать процедуру] (Ctrl+F9).

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

Рисунок 1 - Окно создания хранимой процедуры в режиме диалога

Переключение между двумя режимами просмотра и редактирования хранимой процедуры, показанными на рисунках 2 и 3 производится кнопкой [Включить/Выключить "ленивый" режим].

Рисунок 2 - Окно редактирования хранимой процедуры в режиме диалога

Рисунок 3 - Окно редактирования хранимой процедуры в обычном режиме

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]