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

ОператорSelect

ХранимаяпроцедураможетсодержатьоператорSELECTдлявыводаодногоилинесколькихзначенийиприсвоенияэтихзначенийлокальнымпеременнымиливыходнымпараметрам.Пример:

SELECT*FROMTABLE_FIRMA

INTO:fam,:imya,:otch

ТаблицаTABLE_FIRMAсодержиттритекстовыхполя,содержащиефамилию,имяиотчествосотрудника.Впримереберетсяперваязаписьтаблицы,изначенияееполейприсваиваютсялокальнымпеременным(иливыходнымпараметрам)fam,imyaиotch.Однакоболеетипичнымявляетсяприменениеэтогооператорасусловиемвыборки,возвращающимлишьоднозначение:

SELECTMAX(KOLVO)FROMSKLAD

INTO:p_kolvo

ЦиклForselecTиSuspend

Частобываетнедостаточнополученияданныхлишьоднойзаписи.Чтобыполучитьмножествозначений(виртуальнуютаблицу),используетсяоператорFOR,имеющийследующийсинтаксис:

FORSELECT<условие_выборки>

INTO<список_переменных/параметров>DO<оператор>

Здесь<условие_выборки>-любоеусловиеоператораSELECT.

<список_переменных/параметров>-Списоклокальныхпеременныхиливыходныхпараметров,чейтипданныхсоответствуеттипуданных,полученныхкомандойSELECT.

<оператор>-выполняемыйоператорцикла.ОбычноэтимоператоромбываетоператорSUSPEND,которыйпомещаетполученнуюзаписьвбуфер(кэш),итребуетполученияследующейзаписи,итакдотехпор,поканезакончитсяцикл.Такаяконструкцияпозволяетполучатьнеоднузапись,анаборзаписей,которыйвозвращаетсяввидевиртуальнойтаблицы.Такиепроцедурыназываютсяпроцедурамивыборки,ивызываютсякакобычныетаблицы.

ОператорSUSPENDприменяетсятольковхранимыхпроцедурахвыборки,втриггерахоннедопустим.Ввыполняемыхпроцедурахпользоватьсяэтимоператоромсинтаксическинезапрещено,однакоделатьэтогонестоит-всепоследующиепослеSUSPENDоператорынебудутвыполнены.ВместоэтоговвыполняемыхпроцедурахобычноприменяютявнуюкомандудосрочноговыходаEXIT.Пример:

FORSELECTTOVAR,KOLVOFROMTABLESDELKI

INTO:param_st,:param_int

DOSUSPEND;

Вданномпримеревыходнымпараметрамparam_stиparam_intприсваиваютсязначенияполейTovarиKolvoпервойзаписи,послечеговызываетсяоператорSUSPENDипроцедураприостанавливается.Данныепередаютсяввызывающуюпрограмму,послечегопроцедуратакимжеобразомобрабатываетвторуюзапись.Итакдоконцатаблицы.Длявызывающейпрограммывсевыглядиттак,будтовызываласьтаблица,анехранимаяпроцедура.Однакозачастуюпроцедурывыборкивыполняютсянамногобыстрее,чемтакойжезапросизклиентскогоприложения,ведьпроцедура-этоскомпилированнаяподпрограмма,котораявыполняетсянасторонесервера.

Следуетотметить,чтоприменениеэтогоцикланеограничиваетсятолькооператоромSUSPEND.Выможетеустановитьтамлюбойоператор,илинесколькооператоров,поместивихвскобкиBEGIN…END.Например,втелециклавыможетепроверятьзначенияполейнакакое-тоусловие,иеслиусловиеневерно,исправитьзапись.

ЦиклWhile…do

Этотцикланалогичентому,чтовыиспользуетевDelphi:

WHILE(<условие_цикла>)DO

<оператор>

Каквидноизсинтаксиса,условиецикладолжнобытьзаключеновкруглыескобки.Операторможетбытьсоставным,помещенныммеждуBEGINиEND.Крометого,втелеоператораможетвстречатьсякомандаEXIT,служащаядляпринудительногозавершенияработыпроцедуры.ВтриггереоператорEXITнеприменяется.

ОператорыInsert,update,delete

ВхранимыхпроцедурахитриггерахмогутвстречатьсястандартныеSQL-операторымодификацииданныхINSERT,UPDATEDELETE,которыесоответственно,позволяютвставитьновуюзапись,исправитьилиудалитьсуществующуюзапись.ВотличиеотSQL,вкачествепараметроввэтихоператорахвместоназванияполеймогутиспользоватьсялокальныепеременные.Чтобыотличитьназванияполейотименпеременных,последниедолжныпредварятьсядвоеточием.ПримерпроцедурысоператоромINSERTсмотритевконцелекции.