- •Введение.
- •Лекция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
- •Заключение
ОператорExecuteprocedure
Изхранимойпроцедурыилитриггераможновызватьдругуюхранимуюпроцедуру.Триггервызватьнельзя.Синтаксисвызовахранимойпроцедуры:
EXECUTEPROCEDURE<имя_процедуры>[<список_параметров>]
[RETURNING_VALUES:<список_переменных>]
Здесь<имя_процедуры>-имявызываемойпроцедуры
<список_параметров>-одинилинесколькопередаваемыхвпроцедурупараметров(необязательно,еслипроцедуранетребуетпараметров).Еслипараметровнесколько,ониразделяютсязапятыми.
<список_переменных>-однаилинескольколокальныхпеременныхиливыходныхпараметров,вкоторыепомещаютсярезультатыработывызываемойпроцедуры(необязательно,еслипроцедураневозвращаетзначения).Передименемкаждойпеременной(выходногопараметра)обязательноставитсядвоеточие,переменные(выходныепараметры)разделяютсязапятыми.
Исключения
ИсключениявInterBaseвомногомпохожинаисключениявязыкахвысокогоуровня.Исключение-этосообщениеобошибке,котороеимеетсобственноеуникальноеимяитекстсообщения.
Чтобывызватьизхранимойпроцедурыилитриггераисключение,вначалеэтоисключениенужносоздать.Делаетсяэтокомандой
CREATEEXCEPTION<имя><'сообщение'>;
Возьмем,кпримеру,самоераспространенноевязыкахпрограммированияисключение-делениенаноль.Создадимисключение:
CREATEEXCEPTIONno_del_null'Cannotdividebyzero!'
Тутследуетзаметить,чтотекстисключениявводитсяихранитсявкодировкесимволовNONE(тоесть,какаятоконкретнаякодировканеиспользуется).ПоэтомуесливыприсозданиибазыданныхуказаликодировкупоумолчаниюWIN1251,топопыткасоздатьисключениесрусскимтекстом,скореевсего,вызоветошибку.Выход:либопишитетекстисключениялатиницей,либоприсозданиибазыданныхуказывайтекодировкупоумолчаниюNONE.Впоследнемслучаевывполнесможетесоздатьисключениесрусскимтекстом:
CREATEEXCEPTIONno_del_null'Нанольделитьнельзя!'
Далеевблокекодапроцедурыилитриггеравыможетевызватьэтоисключениеследующимобразом:
IF(delitel=0)THENBEGIN
EXCEPTIONno_del_null;
Resultat=0
END
ВданномпримереResultat-выходнойпараметрпроцедуры,вызвавшейисключение,аdelitel-входнойпараметр,которыймыпроверяемназначение0.
Разсозданноеисключениеможноприменятьвлюбойхранимойпроцедуреилитриггере.
Исключениямогутбытьизмененыкомандой
ALTEREXCEPTION<имя_исключения><"новый_текст">
Приэтомневажно,сколькопроцедурилитриггеровиспользуютего:самоисключениеникуданеделось,изменилсялишьвыводимыйтекст
Исключениямогутбытьудаленыкомандой
DROPEXCEPTION<имя_исключения>
Исключениенеможетбытьудалено,есливнастоящиймоментоноиспользуетсякакой-либохранимойпроцедуройилитриггером.Есливыудалилиисключение,тоссылкананеговхранимыхпроцедурахилифункцияхстановитсянеразрешенной,выполучитеисключениеоботсутствиеисключения,поэтомувсеженезабывайтеудалятьиссылкинаэтоисключениеввашихпроцедурах.
СобытияиоператорPost_event
ВхранимыхпроцедурахитриггерахсерверInterBaseпозволяетпосылатьзаинтересованнымклиентамизвещениеонаступлениикакого-либособытия.ДелаетсяэтокомандойPOST_EVENT:
POST_EVENT"Имя_события"
Пример:
POST_EVENT"Ups_Sorry"
Имясобытияможетбытьстрокойилитекстовойпеременной,содержащейимясобытия.
Клиентскаяпрограммадолжназарегистрироватьнасерверетесобытия,которыеееинтересуют,чтобыполучатьих.СделатьэтовклиентскомприложениипрощевсегоспомощьюкомпонентаTIBEventAlert,которыйнаходитсянавкладкеSamplesПалитрыкомпонентов,либоспомощьюкомпонентаTIBEvents,есливыдляработысБДпользуетеськомпонентамисвкладкиInterBase.
Сутьработысэтимикомпонентамипроста:
ВначалевсвойствеDatabaseвывыбираетекомпонентбазыданных,напримерTDatabaseилиTIBDatabase,взависимостиоттого,какиммеханизмомдоступакБДвыпользуетесь.Компонентбазыданныхдолженбытьподключенксерверу(подробнееобэтомвследующихлекциях).
ДалеевыдваждыщелкаетепосвойствуEvents,котороеимееттипTStrings,ивоткрывшемсяспискевписываетеинтересующиевассобытия.
ЗатемвыпереводитесвойствоRegisteredвTrue.
ПотомтребуетсяперейтинавкладкуEventsинспектораобъектовисгенерироватьсобытиеOnEventAlert,вкоторомможетенаписатькакое-либосообщениеилидействие.ПараметрEventNameбудетсодержатьимяслучившегосясобытия.Например:
IfEventAlert='Ups_Sorry'then
ShowMessage('Извините,ноктотоудалилвашузапись!');
ПараметрEventCountсодержитколичествособытий,произошедшихнасервере,аизменяемыйпараметрCancelAlertsпозволяетотказатьсяотвыдачидальнейшихсообщений,дляэтогонужноприсвоитьемузначениеTrue.