Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

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

Далее следуют примеры процедур, которые необходимо выполнять в Interactive SQL. Убедитесь, что сервис InterBase включен, загрузите IBConsole, войдите в базу данных First и вызовите окно Interactive SQL. Выполним следующий пример:

/* Переопредилим терминатор: */SET TERM ^;/* Создаем процедуру, которая будет добавлять новые записи в таблицу Table_Firma: */CREATE PROCEDURE Firma_Insert (F VARCHAR(20), I VARCHAR(20), O VARCHAR(20))ASBEGIN INSERT INTO TABLE_FIRMA(FAMILIYA, IMYA, OTCHESTVO) VALUES(:F,:I,:O);END^SET TERM;^COMMIT; /* Сразу же применим полученную процедуру для ввода значений: */EXECUTE PROCEDURE Firma_Insert ('Иванов', 'Иван', 'Иванович');EXECUTE PROCEDURE Firma_Insert ('Петров', 'Петр', 'Петрович');EXECUTE PROCEDURE Firma_Insert ('Николаев', 'Николай', 'Николаевич');COMMIT;

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

Следующий пример создаст процедуру выборки:

/* Переопределяем терминатор: */SET TERM ^;/* Создаем процедуру: */CREATE PROCEDURE Firma_SelectRETURNS (F VARCHAR(20), I VARCHAR(20), O VARCHAR(20))ASBEGIN /* С помощью цикла получаем все строки таблицы: */ FOR SELECT * FROM TABLE_FIRMA INTO:F,:I,:O DO SUSPEND;END^SET TERM;^COMMIT; /* Вызовем полученную процедуру командой SELECT: */SELECT * FROM Firma_Select;

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


Рис. 19.1. Результат действий процедуры выборки Firma_Select

Как видите, и первая и вторая процедуры выполнили свою задачу. Мы получили такой же набор данных, как из обычной таблицы. В качестве полей здесь выступают выходные параметрыF, I и O.

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

SET TERM ^;CREATE PROCEDURE PrimerProc(I INTEGER)RETURNS (K INTEGER, V VARCHAR(25))ASBEGIN K = 0; WHILE (K < I) DO BEGIN K = K + 1; V = 'Строка № ' || K; SUSPEND; ENDEND^SET TERM;^COMMIT; /* Вызываем полученную процедуру: */SELECT * FROM PrimerProc(5);

Обратите внимание, в процедуре имеется входной параметр I, в котором мы можем передать целое число, определяющее количество строк в полученном наборе данных. Также у нас имеется два выходных параметра K и V, соответственно, целое число и строка из 25 символов. Эти параметры сформируют поля полученного набора данных.

Далее мы обнуляем целую переменную и вызываем цикл WHILE, который будет выполняться до тех пор, пока переменная K будет меньше входящего параметра. В цикле мы вначале прибавляем к этой переменной единицу, после чего формируем строку типа "Строка № 1". При этом мы используем знак конкатенации (объединения) строк "||", а в качестве второй подстроки подставляем целое число, которое хранится в переменной K. Происходит неявное преобразование типов данных. Только не забывайте, целое число можно преобразовать в строку, но не наоборот! Далее мы вызываем оператор SUSPEND, который помещает полученную строку в набор данных. Цикл будет продолжаться столько раз, сколько мы укажем во входящем параметре процедуры. Когда мы вызовем эту процедуру оператором SELECT, то получим следующий результат:


Рис. 19.2. Результат работы процедуры PrimerProc

Теперь, открыв в дереве серверов IBConsole базу данных First, и выделив подраздел Stored Procedures, вы увидите три созданных хранимых процедуры, которые в дальнейшем можно вызывать неоднократно.

 

<== предыдущая лекция | следующая лекция ==>
Изменения и удаления хранимых процедур | Увеличение шага генератора
Поделиться с друзьями:


Дата добавления: 2014-01-07; Просмотров: 279; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.008 сек.