Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Conformidad
Versión introducida: Cumplimiento de Normas ODBC 1.0: ODBC
Resumen
SQLTablePrivileges devuelve una lista de tablas y los privilegios asociados a cada tabla. El controlador devuelve la información como conjunto de resultados en la instrucción especificada.
Syntax
SQLRETURN SQLTablePrivileges(
SQLHSTMT StatementHandle,
SQLCHAR * CatalogName,
SQLSMALLINT NameLength1,
SQLCHAR * SchemaName,
SQLSMALLINT NameLength2,
SQLCHAR * TableName,
SQLSMALLINT NameLength3);
Arguments
StatementHandle
[Entrada] Identificador de instrucciones.
CatalogName
[Entrada] Catálogo de tablas. Si un controlador soporta catálogos para algunas tablas pero no para otras, como cuando el controlador recupera datos de diferentes SGBD, una cadena vacía ("") denota aquellas tablas que no tienen catálogos.
CatalogName no puede contener un patrón de búsqueda en cadenas.
Si el atributo de la sentencia SQL_ATTR_METADATA_ID se establece en SQL_TRUE, CatalogName se trata como un identificador y su caso no es significativo. Si es SQL_FALSE, Nombre de Catálogo es un argumento ordinario; Se trata literalmente, y su caso es significativo. Para obtener más información, consulte Argumentos en funciones de catálogo.
NameLength1
[Entrada] Longitud en caracteres de *NombreDeCatálogo.
SchemaName
[Entrada] Patrón de búsqueda de cadenas para nombres de esquemas. Si un controlador soporta esquemas para algunas tablas pero no para otras, como cuando recupera datos de diferentes SGBD, una cadena vacía ("") denota aquellas tablas que no tienen esquemas.
Si el atributo de la sentencia SQL_ATTR_METADATA_ID se establece en SQL_TRUE, SchemaName se trata como un identificador y su caso no es significativo. Si es SQL_FALSE, Nombre de Esquema es un argumento de valor de patrón; Se trata literalmente, y su caso es significativo.
NameLength2
[Entrada] Longitud en caracteres de *NombreEsquema.
TableName
[Entrada] Patrón de búsqueda de cadenas para nombres de tablas.
Si el atributo de la sentencia SQL_ATTR_METADATA_ID se establece en SQL_TRUE, TableName se considera un identificador y su caso no es significativo. Si es SQL_FALSE, TableName es un argumento de valor de patrón; Se trata literalmente, y su caso es significativo.
NameLength3
[Entrada] Longitud en caracteres de *NombreDeTabla.
Returns
SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_STILL_EXECUTING, SQL_ERROR o SQL_INVALID_HANDLE.
Diagnostics
Cuando SQLTablePrivileges devuelve SQL_ERROR o SQL_SUCCESS_WITH_INFO, se puede obtener un valor SQLSTATE asociado llamando a SQLGetDiagRec con un HandleType de SQL_HANDLE_STMT y un Handle de StatementHandle. La siguiente tabla enumera los valores de SQLSTATE que comúnmente devuelven SQLTablePrivileges y explica cada uno en el contexto de esta función; la notación "(DM)" precede a las descripciones de los SQLSTATE devueltas por el Driver Manager. El código de retorno asociado a cada valor SQLSTATE es SQL_ERROR, a menos que se indique lo contrario.
| SQLSTATE | Error | Description |
|---|---|---|
| 01000 | Advertencia general | Mensaje informativo específico del controlador. (Function devuelve SQL_SUCCESS_WITH_INFO). |
| 08S01 | Error de vínculo de comunicación | Se produjo un error en el vínculo de comunicación entre el controlador y el origen de datos al que se conectó el controlador antes de que la función completara el procesamiento. |
| 24000 | Estado de cursor no válido | Había un cursor abierto en el StatementHandle, y se había llamado a SQLFetch o SQLFetchScroll . Este error es devuelto por el Administrador de Controladores si SQLFetch o SQLFetchScroll no han devuelto SQL_NO_DATA y es devuelto por el controlador si SQLFetch o SQLFetchScroll han devuelto SQL_NO_DATA. Había un cursor abierto en el HandleStatement, pero no se había llamado a SQLFetch ni SQLFetchScroll . |
| 40001 | Error de serialización | La transacción se revierte debido a un interbloqueo de recursos con otra transacción. |
| 40003 | Finalización de instrucciones desconocida | Error en la conexión asociada durante la ejecución de esta función y no se puede determinar el estado de la transacción. |
| HY000 | Error genérico | Se produjo un error para el que no había ningún SQLSTATE específico y para el que no se definió SQLSTATE específico de la implementación. El mensaje de error devuelto por SQLGetDiagRec en el búfer *MessageText describe el error y su causa. |
| HY001 | Error de asignación de memoria | El controlador no pudo asignar memoria necesaria para admitir la ejecución o finalización de la función. |
| HY008 | Operación cancelada | El procesamiento asincrónico se ha habilitado para StatementHandle. Se llamaba a la función SQLTablePrivileges y, antes de que completara su ejecución, se llamaba a SQLCancel o SQLCancelHandle en el StatementHandle. Luego se llamaba de nuevo a la función SQLTablePrivileges en el StatementHandle. Se llamaba a la función SQLTablePrivileges y, antes de que completara su ejecución, se llamaba a SQLCancel o SQLCancelHandle en el StatementHandle desde un hilo diferente en una aplicación multihilo. |
| HY009 | Uso no válido del puntero nulo | El atributo de la sentencia SQL_ATTR_METADATA_ID se estableció en SQL_TRUE, el argumento Nombre del Catálogo era un puntero nulo, y el InfoType SQL_CATALOG_NAME devuelve que los nombres de catálogo están soportados. (DM) El atributo de la sentencia SQL_ATTR_METADATA_ID se estableció en SQL_TRUE, y el argumento SchemaName o TableName era un puntero nulo. |
| HY010 | Error de secuencia de funciones | (DM) Se llamó a una función de ejecución asincrónica para el identificador de conexión asociado a StatementHandle. Esta función asíncrona seguía ejecutándose cuando se llamó la función SQLTablePrivileges . (DM) SQLExecute, SQLExecDirect o SQLMoreResults se llamó a para statementHandle y devolvió SQL_PARAM_DATA_AVAILABLE. Se llamó a esta función antes de recuperar los datos para todos los parámetros transmitidos. (DM) Se llamó a una función que ejecuta de forma asincrónica (no esta) para statementHandle y todavía se estaba ejecutando cuando se llamó a esta función. (DM) SE llamó a SQLExecute, SQLExecDirect, SQLBulkOperations o SQLSetPos para el statementHandle y devolvió SQL_NEED_DATA. Se llamó a esta función antes de enviar datos para todos los parámetros o columnas de datos en ejecución. |
| HY013 | Error de administración de memoria | No se pudo procesar la llamada de función porque no se pudo tener acceso a los objetos de memoria subyacentes, posiblemente debido a condiciones de memoria baja. |
| HY090 | Longitud de búfer o cadena no válida | (DM) El valor de uno de los argumentos de longitud del nombre era menor que 0 pero no igual a SQL_NTS. El valor de uno de los argumentos de longitud del nombre superaba el valor máximo de longitud para el calificador o nombre correspondiente. |
| HY117 | La conexión se suspende debido al estado de transacción desconocido. Solo se permiten las funciones de desconexión y solo lectura. | (DM) Para más información sobre el estado suspendido, véase Función SQLEndTran. |
| HYC00 | Característica opcional no implementada | Se especificó un catálogo, y el controlador o la fuente de datos no soporta catálogos. Se especificó un esquema, y el controlador o la fuente de datos no soporta esquemas. Se especificó un patrón de búsqueda en cadena para el esquema de la tabla, nombre de la tabla o nombre de columna, y la fuente de datos no soporta patrones de búsqueda para uno o más de esos argumentos. La combinación de la configuración actual de la SQL_ATTR_CONCURRENCY y los atributos de instrucción SQL_ATTR_CURSOR_TYPE no se admiten en el controlador o el origen de datos. El atributo de instrucción SQL_ATTR_USE_BOOKMARKS se estableció en SQL_UB_VARIABLE y el atributo de instrucción SQL_ATTR_CURSOR_TYPE se estableció en un tipo de cursor para el que el controlador no admite marcadores. |
| HYT00 | Se ha agotado el tiempo de espera | El período de tiempo de espera de la consulta expiró antes de que el origen de datos devolva el conjunto de resultados. El período de tiempo de espera se establece mediante SQLSetStmtAttr, SQL_ATTR_QUERY_TIMEOUT. |
| HYT01 | Se ha agotado el tiempo de espera de la conexión. | El período de tiempo de espera de conexión expiró antes de que el origen de datos respondiera a la solicitud. El período de tiempo de espera de conexión se establece a través de SQLSetConnectAttr, SQL_ATTR_CONNECTION_TIMEOUT. |
| IM001 | El controlador no admite esta función | (DM) El controlador asociado a StatementHandle no admite la función . |
| IM017 | El sondeo está deshabilitado en modo de notificación asincrónica | Cada vez que se usa el modelo de notificación, el sondeo está deshabilitado. |
| IM018 | No se ha llamado a SQLCompleteAsync para completar la operación asincrónica anterior en este identificador. | Si la llamada de función anterior en el identificador devuelve SQL_STILL_EXECUTING y si el modo de notificación está habilitado, se debe llamar a SQLCompleteAsync en el identificador para realizar el procesamiento posterior y completar la operación. |
Comentarios
Los argumentos SchemaName y TableName aceptan patrones de búsqueda. Para más información sobre patrones de búsqueda válidos, véase Argumentos de Valor de Patrón.
SQLTablePrivileges devuelve los resultados como un conjunto estándar, ordenados por TABLE_CAT, TABLE_SCHEM, TABLE_NAME, PRIVILEGE y GRANTEE.
Para determinar la longitud real de las columnas de TABLE_CAT, TABLE_SCHEM y TABLE_NAME, una aplicación puede llamar a SQLGetInfo con las opciones de SQL_MAX_CATALOG_NAME_LEN, SQL_MAX_SCHEMA_NAME_LEN y SQL_MAX_TABLE_NAME_LEN.
Note
Para obtener más información sobre el uso general, los argumentos y los datos devueltos de funciones de catálogo ODBC, vea Funciones de catálogo.
Se ha cambiado el nombre de las columnas siguientes para ODBC 3.x. Los cambios en el nombre de las columnas no afectan la compatibilidad hacia atrás porque las aplicaciones se vinculan por número de columna.
| Columna ODBC 2.0 | Columna ODBC 3.x |
|---|---|
| TABLE_QUALIFIER | TABLE_CAT |
| PROPIETARIO_DE_TABLA | TABLE_SCHEM |
En la tabla siguiente se enumeran las columnas del conjunto de resultados. El controlador puede definir columnas adicionales más allá de la columna 7 (IS_GRANTABLE). Una aplicación debe acceder a columnas específicas del controlador contando hacia atrás desde el final del conjunto de resultados en lugar de especificar una posición ordinal explícita. Para obtener más información, vea Datos devueltos por funciones de catálogo.
| Nombre de la columna | Número de columna | Tipo de dato | Comentarios |
|---|---|---|---|
| TABLE_CAT (ODBC 1.0) | 1 | Varchar | Nombre del catálogo; NULL si no es aplicable a la fuente de datos. Si un controlador soporta catálogos para algunas tablas pero no para otras, como cuando el controlador recupera datos de diferentes SGBD, devuelve una cadena vacía ("") para aquellas tablas que no tienen catálogos. |
| TABLE_SCHEM (ODBC 1.0) | 2 | Varchar | Nombre del esquema; NULL si no es aplicable a la fuente de datos. Si un controlador soporta esquemas para algunas tablas pero no para otras, como cuando recupera datos de diferentes SGBD, devuelve una cadena vacía ("") para aquellas tablas que no tienen esquemas. |
| TABLE_NAME (ODBC 1.0) | 3 | Varchar no NULL | Nombre de la tabla. |
| GRANTOR (ODBC 1.0) | 4 | Varchar | Nombre del usuario que concedió el privilegio; NULL si no es aplicable a la fuente de datos. Para todas las filas en las que el valor en la columna de GRANTA sea el propietario del objeto, la columna GRANTOR será "_SYSTEM". |
| DE GRACIA (ODBC 1.0) | 5 | Varchar no NULL | Nombre del usuario al que se le concedió el privilegio. |
| PRIVILEGIO (ODBC 1.0) | 6 | Varchar no NULL | El privilegio de la mesa. Puede ser uno de los siguientes o un privilegio específico de la fuente de datos. SELECT: El beneficiario puede recuperar datos de una o más columnas de la tabla. INSERT: El beneficiario puede insertar nuevas filas que contengan datos de una o más columnas en la tabla. UPDATE: El beneficiario puede actualizar los datos en una o más columnas de la tabla. DELETE: El beneficiario puede eliminar filas de datos de la tabla. REFERENCIAS: El beneficiario puede referirse a una o más columnas de la tabla dentro de una restricción (por ejemplo, una restricción única, referencial o de comprobación de tabla). El alcance de la acción permitido al beneficiario por un privilegio de tabla determinado depende de la fuente de datos. Por ejemplo, el UPDATE privilegio podría permitir al beneficiario actualizar todas las columnas de una tabla en una fuente de datos y solo aquellas para las que el otorgante tiene privilegio UPDATE en otra fuente de datos. |
| IS_GRANTABLE (ODBC 1.0) | 7 | Varchar | Indica si el beneficiario puede conceder el privilegio a otros usuarios; "SÍ", "NO" o NULL si es desconocido o no es aplicable a la fuente de datos. Un privilegio es concedible o no, pero no ambos. El conjunto de resultados devuelto por SQLColumnPrivileges nunca contendrá dos filas para las que todas las columnas excepto la columna IS_GRANTABLE contengan el mismo valor. |
Ejemplo de código
Para un ejemplo de código de una función similar, véase SQLColumns.
Funciones relacionadas
| Para obtener información sobre | Vea |
|---|---|
| Enlazar un búfer a una columna de un conjunto de resultados | Función SQLBindCol |
| Cancelación del procesamiento de instrucciones | Función SQLCancel |
| Retorno de privilegios para una columna o columnas | Función SQLColumnPrivileges |
| Devolver las columnas en una tabla o tablas | Función SQLColumns |
| Obtención de una sola fila o bloque de datos en dirección solo directa | Función SQLFetch |
| Capturar un bloque de datos o desplazarse por un conjunto de resultados | Función SQLFetchScroll |
| Devolución de estadísticas e índices de tablas | Función SQLStatistics |
| Devolver una lista de tablas en una fuente de datos | Función SQLTables |