Функция SQLTablePrivileges

Соответствие
Введенная версия: Соответствие стандартам ODBC 1.0: ODBC

Сводка
SQLTablePrivileges возвращает список таблиц и привилегий, связанных с каждой таблицей. Драйвер возвращает информацию в виде результата, установленного на указанном операторе.

Syntax

  
SQLRETURN SQLTablePrivileges(  
     SQLHSTMT      StatementHandle,  
     SQLCHAR *     CatalogName,  
     SQLSMALLINT   NameLength1,  
     SQLCHAR *     SchemaName,  
     SQLSMALLINT   NameLength2,  
     SQLCHAR *     TableName,  
     SQLSMALLINT   NameLength3);  

Arguments

ОператорHandle
[Входные данные] Дескриптор инструкции.

Имя каталога
[Ввод] Каталог столов. Если драйвер поддерживает каталоги для одних таблиц, но не для других, например, когда драйвер получает данные из разных СУБД, пустая строка («») обозначает те таблицы, в которых нет каталогов. CatalogName не может содержать шаблон поиска по строкам.

Если атрибут оператора SQL_ATTR_METADATA_ID установлен в SQL_TRUE, CatalogName рассматривается как идентификатор, и его падеж не является значимым. Если это SQL_FALSE, то CatalogName — это обычный аргумент; Это воспринимается буквально, и его дело значимо. Дополнительные сведения см. в разделе "Аргументы" в функциях каталога.

NameLength1
[Ввод] Длина в символах *CatalogName.

SchemaName
[Ввод] Шаблон поиска по строкам для названий схем. Если драйвер поддерживает схемы для одних таблиц, но не для других, например, когда драйвер получает данные из разных СУБД, пустая строка ("") обозначает таблицы без схем.

Если атрибут оператора SQL_ATTR_METADATA_ID установлен в SQL_TRUE, SchemaName рассматривается как идентификатор, и его падеж не имеет значения. Если это SQL_FALSE, SchemaName — это аргумент значения паттерна; Это воспринимается буквально, и его дело значимо.

NameLength2
[Ввод] Длина в символах *SchemaName.

TableName
[Ввод] Шаблон поиска по строкам для названий таблиц.

Если атрибут оператора SQL_ATTR_METADATA_ID установлен в SQL_TRUE, TableName рассматривается как идентификатор, и его падеж не является значимым. Если это SQL_FALSE, TableName — это аргумент значения паттерна; Это воспринимается буквально, и его дело значимо.

NameLength3
[Ввод] Длина в символах *TableName.

Returns

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_STILL_EXECUTING, SQL_ERROR или SQL_INVALID_HANDLE.

Diagnostics

Когда SQLTablePrivileges возвращает SQL_ERROR или SQL_SUCCESS_WITH_INFO, соответствующее значение SQLSTATE можно получить, вызвав SQLGetDiagRec с помощью HandleType SQL_HANDLE_STMT и HandleType of StatementHandle. В следующей таблице перечислены значения SQLSTATE, которые обычно возвращает SQLTablePrivileges , и каждое из них объясняется в контексте этой функции; обозначение «(DM)» предшествует описаниям SQLSTATE, возвращаемым менеджером драйверов. Возвращаемый код, связанный с каждым значением SQLSTATE, SQL_ERROR, если не указано иное.

SQLSTATE Ошибка Description
01000 Общее предупреждение Информационное сообщение для конкретного драйвера. (Функция возвращает SQL_SUCCESS_WITH_INFO.)
08S01 Сбой связи Связь между драйвером и источником данных, к которому был подключен драйвер, произошел сбой до завершения обработки функции.
24000 Недопустимое состояние курсора На StatementHandle был открыт курсор, и был вызван SQLFetch или SQLFetchScroll . Эта ошибка возвращается менеджером драйверов, если SQLFetch или SQLFetchScroll не вернули SQL_NO_DATA, и возвращается драйвером, если SQLFetch или SQLFetchScroll вернули SQL_NO_DATA.

Курсор был открыт на StatementHandle, но SQLFetch или SQLFetchScroll не были вызваны.
40001 Сбой сериализации Транзакция была откатена из-за взаимоблокировки ресурсов с другой транзакцией.
40003 Неизвестное завершение инструкции Связанное соединение завершилось сбоем во время выполнения этой функции, и состояние транзакции невозможно определить.
HY000 Общая ошибка Произошла ошибка, для которой не было определенного SQLSTATE и для которого не было определено значение SQLSTATE для конкретной реализации. Сообщение об ошибке, возвращаемое SQLGetDiagRec в буфере *MessageText , описывает ошибку и ее причину.
HY001 Ошибка выделения памяти Драйверу не удалось выделить память, необходимую для поддержки выполнения или завершения функции.
HY008 Операция отменена Асинхронная обработка была включена для ОператораHandle. Была вызвана функция SQLTablePrivileges, и перед завершением выполнения на StatementHandleвызывался SQLCancel или SQLCancelHandle. Затем функция SQLTablePrivileges была вызвана снова в StatementHandle.

