Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Переменные во встроенном SQL




CТАТИЧЕСКИЙ И ДИНАМИЧЕСКИЙ SQL

Структурированный язык запросов SQL реализуется в следующих формах:

  • интерактивный SQL;
  • статический SQL;
  • динамический SQL;
  • встроенный SQL.

Интерактивный SQL позволяет конечному пользователю в интерактивном режиме выполнять SQL-операторы. Все СУБД предоставляют инструментальные средства для работы с базой данных в интерактивном режиме. Например, СУБД Oracle включает утилиту SQL*Plus, позволяющую в строчном режиме выполнять большинство SQL-операторов.

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

Динамический SQL позволяет формировать операторы SQL во время выполнения программы.

Встроенный SQL позволяет включать операторы SQL в код программы на другом языке программирования (например, С++).

Статический SQL

Статический SQL встраивается в виде препроцессорной обработки в традиционные языки программирования.

Операторы SQL обрабатываются прекомпилятором.

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

Операторы:

DECLARE CURSOR определяет запрос

OPEN и CLOSE начинает и завершает процесс обработки.

Приведем пример приложения, использующего статический SQL:

main()// Включение структуры для обработки ошибок{ EXEC SQL INCLUDE SQLCA;// Объявление хост-переменных // (связи и INTO-переменные) EXEC SQL BEGIN DECLARE SECTION; int NumIndID; int NumID; // Эти переменные // указываются после символа:char Sal[10]; EXEC SQL END DECLARE SECTION;// Обработка ошибок EXEC SQL WHENEVER SQLERROR GOTO err_1; EXEC SQL WHENEVER NOT FOUND GOTO err_2;// Запрос параметровprintf ("Type individual number: ");scanf("%d",&NumIndID);// Выполнение SQL запросаEXEC SQL SELECT NumID, Sal FROM tbl1 WHERE NumIndID =: NumIndID INTO:NumID,:Sal;// Отображение результата std::cout<< "Number: "<<NumID; exit(0);err_1: std::cout<<'' SQLERROR''; exit(1);err_2: std::cout<<'' NOT FOUND"; exit(1); }

Типы данных преобразуются автоматически для каждой СУБД.

СУБД возвращает информацию об ошибках через специальные переменные: структуру SQL Communication AREA (SQLCA), переменную SQLSTATE или SQLCODE.

Теперь рассмотрим более подробно синтаксис языка встроенного SQL.

Фактически, чтобы приложение могло обращаться к базе данных, существуют четыре основных варианта:

  • встраивание в код некоторого языка программирования SQL-операторов (статический SQL);
  • формирование в процессе выполнения программы на некотором языке программирования кода SQL-операторов и дальнейшего их выполнения (динамический SQL);
  • вызов из программ, выполненных на других языках программирования, SQL-модулей, которые представляют собой код на языке SQL;
  • использование API (Application Programming Interface), позволяющего реализовывать работу с базой данных через предоставляемый набор функций. API может быть целевым, предоставленным производителем коммерческой СУБД для работы именно с этой базой данных, или межплатформенным, реализующим унифицированные средства доступа к СУБД различных производителей. К такому API относятся ODBC (Open DataBase Connectivity) и SQL/CLI (SQL Call Level Interface).

Основная программа

Основной программой, или HOST-программой, называется программа, в которую встраиваются SQL-операторы.

Встраиваемый SQL-оператор указывается после фразы EXEC SQL.

Стандартом SQL-92 предусмотрена возможность встраивания SQL-операторов в следующие языки программирования: C, Pascal, Java (SQLJ), Ada, Cobol, Fortran, PL/1, M.

На следующей схеме изображен процесс выполнения программы, содержащей операторы встроенного SQL.


Рис. 9.1. Процесс выполнения программы, содержащей операторы встроенного SQL.

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

Таким образом, выполнение SQL-оператора было последовательно заменено на вызов внешней процедуры, которая затем была связана с библиотекой СУБД. Поэтому на этапе выполнения библиотечные вызовы будут передаваться непосредственно СУБД.

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

Переменные во встроенном SQL

Во встроенном SQL можно использовать переменные основного языка программирования. Они применяются:

  • в выражениях;
  • как INTO-переменные;
  • как переменные связи (bind-переменные);
  • как индикаторные переменные.

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

Перед тем как использовать такую переменную, она должна быть объявлена в разделе объявления SQL-переменных. Объявление SQL-переменных указывается между парой операторов EXEC SQL BEGIN DECLARE SECTION; и EXEC SQL END DECLARE SECTION;

В основной программе может быть произвольное число разделов с объявляемыми переменными, но они могут быть указаны только в тех местах, в которых синтаксис основного языка допускает выполнять объявление переменных. Внутри операторов EXEC SQL BEGIN DECLARE SECTION и EXEC SQL END DECLARE SECTION синтаксис объявления переменных также соответствует языку программирования, в который встраиваются SQL-операторы.

Например:

// Код для объявления переменных на языке С++: EXEC SQL BEGIN DECLARE SECTION; int var1; int var2; char var3[10]; EXEC SQL END DECLARE SECTION;// Код для объявления переменных на // языке Pascal: EXEC SQL BEGIN DECLARE SECTION var var1: integer; var2: integer; var3: array (1..10) of char; EXEC SQL END DECLARE SECTION;
Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...