Программирование >>  Построение запросов sql 

1 ... 12 13 14 [ 15 ] 16 17 18 ... 101


2.6. Формы использования SQL

Язык SQL может выступать в различных формах [18, 19]. SQL можно использовать как в интерактивном режиме (Interactive SQL - ISQL), так и путем внедрения его запросов в программы, написанные на процедурных языках высокого уровня.

Интерактивный SQL позволяет конечному пользователю в интерактивном режиме выполнять SQL-запросы и просматривать результаты их выполнения. Все СУБД предоставляют инструментальные средства для работы с базой данных в интерактивном режиме. Для СУБД Firebird 2.1 родным (входящим в комплект установки) инструментом интерактивного SQL является одна из утилит командной строки - isql. Как уже отмечалось, также можно использовать инструменты с графическим интерфейсом (например, IBExpert). Графические инструменты предоставляют возможность как непосредственно вводить текст SQL-запроса в редакторе, так и визуально составлять запросы с помощью построителя (конструктора), что часто значительно упрощает написание запроса.

Применение языка SQL в прикладных программах на практике реализовано двумя различными способами.

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

2. Использование прикладного интерфейса программирования (API -Application Programming Interface), позволяющего реализовывать работу с базой данных через предоставляемый набор функций. API может быть целевым, предоставленным производителем коммерческой СУБД для работы именно с этой базой данных, или межплатформенным, реализующим унифицированные средства доступа к СУБД различных производителей. Конкретный вариант API может предоставлять тот же набор функциональных возможностей, который существует при подключении встроенных операторов, однако при этом устраняется необходимость предкомпилирования исходного текста. Кроме того, некоторые разработчики указывают, что в этом случае используется более понятный интерфейс и созданный программный текст более удобен с точки зрения его сопровождения. Прикладной API включает набор библиотечных функций, предоставляющих программисту разнообразные типы доступа к базе данных, а именно: подключение, выполнение различных SQL-запросов, выборка отдельных строк данных из результирующих наборов данных и т. д.

Внедрение SQL-запросов в текст программы предполагает использование операторов как статического SQL, так и динамического SQL (Dynamic SQL -

DSQL) [18].

Статический SQL может реализовываться как встроенный SQLfEmbedded SQL - ESQLj или модульный SQL. Во встроенном SQL можно использовать



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

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

Динамический SQL (в отличие от статического SQL) позволяет формировать SQL-запросы не на этапе компиляции, а во время выполнения программы. Запросы динамического SQL формируются как текстовые переменные (например, Abon:=SELECT * FROM ABONENT;). Для динамического формирования оператора можно выполнять последовательное объединение строк.

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

Стандартный набор запросов SQL дополняется так называемым процедурным языком Firebird (PSQL), который предполагает расширение SQL средствами программирования. Это не встроенный SQL, предполагающий включение конструкций SQL в текст программы, написанной на полноценном языке программирования. Процедурный язык - это язык, который интерпретирует сама СУБД. На процедурном языке создаются триггеры и хранимые процедуры (ХП). ХП похожи на процедуры языков высокого уровня, для получения исходных данных и для вывода результатов ХП могут иметь входные и выходные параметры соответственно. Триггеры выполняются автоматически при изменении данных в БД, они не имеют параметров, но могут использовать ряд специальных контекстных переменных, не доступных в ХП.

2.7. Имена объектов в SQL. Константы, отсутствующие данные

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



представлений, курсоров и пользователей. Часто в SQL поддерживаются также именованные триггеры, хранимые процедуры, именованные отношения первичный ключ - внешний ключ и формы для ввода данных. В SQL имена должны содержать от 1 до 31 символа [прописные и/или строчные буквы латинского алфавита, цифры, символ подчеркивания ( ), знак доллара ($)], начинаться с буквы и не содержать пробелы или специальные символы пунктуации:

<идентификатор>::= буква { буква цифра } ...

В БД диалекта 3 Firebird поддерживает соглашение ANSI SQL об идентификаторах с разделителями [18]. Для использования зарезервированных слов, символов, чувствительных к регистру, или пробелов в имени объекта следует заключить это имя в двойные кавычки. Такой идентификатор -идентификатор с разделителем. Данные идентификаторы должны быть представлены с двойными кавычками во всех типах запросов SQL. Идентификаторы с разделителями были введены для совместимости со стандартами, но если нет серьезных оснований их использовать, то рекомендуется использовать обычные идентификаторы.

Если в запросе указано имя таблицы, предполагается, что происходит обращение к одной из таблиц подключенной БД. К конкретной таблице БД можно обращаться, только будучи ее владельцем или имея соответствующее разрешение, данное владельцем. Владельцем БД или какой-то ее таблицы считается пользователь, который создает ее.

Если в запросе задается имя столбца, SQL сам определяет, в какой из указанных в этом же операторе таблиц содержится данный столбец. Однако если в запрос требуется включить два столбца из различных таблиц, но с одинаковыми именами, необходимо указать полные имена столбцов. Полное имя столбца состоит из имени таблицы, содержащей столбец, и имени столбца (простого имени), разделенных точкой. Например, полное имя столбца AccountCD (номер лицевого счета абонента) из таблицы Abonent имеет следующий вид: Abonent.AccountCD.

В SQL-запросе можно конкретно указывать значения чисел, строк или даты. Для этого определен формат числовых и строковых констант (литералов), представляющих конкретные значения данных:

- целые и десятичные константы в SQL-запросе представляются в виде обычных десятичных чисел с необязательным знаком плюс (+) или минус (-) перед ними;

- константы с плавающей запятой определяются с помощью символа E и имеют такой же формат, как и в большинстве языков программирования;

- строковые константы заключаются в одинарные кавычки, например: FIREBIRD. Если необходимо включить в строковую константу одинарную кавычку, то следует ввести две одинарные кавычки, например: IT S MY LIFE. В таблицу бД это будет помещено как ITS MY LIFE;



1 ... 12 13 14 [ 15 ] 16 17 18 ... 101

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика