Модель сигнатур В 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".
< Предыдущая | Следующая > |
---|