DeepEdit!

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

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

Исключительные ситуации, устанавливаемые в подпрограммах

В случае возникновения ошибки в подпрограмме устанавливается исклю­чительная ситуация, которая может быть описана предварительно или определена пользователем. Если в процедуре отсутствует обработчик дан­ной исключительной ситуации, управление программой сразу же переда­ется из процедуры в вызывающую среду в соответствии с правилами, установленными для передачи исключительных ситуаций (см. главу 7). Однако в этом случае значения формальных параметров OUT и IN OUT не возвращаются фактическим параметрам. Фактические параметры бу­дут иметь те же значения, которые они имели бы, если бы процедура не вызывалась. Предположим, что создается следующая процедура:



Перед первым вызовом RaiseError в переменной        содержалось значение 1. Первый вызов был успешен, и v_TempVar было присвоено значение 7. Перед вторым вызовом RaiseError значение v_TempVar измени­лось на 2. Второй вызов завершился неуспешно, и переменная v_TempVar осталась равной 2 (а не изменилась на 7).
Внимание
Семантика обработки исключительной ситуации изменяется, если параметр OUT ил и IN OUT объявляется с помощью NOCOPY( см. ниже раздел "Семантика исключительной ситуации при использовании NOCOPY").

Передача параметров по ссылке и по значению
Параметры подпрограмм передаются одним из двух способов: по ссыл­ке или по значению. Когда параметр передается по ссылке (by referen­ce), соответствующему формальному параметру передается указатель на фактический. Если же параметр передается по значению (by value), оно копируется из фактического параметра в формальный. Передача по ссылке обычно осуществляется быстрее, так как при этом опускает­ся операция копирования; особенно это касается параметров сборных конструкций (таблиц и изменяемых массивов; см. главу 8). По умолча­нию в PL/SQL параметры IN передаются по ссылке, а параметры IN OUT и OUT — по значению. Это сделано для того, чтобы сохранить се­мантику исключительных ситуаций (см. предыдущий раздел) и чтобы иметь возможность проверять ограничения, наложенные на фактиче­ские параметры. До Огас1е8г изменить этот режим было нельзя.
 









jAntivirus