Директивы компилятора
Ключевое слово PRAGMA позволяет давать инструкцию компилятору. В PL/SQL существует четыре типа директив:
1. EXCEPTION_INIT – сообщает компилятору о том, что следует сопоставить указанный номер ошибки с идентификатором, который был объявлен как EXCEPTION в текущей программе или в доступном пакете.
2. RESTRICT_REFERENCES – сообщает компилятору уровень чистоты программы или пакета. Уровень чистоты показывает, в какой степени программа свободна от возможных побочных эффектов, связанных с чтениемзаписью таблиц БД иили переменных пакета. (после выхода 8 версии не используется)
3. SERIALLY_REUSABLE – сообщает среде выполнения, что данные пакета не должны храниться в промежутках между обращениями к нему. Применяется для снижения требования и памяти, необходимой для одного пользователя, в случае если данные пакета нужны только на протяжении одного вызова, а не всего сеанса.
4. AUTONOMOUS_TRANSACTION – сообщает компилятору о том, что функция, процедура, анонимный блок PL/SQL верхнего уровня, объектный метод или триггер БД выполняется в собственном пространстве транзакций.
Директива компилятора RESTRICT_REFERENCES.Директива компилятора RESTRICT_REFERENCES указывает уровень чистоты и имеет такой синтаксис:
PRAGMA RESTRICT_REFERENCES (имя_программы | DEFAULT, уровень_чистоты);
Ключевое слово DEFAULT применяется ко всем методам объектного типа ко всем программам пакета.
Можно определить от одного до пяти уровней чистоты в любом порядке в списке через запятую. Уровень чистоты указывает, насколько программа или метод свободны от побочных эффектов (перечень возможных побочных эффектов и соответствующих уровней чистоты продолжен в таблице .
Таблица Уровни чистоты и побочные эффекты
Уровень чистоты | Описание | Ограничение |
WNDS | Не пишет в БД | Не выполняет команды INSERT, UPDATE и DELETE |
RNDS | Не читает БД | Не выполняет команду SELECT |
WNPS | Не пишет в пакет | Не изменяет переменные пакета |
RNPS | Не читает пакет | Не читает переменные пакета |
TRUST | Не вводит объявленные ограничения, но благодаря ему компилятор считает, что они выполнены |