Как компилируется и компонуется прикладная программа при использовании динамического sql
Перейти к содержимому

Как компилируется и компонуется прикладная программа при использовании динамического sql

  • автор:

Лекция 13.Использование sql в прикладных программах

Задача 2. Как происходит работа с программой при использовании статического SQL?

Вариант 1.

Как должен выглядеть запрос на языке в прикладной программе в этом случае?

��+ должно быть указано фактическое имя таблицы

��+ должны быть указаны фактические имена атрибутов

��+ переменные могут использоваться в запросах только на месте констант

Задача 3. Характеристика команд статического SQL

Вариант 1.

Какие Операторы Могут Быть Использованы в статическом SQL?

��+ DECLARE TABLE

Задача 4. Особенности динамического SQL по сравнению со статическим ?

Вариант 1.

Как должен выглядеть запрос на языке в прикладной программе в этом случае?

��+ запрос формируется во время работы прикладной программы

��+ имя таблицы может быть указано как параметр

��+ имена атрибутов могут быть указаны как параметры

��+ в запросах могут широко использоваться переменные

Задача 5. Характеристика команд динамического SQL

Вариант 1.

Какие операторы могут быть использованы в динамическом SQL?

��+ DECLARE CURSOR

Задача 6. Характеристика интерфейсов программирования приложений (API).

Вариант 1.

Чем удобны интерфейсы программирования приложений?

��+ не требуется изучать специальные инструкции статического и динамического SQL

��+ соответствующий подход может применяться с использованием разных языков программирования

Задача 7. Что такое протокол ODBC?

Вариант 1.

Какова цель создания протокола ODBC?

��+ создание универсального интерфейса с СУБД на уровне конкретной операционной системы

Задача 8. Что такое протокол JDBC?

Вариант 1.

Какова цель создания протокола JDBC?

��+ создание библиотеки функций для обеспечения связи прикладной программы и СУБД

��+ создание интерфейса программы, написанной на определенном алгоритмическом языке, с СУБД

Задача 1. Что такое программный SQL?

Вариант 2.

Какие специальные конструкции (дополнительные операторы) должны быть в программном SQL?

��+ оператор, определяющий начало запроса на языке SQL

��+ оператор, определяющий окончание запроса на языке SQL

��+ операторы, указывающие дополнительные переменные для обработки результатов запроса

Задача 2. Как происходит работа с программой при использовании статического SQL?

Вариант 2.

Как компилируется и компонуется прикладная программа с встроенным запросом на языке SQL?

��+ текст запроса компилируется отдельно

��+ в модуль прикладной программы вставляется вызов функции СУБД

Задача 3. Характеристика команд статического SQL

Вариант 2.

Какие специальные операторы могут быть использованы в статическом SQL?

��+ DECLARE TABLE

��+ GET DIAGNOSTIC

��+ DECLARE CURSOR

Задача 4. Особенности динамического SQL по сравнению со статическим ?

Вариант 2.

Как компилируется и компонуется прикладная программа при использовании динамического SQL?

��+ в модуль прикладной программы вставляется вызов функции СУБД

��+ текст запроса компилируется столько раз, сколько раз запрос формируется прикладной программой

Задача 5. Характеристика команд динамического SQL

Вариант 2.

Какие специальные операторы могут быть использованы в динамическом SQL?

��+ DECLARE CURSOR

Задача 6. Характеристика интерфейсов программирования приложений (API).

Вариант 2.

Как компилируется прикладная программа, использующая интерфейсы программирования приложений?

��+ прикладная программа компилируется вместе с вызовом функций библиотек

��+ в модуль прикладной программы вставляется вызов функции библиотеки

Задача 7. Что такое протокол ODBC?

Вариант 2.

Что такое драйверы ODBC?

��+ программа- интерфейс между вызовом функции API и программой, реализующей функции конкретной СУБД

Задача 8. Что такое протокол JDBC?

Вариант 2.

Что такое драйверы JDBC?

��+ программа-интерфейс между вызовом функции API и программой, реализующей функции конкретной СУБД

Задача 1. Что такое программный SQL?

Вариант 3.

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

��+ запросы могут выполняться с опережением

��+ запросы компилируются один раз

��+ заранее выполняются действия по анализу и компиляции запросов

��+ компьютер не ожидает ответных действий пользователя

Задача 2. Как происходит работа с программой при использовании статического SQL?

Вариант 3.

Как происходит выполнение прикладной программы?

��+ переход из прикладной программы к запросу осуществляется вызовом специальной функции

��+ при неоднократном выполнении одного и того же запроса используется один и тот же программный модуль

Задача 3. Характеристика команд статического SQL

Вариант 3.

