Для посетителейРеклама |
Лекции по SQL. Часть 3.
Просмотров: 1726
Лекции по SQL<!--[if gte mso 9]> Normal 0 false false false MicrosoftInternetExplorer4 <!--[if gte mso 9]> <!--[if gte mso 10]> /* Style Definitions */ table.MsoNormalTable {mso-style-name:"Обычная таблица"; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-parent:""; mso-padding-alt:0cm 5.4pt 0cm 5.4pt; mso-para-margin:0cm; mso-para-margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:10.0pt; font-family:"Times New Roman"; mso-ansi-language:#0400; mso-fareast-language:#0400; mso-bidi-language:#0400;} <!--[if gte mso 9]> <!--[if gte mso 9]> 1.ODBC - Open Database Connectivity Стандарт SQL был зафиксирован с принятием его в 1986 г. в качестве стандарта Американского Национального Института Стандартов (ANSI). Другими стандартами для SQL являются SQL Access Group (SAG - группа стандартов, поддерживаемая более, чем 40 пользователями), ISO (Национальная Организация Стандартов), X/Open (группа стандартов для UNIX). Наиболее полно реализованным стандартом является ANSI SQL89. Он поддерживает три интерфейса с SQL: модульный язык, встроенный SQL и непосредственный вызов. Интерфейс модульного языка позволяет создавать процедуры, которые затем могут вызываться из традиционных языков программирования. Стандарт ANSI SQL-92 позволяет включать динамический SQL во встроенные SQL-операторы. Интерфейс ODBC фирмы Microsoft придерживается определений SAG и X/Open для SQL и его интерфейса на уровне вызовов.
Открытый интерфейс доступа к базам данных представляет собой библиотеку функций, которая позволяет прикладной программе обращаться к различным СУБД, используя SQL. Архитектура ODBC имеет 4 основных компонента: - прикладная программа - менеджер драйверов - драйверы - источники данных
Первичное назначение менеджера драйверов - загрузка драйвера, соответствующего конкретной СУБД. Приложение обращается к драйверу в стандарте SQL, драйвер обращается к базе данных непосредственно или через СУБД для выполнения запроса. Все драйверы обеспечивают стандартные коды ошибок. Таким образом приложение более или менее нечувствительно к форматам данных и используемым СУБД.
1.1.Интерфейс ODBC
ODBC использует собственные имена типов:
typedef unsigned char UCHAR; typedef signed char SCHAR; typedef long int SDWORD; typedef short int SWORD; typedef unsigned long int UDWORD; typedef unsigned short int UWORD; typedef signed long SLONG; typedef signed short SSHORT; typedef unsigned long ULONG; typedef unsigned short USHORT; typedef double SDOUBLE; typedef double LDOUBLE; typedef float SFLOAT; typedef void FAR * PTR; typedef void FAR * HENV; typedef void FAR * HDBC; typedef void FAR * HSTMT; typedef signed short RETCODE;
Функции интерфейса ODBC разделяются на шесть групп: - назначение и отмена назначения - идентификатора окружения - идентификатора соединения с источником данных - идентификатора SQL оператора - соединение о отсоединение от источника данных - выполнение SQL операторов - получение результатов - управление транзакциями - идентификация ошибок и смешанные функции Все функции ODBC возвращают RETCODE, чтобы показать состояние результата. Коды возврата могут принимать значения:
SQL_SUCCESS - функция выполнена успешно SQL_SUCCESS_WITH_INFO - функция выполнена успешно, однако есть информация, которую следует принимать как предупреждение. SQL_NO_DATA_FOUND - информации для выборки больше нет - уже все извлечено. SQL_ERROR - ошибка при выполнении функции. Имеется дополнительная информация об ошибке. SQL_INVALID_HANDLE - один или более идентификаторов неверен. (имеются в виду идентификаторы окружения, соединения или оператора.) SQL_STILL_EXECUTING - асинхронно выполняемая функция все еще находится в состоянии выполнения. SQL_NEED_DATA - драйвер хочет получить дополнительную информацию для выполнения операции.
Уточнение характера ошибки можно получить, обратившись к функции SQLError:
RETCODE SQLError( HENV henv, // идентификатор окружения HDBC hdbc, // идентификатор соединения HSTMT hstmt, // идентификатор оператора UCHAR FAR *szSqlState, // 5-байтный код строки завершения // (и один байт для 0) SDWORD FAR *pfNativeError, // ошибка, порожденная в СУБД и ее // код UCHAR FAR * szErrorMsg, // текст сообщения об ошибке SWORD cbErrorMsgMax, // предоставляем столько байт для // сообщения об ошибке SWORD FAR *pcbErrorMsg // на самом деле получено байт в сооб- // щении );
1.1.1.Определение возможностей драйвера ODBC содержит две функции, которые позволяют прикладной программе получить информацию о драйвере и определить какие функции API поддерживает этот драйвер. Функция SQLGetInfo возвращает общую информацию о драйвере и источнике данных.
RETCODE SQLGetInfo( HDBC hdbc, // идентификатор соединения UWORD fInfoType, // тип информации, которую Вы хотите получить PTR *rgbInfoValue, // указатель на область, куда будет помещена // информация SWORD cbInfoValueMax, // получить бай не более чем SWORD FAR *pcbInfoValue // число действительно полученных байт // ( кроме хвостового нуля ) ); В зависимости от запрашиваемых данных в rgbInfoValue может быть возвращено: - символьная строка, заканчивающаяся нулем - 16-битовое целое - 32-битовое целое - 32-битовая маска Перечень типов запрашиваемых данных весьма обширен. Ниже приведены примеры:
fInfoType Возвращаемое значение ------------------------------------------------------------------- SQL_ACTIVE_CONNECTIONS 16-битовое целое, равное максимальному числу активных соединений, которые драйвер может поддерживать
SQL_ACTIVE_STATEMENTS 16-битовое целое, равное максимальному числу активных SQL-операторов на одно соединение
SQL_ALTER_TABLE 32-бита, в которых указаны допустимые действия при изменении структуры таблицы. Для их выделе- ния воспользуйтесь масками SQL_AT_ADD_COLUMN и SQL_AT_DROP_COLUMN
SQL_COLUMN_ALIAS Символьная строка "Y", если поддерживаются псевдонимы столбцов и "N" в противном случае.
SQL_DATA_SOURCE_NAME Символьная строка, содержащая имя источника данных.
Функция SQLGetFunctions возвращает информацию о том, поддерживает ли драйвер конкретную функцию ODBC. Функция применяется исключительно Менеджером драйверов и потому всегда доступна.
RETCODE SQLGetFunctions( HDBC hdbc, // идентификатор соединения UWORD fFunction, // функция ODBC, информацию о которой // требуется получить UWORD FAR *pfExists // TRUE, если функция // поддерживается драйвером ); fFunction - defined константы, например: SQL_API_SQLALLOCCONNECT, SQL_API_SQLFETCH, SQL_API_SQLGETINFO и т.п. Если fFunction==SQL_ API_ALL_FUNCTIONS, то возвращается массив из 100 значений. Массив индексирован теми же defined константами.
1.1.2. Назначение и отмена назначения Идентификатор окружения содержит все определения. Идентификатор соединения определяет соединение с базой данных, идентификатор оператора определяет конкретный SQL оператор. Выполнение функции назначения выделяет память под структуру, соответствующего идентификатора и возвращает его значение. После назначения программа передает идентификатор в функции для выполнения действий. Функции отмены назначения освобождают ресурсы, занятые идентификаторами. Идентификатор окружения указывает на область памяти для глобальной информации и имеет тип HENV. Переменная типа HENV содержит сведения о всех соединениях с БД информацию о том, какое соединение является текущим. Идентификатор соединения - указатель на структуру, содержащую данные конкретного соединения. Указатель на нее принадлежит данным идентификатора окружения. Аналогично, идентификатор SQL-оператора принадлежит к данным идентификатора соединения. Функции управления транзакцией позволяют программе открыть, завершить или откатить транзакцию. Несмотря на то, что по умолчанию ODBC находится в режиме автоматического выполнения транзакций, где каждый SQL-оператор является законченной транзакцией, программа может "вручную" управлять транзакциями.
1.1.3. Уровни соответствия SQL Грамматика ODBC SQL определяет базовую грамматику, соответствующую требованиям X/Open и SAG. Кроме того, ODBC включает в базовую грамматику дополнительные уровни - минимальный и расширенный. Минимальная грамматика включает: - средства определения данных: CREATE TABLE, DROP TABLE - средства манипулирования данными: SELECT, INSERT, UPDATE, SEARCHED, DELETE SEARCHED - простые выражения - типы данных: CHAR
Базовая SQL-грамматика, помимо минимальной, включает: - ALTER TABLE, CREATE INDEX, DROP INDEX, CREATE VIEW, DROP VIEW, GRANT, REVOKE - полный SELECT, позиционируемый UPDATE, позиционируемый DELETE - выражения: подзапрос и групповые функции, такие, как SUM и MIN - типы данных: VARCHAR, DECIMAL, NUMERIC, SMALLINT, INTEGER, REAL, FLOAT, DOUBLE PRECISION
Расширенная грамматика включает базовую и: - внешние объединения -выражения: скалярные функции, такие как SUBSTRING и ABS, дату, время и символьное представление времени. - типы данных: LONG VARCHAR, BIT, TINYINT, BIGINT, BINARY, VARBINARY, LONG VARBINARY, DATE, TIME, TIMESTAMP - групповые SQL-опреаторы - вызовы процедур
Конкретный SQL-драйвер может поддерживать дополнительные возможности и, наоборот, не поддерживать некоторые типы данных. Функции SQLGetInfo и SQLGetTypeInfo позволяют определить поддерживаемые типы данных. ODBC обеспечивает преобразование данных из ODBC SQL-типа в тип данных источника и обратно. Каждая функция ODBC возвращает признак успешного выполнения, предупреждения или невозможности выполнения.
Основной алгоритм работы программы имеет следующую последовательность шагов. - Назначение идентификатора окружения - Назначение идентификатора соединения - Выполнение соединения с источником данных - Назначение идентификатора оператора - Выполнение SQL - операторов и выборка данных - Освобождение идентификатора оператора - Отсоединение от источника данных - Освобождение идентификатора соединения - Освобождение идентификатора окружения
|
ПоискПопулярные новости |