DeepEdit!

Программирование баз данных на Oracle, техническая документация, литература, статьи и публикации

  • Увеличить размер шрифта
  • Размер шрифта по умолчанию
  • Уменьшить размер шрифта

Параметры

Процедуры и функции могут использовать параметры для передачи информации между модулем и вызывающим PL/SQL-блоком (в обоих направлениях).
Параметры модуля имеют не меньшее значение, чем реализующий модуль код (тело модуля). Конечно, вы должны обеспечить работоспособность модуля. Но все же суть создания модуля заключается в том, что он может вызываться (в идеале) несколькими другими модулями. Если же список параметров плохо составлен или непонятен, то другим программистам будет сложно использовать такой модуль, и мало кто захочет с ним возиться. И будет уже не важно, насколько хорошо вы написали свой модуль, если никто не захочет им пользоваться.
PL/SQL предлагает различные средства для эффективного составления списка параметров. В разделе будут рассмотрены все элементы определения параметров.
Определение параметров
Формальные параметры определяются в списке параметров программы. Определение параметра чрезвычайно похоже на объявление переменной в разделе объявлений блока PL/SQL. Два важных отличия состоят в следующем: во-первых, для параметра должен быть указан режим использования, а во-вторых, при определении параметров нельзя накладывать на них ограничения.
Однако при определении параметра необходимо исключить часть объявления с ограничением:
Объявление с ограничением - это объявление, накладывающее ограничение на значение, которое может присваиваться переменной, объявляемой с данным типом данных. Объявление без ограничения не накладывает таких ограничений на значения. В следующем объявлении на переменную company_name накладывается ограничение: ее длина не должна превышать 60 символов:
Фактические и формальные параметры
Необходимо различать две разновидности параметров: формальные и фактические. Формальные параметры - это имена, объявленные в списке параметров в заголовке модуля. Фактические параметры - это значения или выражения, помещенные в список параметров при фактическом вызове модуля.
Давайте посмотрим на отличия между формальными и фактическими параметрами на примере функции tot_sales. Вот ее заголовок:

Статус заказов, которые должны быть включены в расчет продаж.
Эти формальные параметры не существуют вне рамок функции. Вы можете воспринимать их как заполнители (placeholders) для фактических значений параметров, которые будут переданы в функцию, когда она будет использоваться в программе.
Каким образом при исполнении программы PL/SQL понимает, какой фактический параметр соответствует какому формальному? PL/SQL поддерживает два способа установки соответствия:
Связывание по позиции
Неявно связывает фактический параметр с формальным по их позиции.
Связывание по имени
Явно связывает фактический параметр с формальным по имени.
Связывание по позиции
Во всех рассмотренных ранее примерах использовалось связывание параметров по позиции. При связывании по позиции PL/SQL устанавливает соответствие между параметрами на основании их относительных позиций в списке: N-й фактический параметр в вызове программы сопоставляется N-му формальному параметру в заголовке программы.
В следующем примере для функции tot_sales PL/SQL связывает первый фактический параметр :order.company_id с первым формальным параметром company_id_in. Затем второй фактический параметр N сопоставляется второму формальному параметру status_in:

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









jAntivirus