- •Процедуры и функции в PL/SQL
- •Объявление и использование подпрограмм
- •Состав и параметры процедуры
- •Формальные параметры
- •Режимы использования параметров
- •Формальные и фактические параметры
- •Вызов процедуры
- •Позиционная нотация
- •Именованная нотация
- •Пример анонимного блока, объявляющего процедуру (1)
- •Пример анонимного блока, объявляющего процедуру (2)
- •Функция
- •Объявление и использование функции, вычисляющей сумму заказа
- •Преимущества хранения подпрограмм в базе данных
- •Создание хранимых процедур и функций
- •Создание и вызов процедуры без параметров
- •Создание и хранение процедуры printLine в БД Oracle (1)
- •Создание и хранение процедуры printLine в БД Oracle (2)
- •Выполнение блока, использующего процедуру printLine
- •Другой способ выполнения PL/SQL- подпрограмм
- •Создание и хранение функции orderTotal в БД Oracle (1)
- •Создание и хранение функции orderTotal в БД Oracle (2)
- •Выполнение блока, использующего
- •Хранимая процедура, определяющая число записей в таблице (1)
- •Хранимая процедура, определяющая число записей в таблице (2)
- •Хранимая процедура, возвращающая по первичному ключу название каталога (1)
- •Хранимая процедура, возвращающая по первичному ключу название каталога (2)
- •Хранимая процедура, выдающая число заказов покупателя по его коду (1)
- •Хранимая процедура, выдающая число заказов покупателя по его коду (2)
- •Пример использования функции с оператором IF
- •Функция compute_discounts (1)
- •Функция compute_discounts (2)
- •Использование функции compute_discounts (1)
- •Использование функции compute_discounts (2)
- •Пакеты
- •Глобальные конструкции
- •Пример создания спецификации пакета
Процедуры и функции в 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 , … ) ;
Можно смешивать две нотации, но позиционный список должен предшествовать именованному в списке параметров.