Поделиться через


Функция SQLTablePrivileges

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

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

Синтаксис

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

Аргументы

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

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

Если для атрибута инструкции SQL_ATTR_METADATA_ID задано значение SQL_TRUE, Имя каталога рассматривается как идентификатор, и его регистр не имеет значения. Если это 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.

Возвраты

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

Диагностика

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

SQLSTATE Error 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 была вызвана и до завершения выполнения sqlCancel или SQLCancelHandle была вызвана на ОператорHandle. Затем функция SQLTablePrivileges снова была вызвана на ОператорHandle.

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

(DM) Атрибут инструкции SQL_ATTR_METADATA_ID был задан как SQL_TRUE, а аргумент SchemaName или TableName был пустым указателем.
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 Function.
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 должен вызываться на дескрипторе для выполнения последующей обработки и завершения операции.

Комментарии

Аргументы 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_QUALIFIER TABLE_CAT
TABLE_OWNER TABLE_SCHEM

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

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

Для всех строк, в которых значение в столбце GRANTEE является владельцем объекта, столбец GRANTOR будет "_SYSTEM".
GRANTEE (ODBC 1.0) 5 Varchar не NULL Имя пользователя, которому предоставлена привилегия.
PRIVILEGE (ODBC 1.0) 6 Varchar не NULL Привилегия таблицы. Может быть одним из следующих привилегий или привилегии для конкретного источника данных.

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

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

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

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

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

Область действия, разрешенная участником заданной привилегией таблицы, зависит от источника данных. Например, привилегия UPDATE может позволить участнику обновить все столбцы таблицы в одном источнике данных и только те столбцы, для которых участник имеет привилегию UPDATE в другом источнике данных.
IS_GRANTABLE (ODBC 1.0) 7 Varchar Указывает, разрешено ли участнику предоставлять права другим пользователям; Значение "ДА", "НЕТ" или NULL, если неизвестно или не применимо к источнику данных.

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

Пример кода

Пример кода аналогичной функции см . в разделе SQLColumns.

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

См. также

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