Функция SQLTablePrivileges вызывалась, и до завершения выполнения SQLCancel или SQLCancelHandle вызывались на StatementHandle из другого потока в многопоточном приложении.
HY009 Недопустимое использование указателя NULL Атрибут оператора SQL_ATTR_METADATA_ID был установлен в SQL_TRUE, аргумент CatalogName был нулевой указателем, а SQL_CATALOG_NAME InfoType возвращал, что имена каталогов поддерживаются.

(DM) Атрибут оператора SQL_ATTR_METADATA_ID был установлен в SQL_TRUE, а аргумент SchemaName или TableName был null-указателем.
HY010 Ошибка последовательности функций (DM) Асинхронно выполняющаяся функция была вызвана для дескриптора соединения, связанного с ОператоромHandle. Эта асинхронная функция всё ещё выполнялась, когда была вызвана функция SQLTablePrivileges .

(DM) SQLExecute, SQLExecDirect или SQLMoreResults был вызван для ОператораHandle и возвращен SQL_PARAM_DATA_AVAILABLE. Эта функция была вызвана до получения данных для всех потоковых параметров.

(DM) асинхронно выполняющаяся функция (не эта) была вызвана для StatementHandle и по-прежнему выполнялась при вызове этой функции.

(DM) SQLExecute, SQLExecDirect, SQLBulkOperations или SQLSetPos были вызваны для ОператораHandle и возвращены SQL_NEED_DATA. Эта функция была вызвана до отправки данных для всех параметров выполнения или столбцов.
HY013 Ошибка управления памятью Не удалось обработать вызов функции, так как к базовым объектам памяти не удалось получить доступ, возможно, из-за низкой памяти.
HY090 Недопустимая длина строки или буфера (DM) Значение одного из аргументов длины имени было меньше 0, но не равно SQL_NTS.

Значение одного из аргументов длины имени превышало максимальное значение длины соответствующего квалификатора или имени.
HY117 Подключение приостановлено из-за неизвестного состояния транзакции. Разрешены только функции отключения и только для чтения. (DM) Для получения дополнительной информации о приостановленном состоянии см. Функция SQLEndTran.
HYC00 Необязательный компонент не реализован Был указан каталог, и драйвер или источник данных не поддерживает каталоги.

Была задана схема, и драйвер или источник данных не поддерживают схемы.

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

Сочетание текущих параметров SQL_ATTR_CONCURRENCY и атрибутов инструкции SQL_ATTR_CURSOR_TYPE не поддерживается драйвером или источником данных.

Для атрибута инструкции SQL_ATTR_USE_BOOKMARKS задано значение SQL_UB_VARIABLE, а для атрибута инструкции SQL_ATTR_CURSOR_TYPE задан тип курсора, для которого драйвер не поддерживает закладки.
HYT00 Время ожидания истекло. Срок ожидания запроса истек, прежде чем источник данных вернул результирующий набор. Период времени ожидания задается через SQLSetStmtAttr, SQL_ATTR_QUERY_TIMEOUT.
HYT01 Время ожидания для подключения истекло Срок ожидания подключения истек до того, как источник данных ответил на запрос. Период времени ожидания подключения задается через SQLSetConnectAttr SQL_ATTR_CONNECTION_TIMEOUT.
IM001 Драйвер не поддерживает эту функцию (DM) Драйвер, связанный с StatementHandle , не поддерживает функцию.
IM017 Опрос отключен в асинхронном режиме уведомлений При использовании модели уведомлений опрос отключается.
IM018 SQLCompleteAsync не был вызван для выполнения предыдущей асинхронной операции с этим дескриптором. Если предыдущий вызов функции дескриптора возвращает SQL_STILL_EXECUTING и если включен режим уведомлений, sqlCompleteAsync должен вызываться на дескрипторе для выполнения последующей обработки и завершения операции.

Comments

Аргументы SchemaName и TableName принимают шаблоны поиска. Для получения дополнительной информации о допустимых шаблонах поиска см. Аргументы значений шаблона.

SQLTablePrivileges возвращает результаты в виде стандартного набора результатов, упорядоченных по TABLE_CAT, TABLE_SCHEM, TABLE_NAME, PRIVILEGE и GRANTEE.

