- •Введение
- •1.5. Задание
- •1.6. Ход работы
- •1.6.1. Создание базы данных
- •1.6.2. Регистрация базы данных
- •1.6.3. Подключение к базе данных
- •1.6.4. Удаление базы данных
- •1.6.5. Извлечение метаданных
- •1.6.6. Резервное копирование и восстановление
- •1.7. Отчет о выполнении работы
- •1.8. Контрольные вопросы
- •2.4.2. Домены (Domains)
- •2.5. Задание
- •2.6. Ход работы
- •2.7. Отчет о выполнении работы
- •2.8. Контрольные вопросы
- •3.4.2. Индексы
- •3.5. Задание
- •3.6. Ход работы
- •3.7. Отчет о выполнении работы
- •3.8. Контрольные вопросы
- •4.4.1. Ограничение первичного ключа (Primary key)
- •4.4.2. Ограничения уникальности (Unique)
- •4.4.3. Ограничения внешнего ключа (Foreign keys)
- •4.4.4. Контрольные ограничения (Checks)
- •4.5. Задание
- •4.6. Ход работы
- •4.7. Отчет о выполнении работы
- •4.8. Контрольные вопросы
- •5.4.2. Бизнес-правила
- •5.4.3. Триггеры (Triggers)
- •5.4.4. Исключения (Exceptions) и обработка ошибок
- •5.6. Ход работы
- •5.7. Отчет о выполнении работы
- •5.8. Контрольные вопросы
- •6.4.2. Удаление существующих данных
- •6.4.3. Обновление существующих данных
- •6.5. Задание
- •6.6. Ход работы
- •6.7. Отчет о выполнении работы
- •6.8. Контрольные вопросы
- •7.5. Задание
- •7.6. Ход работы
- •7.7. Отчет о выполнении работы
- •7.8. Контрольные вопросы
- •8.4.2. Модифицируемые представления
- •8.5. Задание
- •8.6. Ход работы
- •8.7. Отчет о выполнении работы
- •8.8. Контрольные вопросы
- •9.4.2. Виды хранимых процедур в InterBase
- •Returns (
- •9.5. Задание
- •9.6. Ход работы
- •9.7. Отчет о выполнении работы
- •9.8. Контрольные вопросы
- •10.4.2. Создание динамической библиотеки с udf
- •Exports
- •Interface
- •10.4.4. Использование udf в базе данных
- •10.5. Задание
- •10.6. Ход работы
- •10.8. Контрольные вопросы
- •11.4.4. Права
-
9.4.2. Виды хранимых процедур в InterBase
В InterBase существует два типа хранимых процедур:
-
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;