Назначение встроенного SQL


Назначение встроенного SQL – комбинировать достоинства языков, давая возможность разрабатывать сложные процедурные программы, которые обращаются к БД через SQL, скрывая от пользователя сложности работы с таблицами в процедурном языке. Встраиваемые SQL-операторы могут вставляться статически или динамически. Программа со встроенным SQL представляет собой смесь SQL-операторов и кода на базовом (HOST) языке программирования, поэтому ее нельзя просто скомпилировать с помощью компилятора базового языка.

Особенности создания программ.

1) Прекомпилятор
Исходная программа со встроенным SQL подается на вход прекомпилятора (препроцессора) SQL, представляющего собой специальную программу. Для каждого базового языка, поддерживаемого СУБД, необходим свой прекомпилятор. Препроцессор создает на выходе две файла. Первый представляет собой исходный текст программы, из которого удалены SQL-операторы. Препроцессор заменяет их на вызовы «закрытых» функций СУБД на этапе исполнения. Второй файл содержит копии всех SQL-операторов, встроенных в программу, и часто называется модулем запросов к БД.

2) Компоновка
Первый файл компилируется обычным компилятором базового языка в объектный код. Объектные модули, созданные компилятором, поступают на вход компоновщика. Он связывает их с различными библиотечными и «закрытыми» функциями доступа к БД и на выходе создает исполняемую программу.

3) План выполнения
Второй файл передается в специальную программу BIND. Она исследует, анализирует, проверяет, оптимизирует SQL-операторы и для каждого создает план выполнения. Результатом работы этой программы является объединенный план выполнения всех встроенных SQL-операторов, обычно сохраняющийся в БД под именем прикладной программы. Из-за изменений в БД план выполнения может устареть и при следующем запуске может быть произведена перекомпиляция SQL-операторов и создан новый план выполнения запроса.

3. Особенности встраивания SQL-операторов
Особенность встраивания SQL-операторов внутрь кода на HOST-языке заключается в том, что они предваряются словами-флагами, позволяющими далее разделить текст программы на две части для дальнейшей обработки:

EXEC SQL <SQL-оператор>

4. Использование переменных HOST-языка
Части программы с SQL-операторами и HOST-языки взаимодействуют в основном с помощью переменных, иногда называемых базовыми. SQL-92 определяет эквиваленты SQL-типов переменных для ряда языков.

Правила объявления переменных:

• Должны быть объявлены в ограничителях BEGIN DECLARE SECTION|END DECLARE SECTION с применением синтаксиса HOST-языка. Число таких секций и места их расположения не ограничиваются.
• Должны быть совместимыми по типу данных с их функциями в SQL-операторе.
• Должны иметь значение к тому моменту времени, когда они используются в SQL-операторе, независимо от того, что сам SQL-оператор может присваивать значение.

Пример объявления и использования:

EXEC SQL BEGIN DECLARE SECTION;
Var Id_num :Integer;
SalesPerson :Packed Array[1..10] Of Char;
Loc :Packed Array[1..10] Of Char;
Comm :Real;
EXEC SQL END DECLARE SECTION;

Если указанные переменные содержат значения, которые необходимо вставить в таблицы, то SQL-оператор может иметь следующий вид:

EXEC SQL INSERT INTO SalesPeople VALUES (:Id num, :SalesPerson, :Loc, :Comm);


Комментарии запрещены.




Статистика