Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Работа с Oracle / 16 - Процедуры и функции в PL SQL.ppt
Скачиваний:
12
Добавлен:
28.06.2021
Размер:
584.7 Кб
Скачать

Процедуры и функции в PL/SQL

Объявление и использование подпрограмм Хранимые процедуры и функции

Объявление и использование подпрограмм

Раздел объявлений блока может содержать описание именованных процедур – подпрограмм.

Операторы в теле программы могут вызывать подпрограм- мы каждый раз, когда это необходимо.

Типы подпрограмм, поддерживаемые языком PL/SQL:

Процедура – подпрограмма, выполняющая некоторое действие.

Функция – подпрограмма, которая вычисляет некоторое значение и возвращает его в вызывающую программу.

Состав и параметры процедуры

Процедура состоит из двух частей:

Спецификация процедуры – включает имя процедуры и описание ее входных и выходных данных (формальных параметров). При вызове процедуры могут указываться входные данные (фактические параметры).

Тело процедуры – блок PL/SQL-кода. Синтаксис процедуры:

CREATE PROCEDURE спецификация_процедуры IS тело_процедуры

Формальные параметры

Чтобы отличать формальные параметры от переменных, констант и пр., рекомендуется при объявлении снабжать их префиксом р_.

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

VARCHAR2(100) ).

Для каждого формального параметра должен быть задан один из режимов использования.

Режимы использования параметров

Параметр IN передает в подпрограмму значение. Под- программа не может изменить значение внешней перемен- ной, соответствующей этому параметру.

Параметр OUT инициализируется значением NULL. Под- программа может изменять значение соответствующей переменной в вызывающей среде (может установить значе- ние параметра OUT, но не может его прочитать).

Параметр типа IN OUT соединяет в себе свойства пара- метров типа IN и OUT.

Формальные и фактические параметры

Процедура или функция может иметь формальные пара- метры (со значениями по умолчанию или без них).

Типы данных фактических параметров должны совпадать с типами данных соответствующих формальных парамет- ров или допускать преобразование.

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

Вызов процедуры

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

имя_процедуры ( ) ; или имя_процедуры ;

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

Формальные параметры, для которых во время вызова ука- зываются значения, должны быть перечислены до формаль- ных параметров, для которых значения не указываются.

Позиционная нотация

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

имя_процедуры ( факт_парам_1, факт_парам_2, … факт_парам_N ) ;

Величина N может быть меньше или равна количеству формальных параметров процедуры.

Но она должна быть больше или равна количеству фор- мальных параметров, не имеющих значений по умолчанию.

Именованная нотация

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

имя_процедуры (форм_парам_1 => факт_парам_1 , форм_парам_2 => факт_парам_2 , … ) ;

Можно смешивать две нотации, но позиционный список должен предшествовать именованному в списке параметров.

Пример анонимного блока, объявляющего­ процедуру (1)