Función SQLColumnPrivileges

Conformidad
Versión introducida: Cumplimiento de estándares ODBC 1.0: ODBC

Resumen
SQLColumnPrivileges devuelve una lista de columnas y privilegios asociados para la tabla especificada. El controlador devuelve la información como un conjunto de resultados en el statementHandle especificado.

Sintaxis

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

Argumentos

StatementHandle
[Entrada] Identificador de instrucción.

CatalogName
[Entrada] Nombre del catálogo. Si un controlador admite nombres para algunos catálogos pero no para otros, como cuando el controlador recupera datos de dbMS diferentes, una cadena vacía ("") denota esos catálogos que no tienen nombres. CatalogName no puede contener un patrón de búsqueda de cadenas.

Si el atributo de instrucción 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, CatalogName es un argumento ordinario; se trata literalmente y su caso es significativo. Para obtener más información, vea Argumentos en funciones de catálogo.

NameLength1
[Entrada] Longitud en caracteres de *CatalogName.

SchemaName
[Entrada] Nombre del esquema. Si un controlador admite esquemas para algunas tablas, pero no para otras, como cuando el controlador recupera datos de dbMS diferentes, una cadena vacía ("") denota las tablas que no tienen esquemas. SchemaName no puede contener un patrón de búsqueda de cadenas.

Si el atributo de instrucción SQL_ATTR_METADATA_ID se establece en SQL_TRUE, SchemaName se trata como un identificador. Si es SQL_FALSE, SchemaName es un argumento ordinario; se trata literalmente y su caso es significativo.

NameLength2
[Entrada] Longitud en caracteres de *SchemaName.

TableName
[Entrada] Nombre de tabla. Este argumento no puede ser un puntero nulo. TableName no puede contener un patrón de búsqueda de cadenas.

Si el atributo de instrucción SQL_ATTR_METADATA_ID se establece en SQL_TRUE, TableName se trata como un identificador y su caso no es significativo. Si es SQL_FALSE, TableName es un argumento ordinario; se trata literalmente y su caso es significativo.

NameLength3
[Entrada] Longitud en caracteres de *TableName.

ColumnName
[Entrada] Patrón de búsqueda de cadenas para nombres de columna.

Si el atributo de instrucción SQL_ATTR_METADATA_ID se establece en SQL_TRUE, ColumnName se trata como un identificador y su caso no es significativo. Si es SQL_FALSE, ColumnName es un argumento de valor de patrón; se trata literalmente y su caso es significativo.

NameLength4
[Entrada] Longitud en caracteres de *ColumnName.

Devoluciones

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_STILL_EXECUTING, SQL_ERROR o SQL_INVALID_HANDLE.

Diagnóstico

Cuando SQLColumnPrivileges 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 identificador de StatementHandle. En la tabla siguiente se enumeran los valores SQLSTATE devueltos normalmente por SQLColumnPrivileges y se explica cada uno de ellos en el contexto de esta función; la notación "(DM)" precede a las descripciones de SQLSTATEs devueltas por el Administrador de controladores. El código de retorno asociado a cada valor SQLSTATE es SQL_ERROR, a menos que se indique lo contrario.

SQLSTATE Error Descripción
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 Se ha abierto un cursor en StatementHandle y se ha llamado a SQLFetch o SQLFetchScroll . El Administrador de controladores devuelve este error si SQLFetch o SQLFetchScroll no ha devuelto SQL_NO_DATA y el controlador devuelve si SQLFetch o SQLFetchScroll ha devuelto SQL_NO_DATA.

Se ha abierto un cursor en StatementHandle, pero no se ha llamado a SQLFetch o 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 general 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 llamó a la función y antes de completar la ejecución, se llamó a SQLCancel o SQLCancelHandle en StatementHandle. A continuación, se llamó a la función de nuevo en StatementHandle.

Se llamó a la función y antes de completar la ejecución, se llamó a SQLCancel o SQLCancelHandle en statementHandle desde un subproceso diferente en una aplicación multiproceso.
HY009 Uso no válido del puntero nulo El argumento TableName era un puntero nulo.

El atributo de instrucción SQL_ATTR_METADATA_ID se estableció en SQL_TRUE, el argumento CatalogName era un puntero nulo y el SQL_CATALOG_NAME InfoType devuelve que se admiten los nombres de catálogo.

(DM) El atributo de instrucción SQL_ATTR_METADATA_ID se estableció en SQL_TRUE y el argumento SchemaName o ColumnName era un puntero nulo.
HY010 Error de secuencia de función (DM) Se llamó a una función de ejecución asincrónica para el identificador de conexión asociado a StatementHandle. Esta función asincrónica todavía se estaba ejecutando cuando se llamó a esta función.

