Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
shpory_po_bd.docx
Скачиваний:
32
Добавлен:
26.09.2019
Размер:
126.45 Кб
Скачать

Процедурные операторы

Язык PL/SQL обладает стандартным набором операторов, характерных для любого языка программирования. Сведем этот набор в таблицу:

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

переменная := выражение;

безусловный переход

GOTO метка;

условный оператор

IF логическоевыражение THEN

операторы;

[ ELSIF логическоевыражение THEN

операторы; ]

[ ELSE операторы; ]

END IF;

цикл общего вида

LOOP

[ операторы; ]

[ EXIT [ WHEN условиевыхода]];

[ операторы; ]

END LOOP;

цикл FOR

FOR переменнаяцикла IN [REVERSE]

начальноезначение .. конечноезначение LOOP

[ операторы; ]

[ EXIT [ WHEN условиевыхода]];

[ операторы; ]

END LOOP;

цикл WHILE

WHILE условиецикла LOOP

[ операторы; ]

[ EXIT [ WHEN условиевыхода]];

[ операторы; ]

END LOOP;

Особенности записи операторов sql

Особенности реализации языка PL/SQL накладывают ряд ограничений на использование операторов SQL в составе программ на этом языке.

Во-первых, в программах на языке PL/SQL нельзя использовать операторы определения данных (т.е. создавать, модифицировать таблицы и выполнять другую подобную работу). Во-вторых, одиночный (т.е. не входящий в состав курсора) оператор SELECT должен быть записан в форме SELECT списокстолбцов INTO списокпеременных FROM

Такой оператор должен возвращать ровно одну строку, значения которой помещаются в указанный список переменных (на этом месте можно указать одну переменную-запись, и тогда данные будут последовательно помещаться в поля этой записи). Если оператор SELECT возвращает более одной строки, возбуждается исключительная ситуация TOO_MANY_ROWS. Если же этот оператор не возвращает ни одной строки, возникает ситуация NO_DATA_FOUND.

17.Подпрограммы. Хранимые подпрограммы. Пакеты.

Подпрограммы – это блоки PL/SQL с именами, которые могут быть вызваны и могут принимать параметры. Имеются два типа подпрограмм: процедуры и функции. Обычно процедуры используются, если необходимо выполнить некоторое действие, а функции – если необходимо вычислить некоторое значение.

Как и анонимные PL/SQL блоки, подпрограмму имеют декларативную часть, исполняемую часть и обработчики исключительных ситуаций. Декларативная часть содержит объявления типов, курсоров, констант, переменных, исключений и вложенных подпрограмм. Эти элементы локальны в подпрограмме и разрушаются при выходе из нее.

Синтаксис объявления процедуры и функции следующий:

PROCEDURE имяпроцедуры [(параметр [, параметр]…)] IS

[локальныеобъявления]

BEGIN

исполняемыеутверждения

[EXCEPTION

обработчикиисключений ]

END [имяпроцедуры];

///////////////////////////////////////////////////////////////////////////

FUNCTION имяфункции [(параметр [, параметр]…)] RETURN типданных IS

[локальныеобъявления]

BEGIN

исполняемыеутверждения

END [имяфункции];

Описания параметров задаются следующим образом:

имяпараметра [IN | OUT [NOCOPY] | IN OUT [NOCOPY] ] типпараметра

[:= | DEFAULT] выражение

Фразы IN (которая принимается по умолчанию), OUT и IN OUT означают соответственно входные, выходные и модифицируемые параметры. Желательно не использовать режимы OUT и IN OUT при написании функций, чтобы избежать побочных эффектов.

Фактический аргумент, указываемый на месте IN – параметра, может быть константой, литералом, проинициализированной переменной либо выражением, и в отличие от OUT и IN OUT – параметров, IN – параметру может быть приписано значение по умолчанию.

На месте OUT или IN OUT параметра может быть указана только переменная. Как и переменные, OUT – параметры инициализируются NULL -значением.

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

Фраза NOCOPY задает режим передачи параметров по ссылке (в противном случае параметры передаются по значению).

Тело подпрограммы должно содержать хотя бы один оператор (им может быть NULL). Для выхода из подпрограммы используется оператор: RETURN [выражение]

В процедурах использование выражения в операторе RETURN недопустимо, а в функциях – наоборот, обязательно. Кроме того, если функция завершит свою работу, не выполнив оператор RETURN, будет возбуждено стандартное исключение PROGRAM_ERROR.

Вызов подпрограммы может быть выполнен двумя способами:

  • из другой подпрограммы или анонимного блока, например

DECLARE

-- тела процедур

BEGIN

BirthdayPremium(20, 100);

END;

  • с помощью команды SQL* Plus EXECUTE

execute BirthdayPremium(20, 100);

При вызове подпрограмм можно записывать фактические аргументы, используя позиционную, именованную, либо смешанную нотации:

BirthdayPremium(20, 100);

BirthdayPremium(v1=>20, v2=>100);

BirthdayPremium(20, v2=>100);

Требуется, чтобы все позиционные параметры стояли перед именованными, т.е. запись

BirthdayPremium(v1=>20, 100) — недопустима.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]