|
Программирование >> Sql: полное руководство
g Интерфейс программирования приложений. При данном подходе программа взаимодействует с СУБД посредством совокупности функций, называемой интерфейсом програлширования приложений (application program interface - API). Вызывая API-функции, профамма передает в СУБД инструкции SQL и получает обратно результаты запросов. В этом случае не требуется специального препроцессора. Встроенный SQL использовался в первых реляционных СУБД компании IBM; в gO-x годах этот подход был принят также в большинстве коммерческих реляционных СУБД. Первоначально в стандарте ANSI/ISO для профаммного SQL был определен отдельный модульный язык. Но в 1989 году стандарт был расширен; в него вошло определение встроенного SQL для таких языков программирования, как Ada, С, COBOL, FORTRAN, Pascal и PL/I. Эта спецификация поддерживается и в SQL2. Параллельно с развитием встроенного SQL поставщики некоторых СУБД в 80-х годах занялись разработкой интерфейсов API-функций СУБД Sybase, появившаяся в то время на рынке, предлагала только такой интерфейс и не поддерживала встроенный SQL. Созданная на ее основе СУБД SQL Server компании Microsoft придерживалась такой же идеологии. Вскоре после появления SQL Server компания Microsoft представила протокол ODBC (Open Database Connectivity) - еще один интерфейс вызовов функций, в целом основанный на программном интерфейсе SQL Server, но обеспечивающий независимость от конкретной СУБД и разрешающий доступ к нескольким СУБД посредством единого набора функций. Не так давно появился новый протокол JDBC (Java Database Connectivity), предназначенный для обеспечения доступа к реляционным базам данных из профамм, написанных на языке Java. В целом сегодня активно используются оба подхода. В табл. 17.1 перечислены ведущие реляционные СУБД и указано, какие интерфейсы профаммирования они поддерживают.
Базовая разновидность встроенного SQL, называемая статическим SQL, рассматривается в настоящей главе. Усовершенствованный же его вариант, называемый динамическим SQL, описывается в главе 18. Интерфейсы вызовов функций, применяемые в SQL Server и Oracle, а также ODBC рассматриваются в главе 19. Выполнение инструкций SQL в СУБД Давайте рассмофим, как СУБД выполняет инструкции SQL. Это поможет в Изучении методов, используемых в профаммном SQL. Вьшолнение инструкции SQL СУБД происходит в пять этапов (рис. 17.1): ! Осуществляется синтаксический анализ инструкции SQL. СУБД разделяет инструкцию на отдельные слова, затем проверяет, правильно ли в инструкции указана команда, используются ли допустимые предложения и т.д. На этом этапе обнаруживаются синтаксические ошибки Осушествляется проверка правильностараметров инструкции SQL Посредством обрашения к системному каталоп выясняется, сушествуют ли в базе данных таблицы, указанные в инструкции, существуют ли указанные столбцы и являются ли их имена однозначными, имеет липаьзователь привилегии, необходимые для вьшолнения инструкции. На этом этап:обнаруживаются семантические ошибки. Происходит оптимизация инструкции-СУБД исследует возможные способы ее выполнения. Выясняется, может ли быть использован индекс для ускорения поиска; следует ли вначале применить условие отбора к таблице а, а затем объединить ее с таблицей в, или удобвЕ начать с объединения таблиц, а условия отбора применить потом; можно ли имжать последовательного поиска по всей таблице или хотя бы ограничить его некоторой частью всей таблицы. После исследования возможных альтернатив СУБД выбирает одну из них. СУБД генерирует для инструкции плшшполнения, который является двоичным представлением действий, необходиак для выполнения инструкции. План выполнения в СУБД является эквивмснтом объектного кода программы. И наконец, СУБД реализует разработанннй план, тем самьм выполняя инструкцию. Инструкция SQL
Синтаксический анализ инструкции J I Проверка параметров V инструкции Оптимизация инструкци Генерация плана \
Исполнение плана Системный каталог базы данных Рис 17 1. Как СУБД обрабатывает инструк.с801 Обратите внимание на то, что перечисленные на рис. 17.1 этапы отличаются по числу обращений к базе данных и по времени работы процессора, требуемому для их выполнения. Синтаксичесюдй анализ инструкции SQL не требует обращения к базе данных и, как правило, проводится очень быстро. Оптимизация же, наоборот, требует интенсивной работы процессора и обращения к системному каталогу базы данных. Для сложных многотабличных запросов оптимизатор может исследовать более десятка альтернативных путей выполнения запроса. Однако стоимость выполнения запроса неправильным способом так высока по сравнению со стоимостью его выполнения правильным (или, по крайней мере, лучшим из найденных ) способом, что время, затраченное на оптимизацию, с избытком компенсируется более быстрым выполнением запроса. При вводе инструкции SQL в интерактивном режиме СУБД последовательно проходит через все пять этапов, а пользователь в это время ожидает ответа. У СУБД нет выбора - она не знает, какую инструкцию вы введете, до тех пор пока вы этого не сделаете. Поэтому СУБД не может обрабатывать интерактивные инструкции с опережением. Однако в случае с программным SQL ситуация в корне меняется. Ряд описанных этапов может быть реализован уже во время компиляции. Тогда во время выполнения, при эксплуатации программы пользователем, необходимо будет осуществить только оставшиеся этапы. СУБД пытается в процессе компиляции завершить как можно больший объем работы, поскольку после создания окончательной версии программы она может выполняться пользователями в промышленных приложениях тысячи раз. В частности, СУБД, если это возможно, стремится произвести оптимизацию еще во время компиляции. Основные концепции встроенного SQL Главная идея встроенного SQL состоит в непосредственном объединении инструкций SQL с программой, написанной на включающем , или базовом, языке профаммирования, таком как С, Pascal, COBOL, FORTRAN, PL/I или Assembler. Объединение осуществляется на основе следующих принципов; Инструкции SQL смешиваются с инструкциями базового языка в исходном тексте программы. Исходная программа со встроенным SQL поступает на вход препроцессора SQL, который компилирует инструкции SQL. Встроенные инструкции SQL могут ссьшаться на переменные базового языка программирования; это позволяет использовать в инструкциях SQL данные из программы. Встроенные инструкции SQL получают результаты SQL-запросов с помощью переменных базового языка; это позволяет программе пользоваться полученными данными и обрабатывать их. * Для присвоения значений null столбцам базы данных и получения значений null из базы данных в программе применяются специальные переменные. * Для обеспечения построчной обработки результатов запроса во встроенный SQL добавляется несколько новых инструкций, которых нет в интерактивном SQL. На рис. 17.2 приведена простая программа со встроенным SQL, написанная на зыке С. В этой программе отражены многие (но не все) концепции встроенного QL. Программа просит пользователя ввести номер офиса и выводит на экран сле-%Ющую информацию об этом офисе: город, регион, объем продаж и гшан продаж.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |