DeepEdit!

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

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

Хранимые подпрограммы и модули

Хранение подпрограмм и модулей в качестве объектов словаря данных имеет свои преимущества. Например, с ним могут работать несколько по­льзователей. Однако следует иметь в виду то, что хранимые объекты свя­заны зависимостями. Нужно учитывать также состояние модулей и то, что на выполнение хранимых подпрограмм и модулей необходимы спе­циальные привилегии.
Зависимости в подпрограммах
При компиляции процедуры или функции все объекты 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.


 









jAntivirus