Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование БД.docx
Скачиваний:
74
Добавлен:
08.03.2016
Размер:
712.24 Кб
Скачать
    1. Программный (встроенный) sql

Программный (встроенный) SQLпредназначен для того, чтобы встраивать SQL-запросы в прикладную программу, написанную на одном из языков программирования. При этом текст SQL-запроса должен быть либо включен в прикладную программу (если запрос полностью определен заранее), либо формироваться в процессе работы прикладной программы. При использовании программногоSQL:

  • компилятор с алгоритмического языка должен иметь возможность выделения в тексте прикладной программы последовательность операторов SQL;

  • компилятор должен объединять возможности языка программирования высокого уровня (переменные, ветвления, циклы) и возможности SQL (запросы на языке, близком к естественному).

Одна из основных идей программного SQL:часть действий по обработке запроса необходимо выполнять один раз, сохранять результат в некотором виде, а потом использовать столько раз, сколько необходимо.

Таким образом, программный SQL позволяет:

  1. использовать операторы интерактивного SQL в тексте программына языке программирования высокого уровня;

  2. наряду с операторами интерактивного SQL использовать новые специальные конструкции, дополняющие SQLи увеличивающие его возможности;

  3. для передачи параметров в запрос использовать в тексте запроса переменные, объявленные в программе;

  4. возвращать в программу результаты запроса;

  5. осуществлять компиляцию запросов совместно с программой, обеспечивая впоследствии согласованную работу программы и СУБД. Заранее (на этапе компиляции) выполнять действия по анализу и оптимизации запросов, экономя время, затрачиваемое на этапе выполнения программы.

Существуют два варианта встраивания запросов на языке SQL в прикладную программу (программного SQL): статический SQLидинамический SQL. Рассмотрим соответствующие варианты.

    1. Статический sql

Статический SQL – разновидность программного SQL, предназначенная для встраивания SQL-операторов в текст программы на языке программирования высокого уровня.

Основная особенность статического SQL определяется его названием: встраиваемые запросы должны быть четко определены на стадии написания прикладной программы.

Рассмотрим два основных этапа, связанных с работой статического SQL, – компиляция программы и работа (выполнение) программы. 

Схема трансляции и сборки программы выглядит следующим образом (рисунок 0).

  1. Программа, включающая операторы языка программирования высокого уровня (ЯПВУ) вместе с операторами SQL, подается на вход специального препроцессора, который выделяет из нее части, связанные с SQL.

  2. Вместо инструкций встроенного SQL препроцессор подставляет вызовы специальных функций СУБД. Библиотеки таких функций для связи с языками программирования существуют для всех распространенных серверных СУБД.

  3. Сами инструкции SQL препроцессор выделяет в отдельный файл.

  4. Программа поступает на вход обычного компилятора языка программирования, после чего получаются объектные модули. Далее эти объектные модули вместе с библиотеками СУБД собираются в один исполняемый модуль – приложение.

  5. Наряду с этими операциями происходит работа с файлом, содержащим SQL-инструкции. В литературе этот модуль часто носит название "модуль запросов к базе данных" (Database Request Module, DBRM). Обработку этого модуля осуществляет специальная утилита, которая обычно носит название BIND. Для каждой инструкции SQL утилита выполняет следующие действия:

    1. осуществляет синтаксический анализ запроса (проверяет, является ли запрос корректным);

    2. проверяет, существуют ли в базе данных те объекты, на которые ссылается запрос;

    3. выбирает, каким образом осуществлять выполнение запроса – план выполнения запроса.

  6. Все планы выполнения запросов сохраняются в СУБД для последующего использования.

Рисунок 0 – Схема компиляции программы с встроенными инструкциями статического SQL

Схема выполнения программы выглядит следующим образом (рисунок 0).

Программа запускается на выполнение обычным образом. При необходимости выполнить запрос программой осуществляется вызов специальной функции СУБД, которая отыскивает уже сформированный ранее план выполнения запроса. СУБД выполняет запрос в соответствии с выбранным планом. Результат выполнения запроса поступает в приложение.

Рисунок 0 – Схема выполнения программы с встроенными инструкциями статического SQL

Для реализации вышеуказанных схем статический SQL должен содержать дополнительные операторы (по сравнению с интерактивным SQL), позволяющие компилятору выделить в тексте программы SQL-запросы, объявлять используемые в этих запросах таблицы, объявлять переменные для обработки ошибок, как результатов реализации запросов и т. п. Однако, их рассмотрение выходит за рамки данного курса. 

Использование описанной выше схемы компиляции/сборки/выполнения программы позволяет:

  1. использовать SQL совместно с программой на языке программирования высокого уровня;

  2. заранее осуществлять проверку синтаксиса запросов и оптимизацию их выполнения (выбор плана). Понятно, что проверка синтаксиса выполняется быстро, но выбор плана выполнения – весьма трудоемкая процедура. Тот факт, что она выполняется один раз на этапе компиляции, позволяет говорить о существенном уменьшении накладных расходов. 

Однако, статическая разновидность программного SQL имеет некоторые существенные ограничения. Так, переменные в запросах могут использоваться только в тех местах, где в запросах обычно стоят константы. Например, нельзя задавать имя таблицы, из которой производится выборка, а также названия столбцов, как параметр. В связи с этим при использовании статического варианта вложенного (программного) SQL необходимо на этапе написания программы точно знать состав запросов, которые необходимо будет выполнять в прикладной программе. Во многих случаях это ограничение является существенным. Для его устранения была введена новая разновидность программного SQL – динамический SQL. Рассмотрим кратко основные идеи динамического SQL.