Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Функции управления каталогом.



Первая информация, которая может понадобится прикладной программе для соединения с неизвестным источником данных – это информация о таблицах. ODBC – функция SQLTables возвращает список имен таблиц, которые содержит указанный источник данных. Используя идентификатор оператора, драйвер возвращает информацию в виде результирующего множества. Синтаксис SQLTables имеет вид:

 

RETCODE SQLTables (hstmt, szTableQualifier, sbTableQualifier, szTableOwner, sbTableOwner, szTableName, sbTableName, szTableType, sbTableType)

 

 

Таблица 9 Описание параметров SQLTables

Тип Аргумент Использование Описание
HSTMT hstmt Вход Идентификатор оператора
UCHAR* szTableQualifier Вход Имя квалификатора или “”, означающая, что таблицы не имеют квалификаторов
SWORD sbTableQualifier Вход Длина szTableQualifier или SQL_NTS
UCHAR* szTableOwner Вход Образец строки поиска для имен собственников или “”, означающая что данная база не поддерживает имен собственников.
SWORD sbTableOwner Вход Длина szTableOwner или SQL_NTS
UCHAR* szTableName Вход Образец строки поиска для имен таблиц.
SWORD sbTableName Вход Длина szTableName или SQL_NTS
UCHAR* szTableType Вход Список типов таблиц для выбора.
SWORD sbTableType Вход Длина szTableType или SQL_NTS

 

В образцах строк для поиска возможно использование символов-заменителей, так ‘%’ заменяет любую последовательность символов, а ‘-‘ – произвольный одиночный символ. Список типов таблиц для выбора может содержать следующие типы таблиц: ‘TABLE’, ’VIEW’, ‘SYSTEM TABLE’, ‘ALIAS’ и некоторые таблицы. Представления (VIEW) вообще-то не являются таблицами БД, но зачастую носят имя “виртуальных таблиц” в силу похожести использования для операторов извлечения. Если символ ‘%’ используется в каком-то из аргументов функции в качестве шаблона выбора, а все остальные аргументы шаблонов – пустые строки, то можно получить список всех квалификаторов, владельцев или таблиц для выбранного источника. При использовании такого способа вызова все столбцы в результирующем множестве, кроме одного, устанавливаются в NULL. Например следующий вызов возвратит список всех таблиц и представлений:

 

rc=SQLTables (hstmt, “”, SQL_NTS, “”, SQL_NTS, “%”, SQL_NTS, “’TABLE’, ‘VIEW’”, SQL_NTS).

 

Результирующее множество функции SQLTables одно и тоже для любого её вызова и представлено в таблице 10.

 

Таблица 10 Результирующее множество SQLTables

Имя столбца Тип данных Объяснение
TABLE_QUALIFIER VARCHAR(128) Идентификатор квалификатора
TABLE_OWNER VARCHAR(128) Идентификатор собственника
TABLE_NAME VARCHAR(128) Идентификатор таблицы
TABLE_TYPE VARCHAR(128) Идентификатор типа таблицы (“TABLE”, “VIEW” и др. строки)
REMARKS VARCHAR(256) Описание таблицы

 

Как только информация о таблицах получена, зачастую бывает необходимо получить информацию о столбцах интересующей таблицы. Чтобы выбрать эту информацию, программа должна вызвать SQLColumns(). При вызове драйвер, используя идентификатор оператора, возвращает эту информацию в результирующем множестве:

 

Таблица 11 Результирующее множество SQLColumns()

Имя столбца Тип данных Описание
TABLE_QUALIFIER VARCHAR(128) Идентификатор квалификатора
TABLE_OWNER VARCHAR(128) Идентификатор собственника
TABLE_NAME VARCHAR(128) Название таблицы
COLUMN_NAME VARCHAR(128) Название столбца
DATA_TYPE Smallint SQL – тип данных
TYPE_NAME VARCHAR(128) Имя типа данных в зависимости от источника
PRECISION Integer Точность
LENGTH Integer Длина столбца
SCALE Smallint Масштаб
NULLABLE Smallint SQL_NO_NULLS SQL_NULLABLE SQL_NULLABLE_UNKNOWN  
REMARKS VARCHAR(254) Описание таблицы

 

