DeepEdit!

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

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

Модель сигнатур В PL/SQL


Модель сигнатур В PL/SQL предлагается другой способ определения необходимости перекомпиляции удаленных зависимых объектов. Это ме­тод сигнатур. При создании процедуры вместе с р-кодом в словаре дан­ных сохраняется сигнатура (signature). Сигнатура кодирует типы и порядок параметров. В этой модели сигнатура Р2 будет изменяться только при изменении параметров. Когда Р1 компилируется в первый раз, испо­льзуется сигнатура Р2 (а не временная метка), поэтому Р1 необходимо пе­рекомпилировать лишь при изменении сигнатуры Р2.
Для использования модели сигнатур необходимо установить параметр REMOTE_DEPENDENCIES_MODE в значение SIGNATURE. Этот параметр содержится в инициализационном файле базы данных (имя и расположе­ние этого файла, называемого обычно init. о га, варьируется в зависимости
от применяемой системы). Кроме того, можно установить данный пара­метр в диалоговом режиме. Существуют три способа задания этого параметра:
•    Можно добавить в инициализационный файл базы данных строку REMOTE_DEPENDENCIES_MODE=SIGNATURE. При следующем запуске базы данных режим будет установлен как SIGNATURE для всех сеансов.
•    Можно выполнить команду:
alter system set REMOTE_DEPENDENCIES_MODE = signature;
Это будет воздействовать на всю базу данных (на все  начиная с момента выполнения оператора. Эта команда требует наличия систем­ной привилегии ALTER SYSTEM.
•   Можно выполнить команду: alter session set REMOTE_DEPENDENCIES_MODE = signature;
Она воздействует только на определенный сеанс. Для объектов, созда­ваемых в текущем сеансе после выполнения этой команды, будет исполь­зоваться метод сигнатур.
Во всех рассмотренных вариантах можно вместо SIGNATURE указать
TIMESTAMP, чтобы использовать модель временной метки. Режим
TIMESTAMP задается по умолчанию. При применении метода сигнатур следует учитывать ряд моментов:
•    Если изменяются значения, заданные по умолчанию для формаль­ных параметров, сигнатуры не модифицируются. Предположим, что один из параметров процедуры Р2 имеет некоторое значение по умолчанию, и оно используется в Р1. Если изменить это значение в описании Р2, то по умолчанию Р1 не будет перекомпилироваться. Старое значение параметра, заданное по умолчанию, применяется до тех пор, пока Р1 не будет перекомпилирована вручную. Это спра­ведливо только для параметров IN.
•    Если Р1 вызывает модульную процедуру Р2 и если в удаленный мо­дуль добавляется новый, перегруженный вариант Р2, то сигнатура
не изменяется. Р1 будет использовать старый (не перегруженный)
вариант до тех пор, пока Р1 не будет перекомпилирована вручную.
•   Для того чтобы вручную перекомпилировать процедуру, используйте команду:
ALTER PROCEDURE 1шя_процедурыСОМР1ЕЕ;
где имл_процедуръ — это имя компилируемой процедуры. Для пере­компиляции функции служит команда:
ALTER FUNCTION 1шя_функцииСОМтЕЕ;
Для перекомпиляции модуля можно использовать одну из команд:
ALTER PACKAGE илшмодум, COMPILE;
ALTER PACKAGE имя_модуляСОМтЕЕ SPECIFICATION;
ALTER PACKAGE имя_модуляСОМтЕЕ BODY;
Если присутствует ключевое слово SPECIFICATION, то компилиру­ется только заголовок модуля. Если указано ключевое слово BODY, компилируется только тело модуля. Если нет ни того, ни другого, компилируется все. За более подробной информацией о модели сигнатуры обратитесь к руководству "Oracle Server Application Developer's Guide".
 









jAntivirus