Любой объект, объявленный в заголовке модуля, находится в области действия и видим вне этого модуля. При обращении к объекту нужно указать имя модуля. Например, можно вызвать процедуру 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), но вне тела она невидима.
< Предыдущая | Следующая > |
---|