Столбцы DATA_TYPE и TYPE_NAME определяют тип данных по разному. DATA_TYPE является ODBC SQL – типом данных, а TYPE_NAME является специфическим типом данных источника. Один и тот же ODBC SQL –тип может иметь разные типы данных для каждого источника. Столбцы PRECISION и SCALE можно использовать в других функциях (например в функции SQLBindParameter). PRECISION определяет общее число цифр или максимальную длину, а SCALE определяет количество цифр справа от десятичной точки и используется для числовых столбцов.

Синтаксис же функции следующий:

 

RETCODE SQLColumns (hstmt, szTableQualifier, sbTableQualifier, szTableOwner, sbTableOwner, szTableName, sbTableName, szColumnName, sbColumnName)

 

Таблица 12 Описание параметров SQLColumns

Тип Аргумент Использование Описание
HSTMT hstmt Вход Идентификатор оператора
UCHAR* szTableQualifier Вход Квалификатор таблиц, “” означает, сто таблицы источника не поддерживают квалификаторов
SWORD sbTableQualifier Вход Длина szTableQualifier
UCHAR* szTableOwner Вход Образец строки поиска для имен собственников
SWORD sbTableOwner Вход Длина szTableOwner
UCHAR* szTableName Вход Образец строки поиска для имен таблиц
SWORD sbTableName Вход Длина szTableName
UCHAR* szColumnName Вход Образец строки поиска для имен столбцов
SWORD sbColumnName Вход Длина szColumnName

 

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

 

Непосредственное выполнение

Непосредственное выполнение целесообразно использовать в следующих случаях:

● SQL – операторы, которые должны быть выполнены, выполняются только один раз,

● Не требуется информация о результирующем множестве до выполнения оператора.

Непосредственное выполнение реализуется с помощью функции SQLExecDirect() и представляет наиболее быстрый способ запуска SQL – оператора при одноразовом выполнении.

Синтаксис функции имеет вид:

 

RETCODE SQLExecDirect( hstmt, szSqlStr, sbSqlStr)

Таблица 13 Описание параметров SQLExecDirect()

Тип Аргумент Использование Описание
HSTMT hstmt Вход Идентификатор оператора
UCHAR* szSqlStr Вход SQL – оператор для выполнения
SDWORD sbSqlStr Вход Длина szSqlStr или SQL_NTS

 

Например следующий вызов функции непосредственного выполнения будет возвращать все строки из таблицы Staff:

 

rc=SQLExecDirect (hstmt, “select * from staff”, SQL_NTS).

 

Подготавливаемое выполнение

Данный способ выполнения оператора предпочтителен в случае, если оператор предполагается выполнять несколько раз и требуется предварительная информация о результирующем множестве. Для подготавливаемого выполнения необходимы две функции: SQLPrepare() и SQLExecute().

SQLPrepare() подготавливает SQL – строку для выполнения. Синтаксис её ничем не отличается от синтаксиса SQLExecDirect(). Синтаксис SQLExecute() следующий:

 

RETCODE SQLExecute (hsmt)

где hsmt – предварительно назначенный идентификатор оператора.

 

SQLPrepare() отличается от SQLExecDirect() тем, что при вызове SQLPrepare() оператор на самом деле не выполняется. Вместо этого определяется путь доступа к данным и информация о результирующем множестве становится доступной для использования. Так функции SQLNumResultCols() и SQLRowCount() при вызове возвращают количество столбцов и строк результирующего множества. Так как план выполнения оператора после его подготовки известен, то его выполнение может выполняться несколько быстрее, чем при использовании SQLExecDirect(). Кроме того, каждый вызов SQLExecute() передает базе данных только идентификатор, а не строку запроса, что может несколько снизить сетевой трафик.

 


Поделиться:



Популярное:

Последнее изменение этой страницы: 2016-07-13; Просмотров: 549; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.017 с.)
Главная | Случайная страница | Обратная связь