- •Введение.
- •Лекция1.Введениевклиент-серверныеСубд.
- •InterbaseSqlServer.Общиесведения.
- •Платформы
- •Типыприложений
- •ФайлыбазыданныхInterBase
- •Лекция3.Триггерыихранимыепроцедуры
- •Хранимыепроцедуры(StoredProcedures)
- •Терминаторы
- •Заголовок
- •Телопроцедуры
- •Блоккодапроцедуры
- •Операторприсваивания
- •УсловныйоператорIf…then…else
- •ОператорSelect
- •ЦиклForselecTиSuspend
- •ЦиклWhile…do
- •ОператорыInsert,update,delete
- •ОператорExecuteprocedure
- •Исключения
- •СобытияиоператорPost_event
- •Измененияиудаленияхранимыхпроцедур
- •Примерысозданияивызовахранимыхпроцедур
- •Генераторы
- •Увеличениешагагенератора
- •Триггеры
- •ПеременныеNeWиOld
- •Реализацияавтоинкрементныхключевыхполей
- •Лекция4.Транзакции.Механизмтранзакций
- •Атомарность(Atomicity)
- •Согласованность(Consistency)
- •Изолированность(Isolation)
- •Устойчивость(Durability)
- •Неявныйиявныйстарттранзакций
- •Кактранзакцияработает
- •Уровниизолированноститранзакций
- •Параметрытранзакций
- •Компонентыдоступакданнымивизуальныекомпоненты МеханизмыдоступакБд
- •ПроблемырусскихбукввInterBase
- •Лекция5. Основы языка php. Функции php для работы с субд ИсторияPhp
- •ВозможностиPhp
- •Основнойсинтаксис
- •Разделениеинструкций
- •Комментарии
- •Переменные,константыиоператоры
- •Переменные
- •Константы
- •Операторы
- •Типыданных
- •Типboolean(булевилилогическийтип)
- •Типinteger(целые)
- •Типfloat(числасплавающейточкой)
- •Типstring(строки)
- •Одинарныекавычки
- •Двойныекавычки
- •Типarray(массив)
- •Определениеприпомощиarray()
- •Определениеспомощьюсинтаксисаквадратныхскобок
- •Типobject(объекты)
- •Типresource(ресурсы)
- •Решениезадачи
- •Построениеинтерфейсадлядобавленияинформации
- •Установкасоединения
- •Выборбазыданных
- •Получениеспискаполейтаблицы
- •Отображениеспискаполейвhtml-форму
- •Записьданныхвбазуданных
- •Отображениеданных,хранящихсявMySql
- •Заключение
Измененияиудаленияхранимыхпроцедур
ИзменениесуществующейпроцедурыделаетсякомандойALTERPROCEDURE.СинтаксисэтойкомандыничемнеотличаетсяотсинтаксисакомандыCREATEPROCEDURE.Это"мягкий"способизмененияпроцедуры,которыйобычноприменяютдлядобавленияновыхвходныхиливыходныхпараметров.Болеенадежнымспособомсчитаетсяудалениестаройпроцедурыисозданиеновой,стакимжеименем.
Удалениепроцедурыпроизводитсякомандой
DROPPROCEDURE<имя_процедуры>
<имя_процедуры>-этопростоимясуществующейпроцедурыбезвсякихпараметров.
Пример:
DROPPROCEDUREMyProc;
Разумеется,изменятьилиудалятьпроцедуруможеттолькоадминистраторSYSDBAилипользователь,создавшийэтупроцедуру.Причемприизмененииилиудалении,процедуранедолжнанаходитьсявиспользовании.
Примерысозданияивызовахранимыхпроцедур
Далееследуютпримерыпроцедур,которыенеобходимовыполнятьвInteractiveSQL.Убедитесь,чтосервисInterBaseвключен,загрузитеIBConsole,войдитевбазуданныхFirstивызовитеокноInteractiveSQL.Выполнимследующийпример:
/*Переопредилимтерминатор:*/
SETTERM^;
/*Создаемпроцедуру,котораябудетдобавлятьновыезаписи
втаблицуTable_Firma:*/
CREATEPROCEDUREFirma_Insert
(FVARCHAR(20),IVARCHAR(20),OVARCHAR(20))
AS
BEGIN
INSERTINTOTABLE_FIRMA(FAMILIYA,IMYA,OTCHESTVO)
VALUES(:F,:I,:O);
END^
SETTERM;^
COMMIT;
/*Сразужеприменимполученнуюпроцедурудлявводазначений:*/
EXECUTEPROCEDUREFirma_Insert
('Иванов','Иван','Иванович');
EXECUTEPROCEDUREFirma_Insert
('Петров','Петр','Петрович');
EXECUTEPROCEDUREFirma_Insert
('Николаев','Николай','Николаевич');
COMMIT;
ДанныйпримерсоздаетвыполняемуюпроцедуруFirma_Insert,котораядобавляетвтаблицуTable_Firmaуказанныевпараметрефамилию,имяиотчество.Послесозданияпроцедурымытриждывызвалиеедлядобавленияновыхзаписей.Подобногородапроцедурынередкоиспользуютдляпредварительнойпроверкизначений,переданныхвкачествепараметров.Этизначенияможноизменитьпереддобавлениемилиисправлениемзаписи,илиотказатьсядобавлятьзапись,есликакое-тозначениенеудовлетворяетнужномуусловию.Подобныйподходпозволяеторганизоватьдовольногибкуюсистемубизнес-логики,котораябудетвыполнятьсянасторонесервера.
Следующийпримерсоздастпроцедурувыборки:
/*Переопределяемтерминатор:*/
SETTERM^;
/*Создаемпроцедуру:*/
CREATEPROCEDUREFirma_Select
RETURNS(FVARCHAR(20),IVARCHAR(20),OVARCHAR(20))
AS
BEGIN
/*Спомощьюциклаполучаемвсестрокитаблицы:*/
FORSELECT*FROMTABLE_FIRMA
INTO:F,:I,:O
DOSUSPEND;
END^
SETTERM;^
COMMIT;
/*ВызовемполученнуюпроцедурукомандойSELECT:*/
SELECT*FROMFirma_Select;
Этапроцедуранеизменяетданных,онатолькополучаетвсезаписиизтаблицыTable_Firma,ивыводитиходназадругой.Врезультате,внижнемокнеInteractiveSQLмыполучимследующуюкартину:
Рис.3.1.РезультатдействийпроцедурывыборкиFirma_Select
Каквидите,иперваяивтораяпроцедурывыполнилисвоюзадачу.Мыполучилитакойженаборданных,какизобычнойтаблицы.ВкачествеполейздесьвыступаютвыходныепараметрыF,IиO.
Иногдахранимыепроцедурыприменяютдляполучениянабораизданных,которыевообщенехранятсявбазеданных.Вотпримертакойпроцедуры:
SETTERM^;
CREATEPROCEDUREPrimerProc(IINTEGER)
RETURNS(KINTEGER,VVARCHAR(25))
AS
BEGIN
K=0;
WHILE(K<I)DO
BEGIN
K=K+1;
V='Строка№'||K;
SUSPEND;
END
END^
SETTERM;^
COMMIT;
/*Вызываемполученнуюпроцедуру:*/
SELECT*FROMPrimerProc(5);
Обратитевнимание,впроцедуреимеетсявходнойпараметрI,вкотороммыможемпередатьцелоечисло,определяющееколичествостроквполученномнабореданных.ТакжеунасимеетсядвавыходныхпараметраKиV,соответственно,целоечислоистрокаиз25символов.Этипараметрысформируютполяполученногонабораданных.
ДалеемыобнуляемцелуюпеременнуюивызываемциклWHILE,которыйбудетвыполнятьсядотехпор,покапеременнаяKбудетменьшевходящегопараметра.Вциклемывначалеприбавляемкэтойпеременнойединицу,послечегоформируемстрокутипа"Строка№1".Приэтоммыиспользуемзнакконкатенации(объединения)строк"||",авкачествевторойподстрокиподставляемцелоечисло,котороехранитсявпеременнойK.Происходитнеявноепреобразованиетиповданных.Тольконезабывайте,целоечисломожнопреобразоватьвстроку,ноненаоборот!ДалеемывызываемоператорSUSPEND,которыйпомещаетполученнуюстрокувнаборданных.Циклбудетпродолжатьсястолькораз,сколькомыукажемвовходящемпараметрепроцедуры.КогдамывызовемэтупроцедуруоператоромSELECT,тополучимследующийрезультат:
Рис.3.2.РезультатработыпроцедурыPrimerProc
Теперь,открыввдеревесерверовIBConsoleбазуданныхFirst,ивыделивподразделStoredProcedures,выувидитетрисозданныххранимыхпроцедуры,которыевдальнейшемможновызыватьнеоднократно.