Хранение подпрограмм и модулей в качестве объектов словаря данных имеет свои преимущества. Например, с ним могут работать несколько пользователей. Однако следует иметь в виду то, что хранимые объекты связаны зависимостями. Нужно учитывать также состояние модулей и то, что на выполнение хранимых подпрограмм и модулей необходимы специальные привилегии.
Зависимости в подпрограммах
При компиляции процедуры или функции все объекты Oracle, на которые она ссылается, записываются в словарь данных. Говорят, что процедура зависит (dependent) от этих объектов. Выше было показано, что подпрограмма, при компиляции которой возникли ошибки, помечается в словаре данных как недостоверная. Хранимая подпрограмма может стать недостоверной и в том случае, когда над одним из объектов, от которых она зависит, выполняется некоторая операция DDL. Рассмотрим пример. Функция AlmostFull (см. главу 9) обращается с запросом к таблице classes. Зависимости AlmostFull представлены на рис. 10.3. AlmostFull зависит только от одного объекта — classes. На рисунке это показано стрелкой.
Теперь создадим процедуру, вызывающую и результаты в таблицу temp_table. Назовем эту процедуру RecordFullClasses:
Существующие зависимости показаны стрелками на рис. 10.4. Record-FullClasses зависит как от AlmostFull, так и от temptable. Такие зависимоти называются непосредственными (direct), поскольку RecordFullClasses ссылается непосредственно на AlmostFull и AlmostFull зависит от classes, поэтому RecordFullClasses имеет косвенную (indirect) зависимость от classes.
Если над classes выполняется операция DDL, то все объекты, которые
зависят от classes (непосредственно или косвенно), становятся недостоверными. Изменим таблицу classes, добавив к ней столбец:
ALTER TABLE classes ADD (Student_rating MUMBER(2) -- Уровень сложности от 1 до 10 );
В этом случае как AlmostFull, так и RecordFullClasses станут недостоверными, поскольку оба эти объекта зависят от classes. На рис. 10.5 приведен соответствующий пример сеанса работы в SQL*Plus.
< Предыдущая | Следующая > |
---|