Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции БДиСУБД.docx
Скачиваний:
17
Добавлен:
19.11.2019
Размер:
494.91 Кб
Скачать

Телопроцедуры

Хранимыепроцедуры,какипроцедурывDelphi,могутиметьлокальныепеременные,илинеиметьих.Еслилокальныхпеременныхнет,телопроцедурыпредставляетсобойтолькосоставнойоператор,заключенныйвскобкиBEGIN…END.Причемэтискобкиобязательны,дажеесливпроцедуревсеготолькоодиноператор.

Еслижелокальныепеременныеимеются,товначалеихнужнообъявитьпослеключевыхсловDECLAREVARIABLE,послечегоследуетсоставнойоператор.Приэтомследуетпомнить,чтообъявлениекаждойпеременнойявляетсяотдельнымоператоромидолжнозавершатьсяточкойсзапятой.Пример:

SETTERM^;

CREATEPROCEDUREMyProc(param1Integer)

RETURNS(param2Varchar(20),param3DoublePrecision)

AS

DECLAREVARIABLEperem1Varchar(10);

DECLAREVARIABLEperem2Date;

DECLAREVARIABLEperem3Integer;

BEGIN

END^

SETTERM;^

Вприведенномпримеремывначалепереопределяемтерминатор,послечегоприступаемнепосредственнокописаниюпроцедуры.Впроцедуреимеетсяодинвходящий,идвавыходящихпараметра,атакжеобъявленытрилокальныепеременные.Заметим,чтоключевоесловоDECLAREобязательно,авотсловоVARIABLEможноопустить.Есливыжелаете,чтобывашабазаданныхбыласовместимасраннимиверсиямиInterBase,тоVARIABLEлучшеуказывать.Завершаетсяпроцедурановымтерминатором"^",послечегомыпереопределяемегонастандартныйсимвол";".

Блоккодапроцедуры

БлоккодапроцедурыначинаетсяключевымсловомBEGIN,иоканчиваетсяключевымсловомEND.Блоккодаможетсостоятьизодногоилинесколькихоператоров,атакжесодержатьвложенныеблокикодаBEGIN…END.

Вблокекодапроцедурымогутвстречаться:

  • операторыприсваивания,которыеприсваиваютзначениялокальнымпеременным,входнымиливыходнымпараметрам(вотличиеотоператора":="вDelphi,вSQLэтопростознакравно"=");

  • операторыSELECTдлявыборкиданныхизтаблиц.Результатывыборкимогутприсваиватьсяпеременнымилипараметрам;

  • циклы,такиекакFORиWHILE;

  • управляющиеструктурыIF;

  • операторыEXECUTEPROCEDUREдлявызовадругойхранимойпроцедуры;

  • комментарии,заключенныевскобки/*…*/;

  • символысравнения>=,>,<=,<,<>,=,!<(неменьше),!>(небольше),!=(неравно);

  • командымодификациитаблиц,такиекакINSERT,UPDATEилиDELETE;

  • идр.

Важно!ЕсливблокекодалокальныепеременныеиспользуютсявнутриSQL-оператора(например,SELECT),передихименамиследуетставитьдвоеточие.Вдругихоператорахэтогоделатьненужно.

Операторприсваивания

Операторприсваиванияимеетвид

<переменная/выходнойпараметр>=<выражение>

ислужитдляприсвоениялокальнойпеременнойиливыходномупараметрукакого-либозначения.Здесьестьнесколькоправил.Во-первых,переменнаяиливыходнойпараметрдолжныиметьсовместимыйтипданныхсвыражением.Во-вторых,передименемпеременнойиливыходногопараметрадвоеточиенеставится.В-третьих,вInterBaseвыражениеможетбытьлибостроковым,либоарифметическим.Впервомслучаевыражениеможетсодержатьоператорконкатенации(объединения)строк"||",вовторомслучае-четыреарифметическихоператора+,-,*и/.Помимоэтого,выражениеможетсодержатьзначенияоднотипныхстолбцовтаблиц,илирезультатработыдругойпроцедуры.

УсловныйоператорIf…then…else

ВотличиеотDelphi,вInterBaseусловноевыражениеоператораIFобязательнонужнопомещатьвкруглыескобки,крометого,передELSEточкасзапятойнеопускается:

IF(<условное_выражение>)THEN<оператор_1>;[ELSE<оператор_2>]

Какобычно,если<условное_выражение>возвращаетистину,товыполняется<оператор_1>,

впротивномслучаевыполняется<оператор_2>.Пример:

IF(KOLVO>5ANDKOLVO<10)THEN…;

Заметьте,чтоприоритетоперацийсравнениявыше,чемлогическихоперацийAND,ORиNOT,поэтомуприиспользованииболеечемодногоусловиянетнеобходимостизаключатькаждоеизнихвотдельныескобки.АльтернативныйвариантELSEнеявляетсяобязательнымиможетбытьопущен.