Для определения фактической длины столбцов TABLE_CAT, TABLE_SCHEM и TABLE_NAME приложение может вызвать SQLGetInfo с помощью опций SQL_MAX_CATALOG_NAME_LEN, SQL_MAX_SCHEMA_NAME_LEN и SQL_MAX_TABLE_NAME_LEN.

Примечание.

Дополнительные сведения об общем использовании, аргументах и возвращаемых данных функций каталога ODBC см. в разделе "Функции каталога".

Следующие столбцы были переименованы для ODBC 3.x. Изменения названий столбцов не влияют на обратную совместимость, поскольку приложения связываются по номеру столбцов.

Столбец ODBC 2.0 Столбец ODBC 3.x
ПРЕДИКАТ_ТАБЛИЦЫ TABLE_CAT
владелец таблицы TABLE_SCHEM

В следующей таблице перечислены столбцы в результирующем наборе. Драйвер может определить дополнительные столбцы за пределами столбца 7 (IS_GRANTABLE). Приложение должно получать доступ к специфическим для драйвера столбцам, обратный отсчёт от конца набора результатов, а не указывая явное порядковое положение. Дополнительные сведения см. в разделе "Данные, возвращаемые функциями каталога".

Название столбца Номер столбца Тип данных Comments
TABLE_CAT (ODBC 1.0) 1 Varchar Название каталога; NULL, если это не применимо к источнику данных. Если драйвер поддерживает каталоги для одних таблиц, но не для других, например, когда драйвер получает данные из разных СУБД, он возвращает пустую строку ("") для тех таблиц, в которых нет каталогов.
TABLE_SCHEM (ODBC 1.0) 2 Varchar Название схемы; NULL, если это не применимо к источнику данных. Если драйвер поддерживает схемы для одних таблиц, но не для других, например, когда драйвер получает данные из разных СУБД, он возвращает пустую строку ("") для тех таблиц, в которых нет схем.
TABLE_NAME (ODBC 1.0) 3 Варчар, а не NULL Имя таблицы.
ГРАНТОР (ODBC 1.0) 4 Varchar Имя пользователя, предоставившего это право; NULL, если это не применимо к источнику данных.

Для всех строк, где значение в столбце GRANTEE принадлежит объекту, столбец GRANTOR будет «_SYSTEM».
ПОЛУЧАТЕЛЬ ГРАНТА (ODBC 1.0) 5 Варчар, а не NULL Имя пользователя, которому была предоставлена эта привилегия.
ПРИВИЛЕГИЯ (ODBC 1.0) 6 Варчар, а не NULL Привилегия за столом. Это может быть одно из следующих или привилегия, специфичная для источника данных.

SELECT: Получателю разрешается получать данные для одного или нескольких столбцов таблицы.

INSERT: Получатель гранта может вставлять новые строки с данными для одного или нескольких столбцов в таблицу.

UPDATE: Получателю разрешения обновлять данные в одном или нескольких столбцах таблицы.

DELETE: Получателю разрешения удалять строки данных из таблицы.

ССЫЛКИ: Получателю разрешается ссылаться на один или несколько столбцов таблицы внутри ограничения (например, уникальное, референтное или ограничение для проверки таблицы).

Сфера действий, предоставленная получателю данной таблицой, зависит от источника данных. Например, это UPDATE право может позволять получателю обновлять все столбцы в таблице на одном источнике данных и только те столбцы, на которые у грантодателя UPDATE есть право на другой источник данных.
IS_GRANTABLE (ODBC 1.0) 7 Varchar Указывает, имеет ли грантополучатель право предоставлять это право другим пользователям; «YES», «NO» или NULL, если неизвестно или не применимо к источнику данных.

Привилегия либо может быть предоставлена, либо не предоставляема, но не и то, и другое. Набор результатов, возвращаемый SQLColumnPrivileges , никогда не будет содержать две строки, для которых все столбцы, кроме столбца IS_GRANTABLE, содержат одно и то же значение.

Пример кода

Для примера кода аналогичной функции см. SQLColumns.

Тема Смотри
Привязка буфера к столбцу в результирующем наборе Функция SQLBindCol
Отмена обработки инструкций Функция SQLCancel
Возврат прав для колонки или столбцов Функция SQLColumnPrivileges
Возврат столбцов в таблице или таблицах Функция SQLColumns
Получение одной строки или блока данных в направлении только вперёд Функция SQLFetch
Получение блока данных или прокрутка результирующий набор Функция SQLFetchScroll
Возврат статистики и индексов таблиц Функция SQLStatistic
Возврат списка таблиц в источнике данных Функция SQLTables

См. также

Справочник по API ODBC
Файлы заголовков ODBC