DeepEdit!

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

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

Использование SQL в PL/SQL

Из всех SQL-операторов в программах PL/SQL можно применять лишь операторы DML и операторы управления транзакциями. Операторы DDL использовать нельзя. Оператор EXPLAIN PLAN (объяснить план) - хотя он и относится к категории        — применять также не разрешается. Чтобы пояснить смысл этих ограничений, рассмотрим принципы со­здания программ PL/SQL.
В любом языке программирования привязка переменных может быть либо ранней, либо поздней. Привязка (binding) переменной — это процесс указания области памяти, соответствующей идентификатору программы. В PL/SQL в процесс привязки входит также проверка базы данных на на­личие полномочий, позволяющих обращаться к объектам схем. В том языке, где используется ранняя привязка (early binding), этот процесс осу­ществляется на этапе компиляции программы, а в языке, где применяет­ся поздняя привязка (late binding), она откладывается до этапа выполнения программы. Ранняя привязка означает, что компиляция программы будет занимать большее время (так как при этом нужно привязывать перемен­ные), однако выполняться такая программа будет быстрее, потому что привязка уже завершена. Поздняя привязка сокращает время компиля­ции, но увеличивает время выполнения программы.
При разработке PL/SQL было принято решение об использовании ранней привязки, чтобы к моменту выполнения блока объекты базы дан­ных были уже проверены и чтобы блок мог быть выполнен максимально быстро. Это вполне оправданно, поскольку блоки PL/SQL можно хранить в базе данных как процедуры, функции, модули и триггеры. Та­кие объекты хранятся в скомпилированном виде, т.е. при необходимости их можно загрузить из базы данных и выполнить (см. главы 9 —' 11). Имен­но поэтому нельзя использовать операторы DDL. Оператор DDL модифи­цирует объект базы данных, следовательно, полномочия на объект должны быть подтверждены вновь. Процесс подтверждения полномочий требует привязки идентификаторов, а это уже было сделано во время компиляции.
Для иллюстрации вышесказанного рассмотрим гипотетический блок PL/SQL:
Чтобы скомпилировать этот блок, нужно привязать идентификатор temp_table. В процессе привязки будет проверяться, существует ли указан­ная таблица. Но пока блок не выполнен, таблица не существует. В резуль­тате данный блок не может быть скомпилирован, ни тем более выполнен.
Операторы DML и операторы управления транзакциями — это SQL-операторы, с помощью которых нельзя модифицировать объекты схем или полномочия на объекты схем, поэтому в PL/SQL можно использо­вать только эти SQL-операторы.

 









jAntivirus