Первая информация, которая может понадобиться прикладной программе для соединения с неизвестным источником данных – это информация о таблицах. ODBC-функция SQLTables возвращает список имен таблиц, которые содержит указанный источник данных. Используя идентификатор оператора, драйвер возвращает информацию в виде результирующего множества. Синтаксис SQLTables имеет вид:
Имя квалификатора или “”, означающая, что таблицы не имеют квалификаторов
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.
Например, следующий вызов возвратит список всех таблиц и представлений:
Результирующее множество функции SQLTables одно и тоже для любого её вызова и представлено в таблице 25.
Таблица 25 Результирующее множество SQLTables
Имя столбца
Тип данных
Объяснение
TABLE_QUALIFIER
VARCHAR(128)
Идентификатор квалификатора
TABLE_OWNER
VARCHAR(128)
Идентификатор собственника
TABLE_NAME
VARCHAR(128)
Идентификатор таблицы
TABLE_TYPE
VARCHAR(128)
Идентификатор типа таблицы (“TABLE”, “VIEW” и др. строки)
REMARKS
VARCHAR(256)
Описание таблицы
Как только информация о таблицах получена, зачастую бывает необходимо получить информацию о столбцах интересующей таблицы. Чтобы выбрать эту информацию, программа должна вызвать SQLColumns(). При вызове драйвер, используя идентификатор оператора, возвращает эту информацию в результирующем множестве:
Таблица 26 Результирующее множество 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 определяет количество цифр справа от десятичной точки и используется для числовых столбцов.
Квалификатор таблиц, “” означает, сто таблицы источника не поддерживают квалификаторов
SWORD
sbTableQualifier
Вход
Длина szTableQualifier
UCHAR*
szTableOwner
Вход
Образец строки поиска для имен собственников
SWORD
sbTableOwner
Вход
Длина szTableOwner
UCHAR*
szTableName
Вход
Образец строки поиска для имен таблиц
SWORD
sbTableName
Вход
Длина szTableName
UCHAR*
szColumnName
Вход
Образец строки поиска для имен столбцов
SWORD
sbColumnName
Вход
Длина szColumnName
Первые семь параметров общие для большинства функций работы с системным каталогом. Оставшиеся два специфичны для данной функции. Для приложений может оказаться оправданным возвращение всех таблиц баз данных посредством SQLTables, однако это не совсем справедливо по отношению к столбцам. В больших базах список всех столбцов по всем таблицам очень большой. Поэтому для прикладной программы важно тщательное использование параметров, ограничивающих результирующее множество.