DeepEdit!

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

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

Хранимые подпрограммы и словарь данных

Если подпрограмма создается при помощи команды CREATE OR REPLACE, она сохраняется в словаре данных, причем хранится не только исходный текст подпрограммы, но и скомпилированная форма, которая называется ркодом (p-code). В р- коде содержатся все обработанные ссыл­ки подпрограммы, а исходный текст преобразуется в вид, удобный для чтения системой поддержки PL/SQL. При вызове подпрограммы р-код считывается с диска и выполняется. Считанный р-код сохраняется в раз­деляемой области пула системной глобальной области (SGA), где при не­обходимости к нему могут обращаться несколько пользователей. Как и все другие компоненты разделяемого пула, р-код удаляется из него с тече­нием времени в соответствии с алгоритмом LRU.
Р-код аналогичен объектному коду, генерируемому компиляторами дру­гих языков третьего поколения, или байт-коду Java, который считывается исполняющей системой Java. В р-коде содержатся обработанные ссылки на
объекты (это свойство раннего связывания), поэтому выполнение р-кода является сравнительно недорогой (нересурсоемкой) операцией.
Внимание
-   Oracle9 позволяет компилировать подпрограмму в код операционной системы, а не в р-код (см. ниже).
Информацию о подпрограмме можно получить при помощи различных представлений словаря данных. В представлении содержатся сведения обо всех объектах, принадлежащих текущему пользователю, в том числе и о хранимых подпрограммах. Здесь можно узнать о том, когда
объект был создан и последний раз модифицирован, каков тип объекта (таблица, последовательность, функция и т.д.), а также о достоверности объекта. В состав представления user_source входит исходный програм­мный текст объекта, а в состав представления user_errors - информация об ошибках компиляции.
Рассмотрим следующую простую процедуру:
После создания процедуры в представлении user_objects можно уз­нать о том, что она достоверна (valid), а в представлении user_source — ка­ков ее исходный текст. В user_errors нет сообщений, так как процедура была успешно скомпилирована (рис. 10.1).

Теперь изменим текст процедуры Simple так, чтобы возникла ошибка при ее компиляции (пропустим точку с запятой):
Проанализируем те же три представления словаря данных (рис. 10.2). В user source по-прежнему содержится исходный текст процедуры, одна­ко в user_0bjects ее состояние имеет значение INVALID (недостоверное), аиве^еггогвпоказываетошибкукомпиляцииРЕЗ-Ш.
Совет
В SQL*Plus можно обращаться к user_errors и форматировать результаты для удобства чтения при помощи команды SHOW ERRORS (показать ошибки). Она возвращает информацию об ошибках для последнего созданного объекта. Использовать SHOW ERRORS можно после получения сообщения "Warning: Procedure created with compilation errors"(Внимание!Процедура создана с ошибками компиляции.). Более подробно об этом рассказывается в главе 2.
Недостоверные хранимые подпрограммы заносятся в базу данных. Одна­ко до устранения ошибок их нельзя вызывать. При вызове недостоверной процедуры возвращается ошибка PLS-905:
Словарь данных более подробно рассматривается в приложении С. Компиляция в код системы
Подобно байт-коду Java, р-код интерпретируется и исполняется системой поддержки PL/SQL. Преимуществом такого подхода является то, что один и тот же код PL/SQL может работать в разных базах данных и, воз­можно, на различных платформах. Однако из-за того что р-код интерпре­тируется, он работает медленнее, чем программа, скомпилированная в код операционной системы.
Огас1е9г позволяет компилировать PL/SQL-код в код системы. При этом создается разделяемая библиотека, которая выполняется Oracle в фоновом режиме. Для осуществления такой компиляции вы должны уста­новить на своем компьютере компилятор С. PL/SQL-компилятор будет
генерировать код С, который затем будет компилироваться в библиотеку.
Более подробную информацию можно получить в документации Oracle.
 









jAntivirus