(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 de ejecución 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 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 de nombre era menor que 0, pero no igual a SQL_NTS.
El valor de uno de los argumentos de longitud de nombre superó el valor de longitud máxima del nombre correspondiente. (Vea "Comments.")
HY117 La conexión se suspende debido al estado de transacción desconocido. Solo se permiten funciones de desconexión y de solo lectura. (DM) Para obtener más información sobre el estado suspendido, vea Función SQLEndTran.
HYC00 Característica opcional no implementada Se especificó un nombre de catálogo y el controlador o el origen de datos no admite catálogos.

Se especificó un nombre de esquema y el controlador o el origen de datos no admite esquemas.

Se especificó un patrón de búsqueda de cadenas para el nombre de columna y el origen de datos no admite patrones de búsqueda para ese argumento.

La combinación de la configuración actual de los atributos de instrucción SQL_CONCURRENCY y SQL_CURSOR_TYPE no era compatible con 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 Tiempo de espera agotado 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 a través de 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 responda 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 posprocesamiento y completar la operación.

Comentarios

SQLColumnPrivileges devuelve los resultados como un conjunto de resultados estándar, ordenado por TABLE_CAT, TABLE_SCHEM, TABLE_NAME, COLUMN_NAME y PRIVILEGE.

Nota

Es posible que SQLColumnPrivileges no devuelva privilegios para todas las columnas. Por ejemplo, un controlador podría no devolver información sobre los privilegios para pseudo columnas, como Oracle ROWID. Las aplicaciones pueden usar cualquier columna válida, independientemente de si SQLColumnPrivileges la devuelve.

Las longitudes de las columnas VARCHAR no se muestran en la tabla; las longitudes reales dependen del origen de datos. Para determinar las longitudes reales de las columnas CATALOG_NAME, SCHEMA_NAME, TABLE_NAME y COLUMN_NAME, una aplicación puede llamar a SQLGetInfo con las opciones de SQL_MAX_CATALOG_NAME_LEN, SQL_MAX_SCHEMA_NAME_LEN, SQL_MAX_TABLE_NAME_LEN y SQL_MAX_COLUMN_NAME_LEN.

Nota

Para obtener más información sobre el uso general, los argumentos y los datos devueltos de las 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 columna no afectan a la compatibilidad con versiones anteriores porque las aplicaciones se enlazan por número de columna.

Columna ODBC 2.0 ODBC 3. columna x
TABLE_QUALIFIER TABLE_CAT
TABLE_OWNER 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 8 (IS_GRANTABLE). Una aplicación debe obtener acceso a columnas específicas del controlador contando hacia abajo 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 datos Comentarios
TABLE_CAT (ODBC 1.0) 1 Varchar Identificador de catálogo; NULL si no es aplicable al origen de datos. Si un controlador admite catálogos para algunas tablas, pero no para otras, como cuando el controlador recupera datos de dbMS diferentes, devuelve una cadena vacía ("") para las tablas que no tienen catálogos.
TABLE_SCHEM (ODBC 1.0) 2 Varchar Identificador de esquema; NULL si no es aplicable al origen de datos. Si un controlador admite esquemas para algunas tablas, pero no para otras, como cuando el controlador recupera datos de dbMS diferentes, devuelve una cadena vacía ("") para las tablas que no tienen esquemas.
TABLE_NAME (ODBC 1.0) 3 Varchar no NULL Identificador de tabla.
COLUMN_NAME (ODBC 1.0) 4 Varchar no NULL Nombre de la columna. El controlador devuelve una cadena vacía para una columna que no tiene un nombre.
GRANTOR (ODBC 1.0) 5 Varchar Nombre del usuario que concedió el privilegio; NULL si no es aplicable al origen de datos.

Para todas las filas en las que el valor de la columna GRANTEE es el propietario del objeto, la columna GRANTOR será "_SYSTEM".
GRANTEE (ODBC 1.0) 6 Varchar no NULL Nombre del usuario al que se concedió el privilegio.
PRIVILEGE (ODBC 1.0) 7 Varchar no NULL Identifica el privilegio de columna. Puede ser uno de los siguientes (u otros admitidos por el origen de datos cuando se define la implementación):

SELECT: el receptor puede recuperar datos de la columna.

INSERT: el receptor puede proporcionar datos para la columna en filas nuevas que se insertan en la tabla asociada.

UPDATE: el receptor puede actualizar los datos de la columna.

REFERENCES: el receptor puede hacer referencia a la columna dentro de una restricción (por ejemplo, una restricción unique, referencial o table check).
IS_GRANTABLE (ODBC 1.0) 8 Varchar Indica si el receptor tiene permiso para conceder el privilegio a otros usuarios; "SÍ", "NO" o "NULL" si se desconoce o no es aplicable al origen de datos.

Un privilegio es concedeble o no concedeble, 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 contienen el mismo valor.

Ejemplo de código

Para obtener un ejemplo de código de una función similar, vea Función SQLColumns.

Para información acerca de Vea
Enlace de un búfer a una columna de un conjunto de resultados SQLBindCol (función)
Cancelación del procesamiento de instrucciones Función SQLCancel
Devolver las columnas de una tabla o tablas Función SQLColumns
Capturar un bloque de datos o desplazarse por un conjunto de resultados Función SQLFetchScroll
Captura de varias filas de datos Función SQLFetch
Devolver privilegios para una tabla o tablas Función SQLTablePrivileges
Devolver una lista de tablas en un origen de datos Función SQLTables

Consulte también

Referencia de API ODBC
Archivos de encabezado de ODBC