Вы на НеОфициальном сайте факультета ЭиП

На нашем портале ежедневно выкладываются материалы способные помочь студентам. Курсовые, шпаргалки, ответы и еще куча всего что может понадобиться в учебе!
Главная Контакты Карта сайта
 
Где мы?

Реклама


Лекции по SQL. Часть 3.

Просмотров: 1537 Автор: admin

Лекции по 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 - операторов и выборка данных   

- Освобождение идентификатора оператора   

- Отсоединение от источника данных        

- Освобождение идентификатора соединения 

- Освобождение идентификатора окружения   



Популярные новости

Статистика сайта



Rambler's Top100



 
Copyright © НеОфициальный сайт факультета ЭиП