Функция - это модуль, возвращающий значение. В отличие от вызова процедуры, являющегося независимым исполняемым оператором, вызов функции может существовать только как часть исполняемого оператора (то есть он может быть, например, элементом выражения или значением, присваиваемым по умолчанию при объявлении переменной).
Функция возвращает значение, которое, естественно, относится к какому-то типу данных. Функция может использоваться в PL/SQL-опе- раторе вместо выражения, имеющего тот же тип данных, что и возвращаемое функцией значение.
Функции чрезвычайно важны при создании модульных конструкций. Например, любое бизнес-правило или формула в вашем приложении должны быть помещены в функции. Любой запрос, возвращающий единственную строку, также следует определять в функции, с тем чтобы обеспечить простой и надежный способ его повторного использования.
Некоторые разработчики предпочитают полагаться не на функции, а на процедуры, возвращающие информацию через список параметров. Если вы относитесь к их числу, то не забудьте проверить, что все ваши бизнес-правила, формулы и однострочные запросы «спрятаны» в процедуры.
Если в приложении определено и используется мало функций, то его, скорее всего, будет сложно поддерживать и совершенствовать.
Структура функции совпадает со структурой процедуры, единственное отличие состоит в том, что функция включает в себя еще предложение RETURN:
Имя схемы, которой принадлежит функция (необязательный параметр). По умолчанию функция принадлежит схеме текущего пользователя. Для создания процедуры в другой схеме текущему пользователю потребуются соответствующие привилегии.
имя
Имя функции, которое указывается сразу после ключевого слова
FUNCTION.
Необязательный список параметров, которые могут быть определены для передачи информации как в функцию, так и из нее обратно в вызывающую программу.
Тип данных значения, возвращаемого функцией, который обязательно должен быть указан в заголовке функции.
Определяет, с какими правами будет исполняться процедура: с правами ее владельца (создателя) или же с правами вызывающего пользователя. Принято говорить о двух моделях исполнения: с правами владельца и с правами вызывающего.
Подсказка оптимизатору, позволяющая системе использовать сохраненную копию возвращенного функцией результата (при его наличии). Оптимизатор запроса определяет, следует ли выбрать сохраненную копию или же вызвать функцию повторно.
Подсказка оптимизатору, разрешающая параллельное выполнение функции при вызове из оператора SELECT.
Указывает, что результаты табличной функции должны возвращаться построчно с помощью команды PIPE ROW.
Объявления локальных идентификаторов для данной функции. Если вы ничего не объявляете, то операторы IS и BEGIN будут следовать непосредственно друг за другом.
Операторы, которые функция исполняет при вызове. После ключевого слова BEGIN до ключевых слов END или EXCEPTION должен быть указан хотя бы один исполняемый оператор.
Необязательные обработчики исключений для функции. Если вы не обрабатываете явно никакие исключения, то пропустите ключевое слово EXCEPTION и завершите раздел исполнения ключевым словом END.
< Предыдущая | Следующая > |
---|