Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Стат&Динам_SQL.doc
Скачиваний:
5
Добавлен:
18.11.2018
Размер:
165.89 Кб
Скачать

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).