
- •Виды хранимых процедур в Firebird
- •Пример выполнения практической работы
- •Некоторые дополнительные сведения Использование переменных
- •Управляющие конструкции begin..End
- •Стандартные операторы
- •И еще примеры Процедуры без параметров
- •Процедуры с входными параметрами
- •Использование входных параметров и локальных переменных
- •Процедуры с выходными параметрами
- •Процедуры с входными и выходными параметрами
- •Обработка данных в процедурах
- •Селективные процедуры
- •Вызов процедур из процедур или триггеров
- •Рекурсивные процедуры
- •Особенность вложенных вызовов процедур и рекурсивных процедур
- •Планы процедур и производительность Планы процедур
- •Производительность
- •Контрольные вопросы
Практична робота № 5
Тема: Створення збережених процедур
Мета: Вивчити види використовуваних збережених процедур.
Навчитись створювати та використовувати збережені процедури
при роботі з базою даних
ХІД РОБОТИ
Створити не менш трьох збережених процедур, які реалізують бізнес-правила відповідно індивідуальному завданню.
Створити у своїй базі даних по одній збереженій процедурі кожного виду в діалоговому режимі. Вони повинні називатися "TestProcedure1" і "TestProcedure2" і мати вхідні і вихідні параметри.
Створити запити з кожної створеної збереженої процедурою.
Продемонструвати викладачеві набуті навички при захисті на комп’ютері практичної роботи.
ТЕОРЕТИНА ЧАСТИНА
Хранимая процедура – это откомпилированная во внутреннее представление сервера СУБД подпрограмма, хранящаяся в базе данных. Хранимые процедуры пишутся на специальном языке хранимых процедур и триггеров, в котором имеются операторы присваивания, ветвлений и циклов, и в которых можно использовать операторы SQL, такие как INSERT, DELETE, UPDATE и SELECT.
Хранимые процедуры позволяют переносить часть прикладных функций, связанных с обработкой данных, в саму данных. Например, хранимая процедура может управлять приемом заказа или переводом денег с одного банковского счета на другой. Для автоматического выполнения хранимых процедур при возникновении в базе данных определенных условий используются триггеры.
Хранимые процедуры создаются оператором CREATE PROCEDURE, в котором указываются следующие элементы:
имя хранимой процедуры;
входные и выходные параметры и их типы;
имена и типы данных локальных переменных, используемых процедурой;
последовательность инструкций, которые выполняются при вызове процедуры.
С помощью входных параметров внутрь хранимой процедуры можно передать значения, которые будут использоваться в ходе выполнения процедуры. С помощью выходных параметров хранимые процедуры возвращают значения, вычисленные в ходе выполнения процедуры.
Многие СУБД поддерживают хранимые функции, которые отличаются от хранимых процедур тем, что возвращают значение. Firebird не поддерживает хранимых функций. В Firebird для возврата значений из хранимых процедур применяются выходные параметры.
Некоторые СУБД поддерживают параметры, которые одновременно являются и входными, и выходными. Firebird не поддерживает такой возможности.
Для параметров и локальных переменных хранимых процедур используются те же типы данных, которые поддерживаются СУБД для столбцов таблиц.
Синтаксис оператора создания хранимой процедуры в Firebird:
CREATE PROCEDURE Имя_Процедуры [(Параметр <тип данных> [, Пара-метр <тип данных> ...])]
[RETURNS (Параметр <тип данных> [, Параметр <тип данных> …])]
AS [<список переменных>] <блок>;
<список переменных> =
DECLARE [VARIABLE] Переменная <тип данных>; [DECLARE [VARIABLE] Переменная <тип данных>; …]
<блок> =
BEGIN
<составной оператор> [<составной оператор>...]
END
<составной оператор> = <блок> | Оператор;
<тип данных> = один из типов данных Firebird.
Оператор – любой одиночный оператор языка хранимых процедур и триггеров Firebird.
Внутри хранимых процедур может быть предусмотрена обработка исключений. Хранимые процедуры могут быть вложенными и рекурсивными, т.е. вызывающими сами себя.
Основные преимущества хранимых процедур:
Производительность – перенос на сервер часто используемых действий приводит к существенному повышению производительности.
Многократное использование кода – части приложения, перенесенные на сервер, могут использоваться любыми другими приложениями, имеющими доступ к серверу.
Виды хранимых процедур в Firebird
В Firebird существует два типа хранимых процедур:
Процедуры выбора данных – могут использоваться вместо таблиц в операторе SELECT.
Выполняемые процедуры – производят какие-либо действия с базой дан-ных и не обязаны возвращать данные. Вызываются с помощью команды 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).
В этом окне в правом верхнем углу следует ввести имя процедуры (заменив имя "NEW_PROCEDURE").
При нажатой кнопке [Входные параметры] добавить входные параметры. Для этого находясь в сетке, расположенной в средней части окна, нажать клавишу [Insert]. После этого ввести в новой строке имя входного параметра, например – "PARAM1" и с помощью выпадающего списка выбрать его тип.
При нажатой кнопке [Выходные параметры] таким же образом добавить выходные параметры.
При необходимости точно так же добавить локальные переменные (нажать для этого кнопку [Переменные]).
В поле ввода, расположенном в нижней части окна, ввести тело процедуры.
Нажать кнопку [Компилировать процедуру] (Ctrl+F9).
После того, как хранимая процедура будет создана, ее можно легко изменить, используя для этого, как и для триггеров, либо обычный режим, когда можно изменить весь оператор создания процедуры, либо "ленивый" – когда вручную меняется только тело процедуры, а входные и выходные параметры и локальные переменные создаются и изменяются в режиме диалога.
Рисунок 1 - Окно создания хранимой процедуры в режиме диалога
Переключение между двумя режимами просмотра и редактирования хранимой процедуры, показанными на рисунках 2 и 3 производится кнопкой [Включить/Выключить "ленивый" режим].
Рисунок 2 - Окно редактирования хранимой процедуры в режиме диалога
Рисунок 3 - Окно редактирования хранимой процедуры в обычном режиме