Какие специальные операторы могут быть использованы в статическом SQL для указания начала и конца SQL- запроса?

��+ ; (точка с запятой)

Задача 4. Особенности динамического SQL по сравнению со статическим ?

Вариант 3.

Как происходит выполнение прикладной программы при использовании динамического SQL?

��+ переход из прикладной программы к запросу осуществляется вызовом специальной функции

��+ при каждом выполнении одного и того же запроса используются разные программные модули

Задача 5. Характеристика команд динамического SQL

Вариант 3.

Какие специальные операторы могут быть использованы в динамическом SQL для подготовки и выполнения SQL- запроса?

Задача 6. Характеристика интерфейсов программирования приложений (API).

Вариант 3.

Как выполняется программа с использованием интерфейсов программирования приложений?

��+ параметрами функций библиотеки интерфейсов программирования приложений являются тексты SQL- запросов

��+ переход из прикладной программы к запросу осуществляется вызовом специальной функции

��+ при неоднократном выполнении одного и того же запроса используется один и тот же программный модуль

Задача 7. Что такое протокол ODBC?

Вариант 3.

Для чего в этом протоколе используются драйверы?

��+ для создания возможности использования этого протокола в разных СУБД

Задача 8. Что такое протокол JDBC?

Вариант 3.

Для чего в этом протоколе используются драйверы?

��+ для создания возможности использования этого протокола в разных СУБД

Использование SQL в прикладном программировании (стр. 1 из 3)

Накопленная информация в современных информационных технологиях хранится и организованна в базах данных. Эти базы данных создаются и работают с помощью систем управления базами данных (СУБД).

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

Пользоваться базами данных из разных уголков мира, с разных архитектур ЭВМ по сети можно посредствами одного стандартного языка манипулирования данными. Разработанный в 1974 году язык SQL фирмой IBM для экспериментальной реляционной СУБД System R стал стандартом (сначала де-факто), благодаря распространению двух СУБД (той же фирмы) – SQL/DS (1981 год) и DB2 (1983 год), а признание SQL международным стандартом произошло в 1987 году.

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

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

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

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

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

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

В третьей главе будет рассмотрен динамический SQL в Oracle V.6.

1. Язык модулей и встроенный SQL

В стандарте SQL/89 определены два способа взаимодействия с БД из прикладной программы, написанной на традиционном языке программирования.

Первый способ состоит в том, что все операторы SQL, с которыми может работать данная прикладная программа, собраны в один модуль и оформлены как процедуры этого модуля. Для этого SQL/89 содержит специальный подъязык — язык модулей. При использовании такого способа взаимодействия с БД прикладная программа содержит вызовы процедур модуля SQL с передачей им фактических параметров и получением ответных параметров.

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

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

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

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

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

1.1. Язык модулей

Структура модуля SQL в стандарте SQL/89 определяется следующими синтаксическими правилами:

<module name clause>

<module autorization clause>

<module name clause> ::= MODULE [<module name>]

<language clause> ::= LANGUAGE

<module autorization clause> ::=

AUTHORIZATION <module autorization identifier>

<module autorization identifier> ::= <autorization identifier>

Существенно, что каждый модуль SQL ориентирован на использование в программах, написанных на конкретном языке программирования. Если в модуле присутствуют процедуры работы с курсорами, то все курсоры должны быть специфицированы в начале модуля. Заметим, что объявление курсора не погружается в какую-либо процедуру, поскольку это описательный, а не выполняемый оператор SQL.

Процедуры в модуле SQL определяются следующими синтаксическими конструкциями:

В. И. Швецов Базы данных

Единственный в мире Музей Смайликов

Самая яркая достопримечательность Крыма
Скачать 8.45 Mb.

ODBC (Open Database Connectivity – открытый доступ к базам данных) – разработанный компанией Microsoft универсальный интерфейс программирования приложений для доступа к базам данных [1].

Основной целью разработки протокола ODBC считается стандартизация механизмов взаимодействия с различными СУБД. Основная проблема, связанная с разработкой приложений, взаимодействующих с базами данных на основе специальных SQL API, состояла в том, что каждая СУБД имела собственный программный интерфейс доступа, каждый из них имел свои особенности и функционировал не совсем так, как другие. В связи с этим разработка приложения существенно зависела от используемой СУБД. Компания Microsoft сделала важный шаг для решения этой проблемы. Основная идея заключалась в разработке универсального интерфейса на уровне семейства операционных систем Windows, который мог бы быть поддержан в разных СУБД.

  • интерфейс вызовов функцийODBC: это так называемый верхний уровень ODBC, содержащий API, который и используется непосредственно приложениями. Данный API реализован в виде библиотеки динамической компоновки Dll и входит в состав операционной системы Windows;
  • драйверыODBC: это так называемый нижний уровень ODBC, содержащий набор драйверов для СУБД, поддерживающих протокол ODBC. В рамках технологии для каждой СУБД может быть разработан соответствующий ODBC-драйвер, который будет являться промежуточным звеном между прикладной программой и СУБД, транслируя вызовы функций СУБД в вызовы внутренних специализированных функций СУБД. Таким образом решается проблема стандартизации. Для многих современных СУБД существуют специализированные драйверы ODBC, отдельно устанавливаемые в операционную систему;
  • диспетчер драйверовODBC: данный программный механизм представляет средний уровень ODBC, управляя процессом загрузки необходимых драйверов.

