DeepEdit!

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

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

Модули и область действия

Любой объект, объявленный в заголовке модуля, находится в области дейст­вия и видим вне этого модуля. При обращении к объекту нужно указать имя модуля. Например, можно вызвать процедуру ClassPackage.RemoveStudent из блока PL/SQL:
Вызов этой процедуры аналогичен вызову процедуры, не входящей в состав модуля. Единственное отличие — указание перед именем процеду­ры имени модуля. Для модульных процедур могут задаваться параметры по умолчанию, и вызывать такие процедуры можно при помощи как пози­ционного, так и именного представления, т.е. точно так же, как обычные хранимые процедуры.
Кроме того, в модуле можно применять типы данных, определяемые пользователем. Например, чтобы вызвать ClassList, необходимо объя­вить переменную типа ClassPackage. t_StudentIDTable (см. главу 8):
Внутри тела модуля на объекты, представленные в его заголовке, можно ссылаться без указания имени модуля. Например, процедура RemoveStudent может использовать исключительную ситуацию как e_StudentNotRegistered, а не как ClassPackage. e_StudentNotRegistered. Тем не менее при желании можно применять и полностью квалифицированные имена.
Область действия переменных, содержащихся в теле модуля
Итак, ClassPackage.AddStudent и ClassPackage.RemoveStudent обновляют таблицу registered_students, но этого недостаточно. Чтобы отразить све­дения о только что добавленном (или удаленном) студенте, нужно обно­вить еще и таблицы students и classes. Для этого добавим процедуру в тело модуля:



Процедура UpdateStudentsAndClasses объявлена в теле модуля локаль­ной, и область ее действия, таким образом, только тело модуля. Следова­тельно, ее можно вызывать из других процедур тела модуля (а именно из AddStudent и RemoveStudent), но вне тела она невидима.
 









jAntivirus