DeepEdit!

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

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

Динамический PL/SQL

Динамический PL/SQL предоставляет ряд интереснейших перспективных возможностей по разработке кода. Только подумайте: в то время как пользователь работает с вашим приложением, вы (с помощью NDS) можете выполнять следующие действия:
Создавать программу, в том числе и пакет, содержащий глобальные структуры данных.
Получать (и изменять) значения глобальных переменных по именам.
Вызывать функции и процедуры, чьи имена не известны на момент компиляции.
При работе с динамическими блоками PL/SQL и NDS следует помнить следующее:
Динамическая строка должна являться корректным PL/SQL-блоком. Она должна начинаться с ключевого слова DECLARE или BEGIN и заканчиваться оператором END и точкой с запятой. В отсутствие завершающей точки с запятой строка не будет восприниматься как PL/SQL-код.
В динамическом блоке доступны только глобальные элементы PL/ SQL (отдельные функции и процедуры и элементы, определенные в спецификации пакета). Динамические блоки PL/SQL исполняются вне локального внешнего блока.
Ошибки, возникающие в динамическом блоке PL/SQL, могут перехватываться и обрабатываться локальным блоком, в котором оператором EXECUTE IMMEDIATE была запущена данная строка.
Рассмотрим пример использования динамического PL/SQL. Речь пойдет о реальной истории. Я работал консультантом в страховой компании в Чикаго, и меня попросили посмотреть, можно ли что-то сделать с одной программой, создающей множество проблем. Она была очень большой, и размер ее продолжал расти - скоро можно было ожидать трудностей уже на этапе компиляции. К моему удивлению оказалось, что эта программа выглядит следующим образом:

Каждому значению номера строки (line) соответствовала специальная программа process_line, которая обрабатывала указанные условия. По мере добавления страховой компанией новых условий в свой договор обслуживания программа все росла и росла. Абсолютно немасштаби- руемый подход!
Чтобы избежать такого беспорядка, программист должен найти повторяющиеся элементы кода. Выявив такое повторение, следует создать программу для многократного использования и заключить в нее повторяющийся код (шаблон) или попытаться записать его с помощью конструкции динамического SQL.
Мне удалось заменить эти тысячи строк кода следующим фрагментом:

Тысячи строк превратились в один исполняемый оператор! Конечно, далеко не всегда поиск шаблона и его преобразование в динамический SQL будет таким очевидным. Но потенциальная выгода просто огромна!
Заключение: от основ к применению PL/SQL
Прочитав эту главу, вы получили достаточно серьезные базовые знания по языку PL/SQL. Познакомившись с основами (и, я надеюсь, имея некоторый опыт по созданию реальных программ PL/SQL), вы теперь можете переходить к главам, в которых описана специфическая функциональность PL/SQL, необходимая для выполнения работы администратора баз данных.
 









jAntivirus