Виды хранимых процедур в InterBase
В InterBase существует два типа хранимых процедур: 1. Процедуры выбора данных – могут использоваться вместо таблиц в операторе SELECT. 2. Выполняемые процедуры – производят какие-либо действия с базой данных и не обязаны возвращать данные. Вызываются с помощью команды EXECUTE PROCEDURE. Отличие в работе этих двух видов хранимых процедур заключается в том, что процедуры выборки данных обычно возвращают множество наборов выходных параметров, сгруппированных построчно, а выполняемые процедуры могут либо вообще не иметь параметров, либо возвращать только один набор выходных параметров, т.е. одну строку параметров.
Оба типа процедур имеют одинаковый синтаксис создания и формально ничем не отличаются. Любая выполнимая процедура, если она имеет выходные параметры, может быть вызвана в запросе SELECT, любая процедура выбора данных – с помощью EXECUTE PROCEDURE. Разница заключается в цели разработки процедур каждого вида. Процедура выбора данных специально создается для вызова из оператора SELECT, а выполняемая процедура – для вызова оператором EXECUTE PROCEDURE. Пример создания процедуры выбора данных:
-- возвращает перечень служащих, работающих в отделе, -- который передается в качестве входного параметра:
CREATE PROCEDURETest_Procedure (DeptNo CHAR(3)) RETURNS ( Number INT, -- порядковый номер EmpNo SMALLINT, -- идентификатор служащего FirstName VARCHAR(15), -- имя LastName VARCHAR(20)-- фамилия ) AS BEGIN Number = 0; FOR SELECTEMP_NO, FIRST_NAME, LAST_NAME FROMEmployee WHEREDEPT_NO = :DeptNo INTO:EmpNo, :FirstName, :LastName DO BEGIN Number = Number + 1; SUSPEND; END END;
Каждая процедура выбора данных должна обязательно содержать оператор SUSPEND, который передает набор выходных параметров в то место, откуда вызвали процедуру. Пример вызова процедуры выбора данных: SELECT * FROMTest_Procedure('000');
Пример создания выполняемой процедуры: CREATE PROCEDUREMakeGenerator ( GenName VARCHAR(31), GenValue INTEGER ) AS DECLARE VARIABLESql VARCHAR(256); BEGIN Sql = 'CREATE GENERATOR ' ||GenName || ';'; EXECUTE STATEMENTSql; Sql = 'SET GENERATOR ' ||GenName || ' TO ' || CAST(GenValue AS VARCHAR(10)) || ';'; EXECUTE STATEMENTSql; END;
Синтаксис оператора вызова процедуры:
EXECUTE PROCEDUREИмяПроцедуры [Параметр[,Параметр ...]] [RETURNING_VALUESПараметр [, Параметр ...]];
Пример вызова выполняемой процедуры:
EXECUTE PROCEDUREMakeGenerator 'Test_Gen', 1;
Задание Лабораторную работу следует выполнять в следующем порядке: 1. Создать аналогично предыдущим лабораторным работам рабочую папку и назвать ее "ЛР9". 2. Скопировать в эту папку файл сценария, созданный при выполнении предыдущей лабораторной работы. 3. Открыть в приложении "IB Expert" этот сценарий. 4. Исправить текст комментариев и сделать, чтобы база данных теперь создавалась в папке "ЛР9". 5. Добавить в сценарий операторы создания хранимых процедур и других объектов, которые могут потребоваться. Создать не менее трех хранимых процедур, реализующих бизнес-правила в соответствии с выданным индивидуальным заданием. Для каждой хранимой процедуры должны присутствовать комментарии, поясняющие выполняемые операции. 6. Выполнить сценарий и сохранить его в папке "ЛР9". 7. Зарегистрировать созданную базу данных в программе "IB Expert" и подключиться к ней. 8. Создать в своей базе данных по одной хранимой процедуре каждого вида в диалоговом режиме. Они должны называться "TestProcedure1" и "TestProcedure2" и иметь входные и выходные параметры. Скопировать в отчет сценарий создания этих процедур, который сгенерирует "IB Expert". 9. Выполнить в окне "SQL Editor" по одному запросу с каждой созданной хранимой процедурой. Поместить выполненные запросы в отчет, добавив комментарии и сведения о результате их выполнения. 10. Создать в папке "ЛР9" резервную копию базы данных. 11. Создать и сохранить в папке "ЛР9" файл с отчетом о выполнении лабораторной работы, который должен называться "Отчет.doc". Ход работы Операции по созданию хранимых процедур с помощью выполнения сценария были изучены в ходе выполнения предыдущих лабораторных работ. Для создания хранимой процедуры с помощью программы "IB Expert" в диалоговом режиме необходимо выполнить следующие действия: 1. Подключиться к базе данных и выполнить команду главного меню "DatabaseNew Procedure". В результате откроется окно "Procedure" для создания процедуры (рис. 29).
Рис. 29. Окно создания хранимой процедуры в режиме диалога 2. В этом окне в правом верхнем углу следует ввести имя процедуры (заменив имя "NEW_PROCEDURE"). 3. При нажатой кнопке [Input Parameters] добавить входные параметры. Для этого находясь в сетке, расположенной в средней части окна, нажать клавишу [Insert] или [Стрелка вниз]. После этого ввести в новой строке имя входного параметра (на рис. 29 имя входного параметра – "PARAM1") и с помощью показанного на рис. 29 выпадающего списка выбрать его тип. 4. При нажатой кнопке [Output Parameters] таким же образом добавить выходные параметры. 5. При необходимости точно так же добавить локальные переменные (нажать для этого кнопку [Variables]). 6. В поле ввода, расположенном в нижней части окна, ввести тело процедуры. 7. Нажать кнопку [Compile Procedure] (Ctrl+F9). После того, как хранимая процедура будет создана, ее можно легко изменить, используя для этого, как и для триггеров, либо обычный режим, когда можно изменить весь оператор создания процедуры, либо "ленивый" – когда вручную меняется только тело процедуры, а входные и выходные параметры и локальные переменные создаются и изменяются в режиме диалога. Переключение между двумя режимами просмотра и редактирования хранимой процедуры, показанными на рис. 30 и 31 производится кнопкой [Lazy mode on/off].
Рис. 30. Окно редактирования хранимой процедуры в режиме диалога
Рис. 31. Окно редактирования хранимой процедуры в обычном режиме
©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.
|