Рис. 13.5. Схема выполнения программы с использованием протокола ODBC
для доступа к данным
Перечень некоторых базисных функций ODBC API приводится в следующей таблице.
Таблица 13.3.

Протокол JDBC

JDBC (Java Database Connectivity) представляет собой API для выполнения SQL-запросов к базам данных из программ, написанных на языке Java [1].

Рассмотрим основные принципы JDBC.

С развитием глобальных сетей, в частности Интернета, и всех сопутствующих технологий стали появляться новые языки, специально предназначенные для работы в новых условиях. Одним из таких языков является язык программирования Java. В настоящее время Интернет-приложения занимают существенное место на рынке, работая в рамках 2-, 3- и многозвенной архитектуры. При этом значение языка Java как средства создания приложений, работающих с базами данных, существенно возрастает. Именно это и явилось одной из основных причин разработки нового программного интерфейса – JDBC. Первоначально интерфейс JDBC был разработан компанией Sun Microsystems, в настоящий момент этот API поддерживается всеми ведущими коммерческими СУБД.

  • диспетчер драйверов (для подключения к разным СУБД);
  • механизм управления сеансами (для одновременной работы с несколькими СУБД);
  • механизм передачи инструкций SQL на выполнение в СУБД;
  • механизм работы с курсорами (для передачи результатов выполнения запросов из СУБД в приложение).

Версия JDBC 2.0 содержит существенные отличия. Так, вследствие увеличения возможностей интерфейса было проведено его идеологическое разделение на две основные части: Core API (основные возможности) и Extensions API (так называемые расширения).

  • Пакетные операции. Программа на Java может осуществить обновление базы данных в пакетном режиме, т.е. одна функция JDBC может добавить в базу данных несколько записей, что положительно сказывается на производительности программ.
  • Курсоры с произвольным доступом. В JDBC 2.0 существует средство, позволяющее перемещаться по результатам запроса произвольным образом.
  • Обновляемые курсоры. В JDBC 2.0 курсоры, наряду с функцией возврата результата запроса, используются и при обновлении базы данных. Обновления производятся при добавлении или изменении одной из строк в результатах запроса.
  • Организация связного пула. Несколько программ на языке Java могут пользоваться совместным доступом к базе данных, уменьшая затраты на подключения к базе данных и отключения от нее. Данный перечень можно продолжить (распределенные транзакции, поддержка JNDI и т.д.).

Библиотека DB-Library

Библиотека DB-Library реализует интерфейс программирования приложений для совместной работы с широко распространенной СУБД Microsoft SQL Server. Данная библиотека является весьма обширной и содержит более 100 функций. Основными из них являются:

dblogin(); dbopen() – подключение к БД;

dbopen(); dbexit() – установка/разрыв соединения с БД;

dbcmd() – передача инструкции (пакета инструкций) SQL в СУБД в текстовом виде;

dbSQLexec() – требование к СУБД выполнить текущий пакет инструкций;

dbcancel() – прекращение выполнения пакета инструкций SQL;

dbresults() – получение результатов выполнения очередной инструкции SQL в текущем пакете;

dbbind(), dbdata(), dbnextrow(), dbnumcols(), dbdatlen() и др. – обработка результатов запросов на выборку данных.

  • при помощи указанных выше функций (dblogin(), dbopen()) прикладная программа формирует сведение об авторизации и пытается установить соединение с СУБД;
  • при помощи СУБД программа открывает конкретную базу данных, с которой будет происходить работа (dbopen());
  • при помощи специальной функции (dbcmd()) программа передает в СУБД текст SQL-инструкции, которую далее необходимо будет выполнить; в библиотеке DB-Library поддерживается так называемый пакетный режим работы. Данный режим подразумевает возможность создания пакетов инструкций. Так, вызывая функцию dbcmd() несколько раз, вы можете передать в СУБД текст нескольких команд SQL, которые впоследствии будут выполнены как одна команда;
  • используя функцию dbSQLexec(), программа вызывает выполнение инструкций, переданных ранее при помощи вызовов функций dbcmd();
  • вызывая функцию dbresults(), программа может определить, удалось ли СУБД выполнить очередную инструкцию (как правило, число вызовов dbresults() соответствует числу инструкций в очередном пакете);
  • в случае если мы имеем дело с запросом, возвращающим набор строк в качестве результата (запросом на выборку), программа при помощи вызовов функции dbbind() осуществляет связывание каждого поля результатов запроса с некоторой областью оперативной памяти. Далее при помощи функции dbnextrow() программа выполняет переход к следующей строке результатов запроса, что приводит к помещению в буфер новых данных;
  • при помощи функции dbexit() программа разрывает соединение с базой данных. Библиотека DB-Library представляет собой большой и сложный механизм. Так, в библиотеке предусмотрены специальные механизмы обработки ошибок, разные способы передачи результатов выполнения запросов в прикладную программу и т.д.

Вариант 1.

Особенности программного SQL по сравнению с интерактивным
ð используются принципиально другие операторы

ð пользователь пишет программу на языке SQL

ð+ могут использоваться те же операторы SQL

ð+ запрос на языке SQL встраивается в программу на алгоритмическом языке

Вариант 2.

Какие специальные конструкции (дополнительные операторы) должны быть в программном SQL?
ð оператор цикла

ð оператор ветвления

ð+ оператор, определяющий начало запроса на языке SQL

ð+ оператор, определяющий окончание запроса на языке SQL

ð+ операторы, указывающие дополнительные переменные для обработки результатов запроса

ð операторы, определяющие передачу управления от программы на алгоритмическом языке программе на языке SQL

Вариант 3.

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

ð+ запросы могут выполняться с опережением

ð+ заранее выполняются действия по анализу и компиляции запросов

ð+ компьютер не ожидает ответных действий пользователя
Задача 2. Как происходит работа с программой при использовании статического SQL?

Вариант 1.

Как должен выглядеть запрос на языке в прикладной программе в этом случае?
ð+ должно быть указано фактическое имя таблицы

ð имя таблицы может быть указано как параметр

ð+ должны быть указаны фактические имена атрибутов

ð имена атрибутов могут быть указаны как параметры

ð в запросах могут широко использоваться переменные

Вариант 2.

Как компилируется и компонуется прикладная программа с встроенным запросом на языке SQL?
ð прикладная программа компилируется вместе с текстом запроса

ð+ текст запроса компилируется отдельно

ð+ в модуль прикладной программы вставляется вызов функции СУБД

Вариант 3.

Как происходит выполнение прикладной программы?
ð+ переход из прикладной программы к запросу осуществляется вызовом специальной функции

ð скомпилированная вместе с текстом запроса прикладная программа автоматически выполняется

ð+ при неоднократном выполнении одного и того же запроса используется один и тот же программный модуль

ð при каждом выполнении одного и того же запроса используются разные программные модули

Задача 3. Характеристика команд статического SQL

Вариант 1.

Какие операторы могут быть использованы в статическом SQL?
ð+ SELECT

ð+ DELETE

ð+ INSERT

ð+ DECLARE TABLE

ð+ EXEC SQL

ð+ OPEN

Вариант 2.

Какие специальные операторы могут быть использованы в статическом SQL?
ð SELECT

ð+ DECLARE TABLE

ð+ EXEC SQL

ð+ GET DIAGNOSTIC

ð+ DECLARE CURSOR
Вариант 3.

Какие специальные операторы могут быть использованы в статическом SQL для указания начала и конца SQL- запроса?
ð DECLARE TABLE

ð+ EXEC SQL

ð GET DIAGNOSTIC

ð+ ; (точка с запятой)

ð END DECLARE

Задача 4. Особенности динамического SQL по сравнению со статическим ?

Вариант 1.

Как должен выглядеть запрос на языке в прикладной программе в этом случае?
ð запрос должен быть определен в тексте прикладной программы

ð+ запрос формируется во время работы прикладной программы

ð+ имя таблицы может быть указано как параметр

ð+ имена атрибутов могут быть указаны как параметры

ð+ в запросах могут широко использоваться переменные

ð переменные могут использоваться в запросах только на месте констант

Вариант 2.

Как компилируется и компонуется прикладная программа при использовании динамического SQL?
ð прикладная программа компилируется вместе с текстом запроса

ð текст запроса компилируется отдельно один раз

ð сформированный модуль запроса вставляется в модуль прикладной программы

ð+ в модуль прикладной программы вставляется вызов функции СУБД

ð+ текст запроса компилируется столько раз, сколько раз запрос формируется прикладной программой

Вариант 3.

Как происходит выполнение прикладной программы при использовании динамического SQL?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *