Partilhar via


Função SQLStatistics

SQLStatistics Recupera uma lista de estatísticas sobre uma única tabela e os índices associados a essa tabela. O condutor devolve a informação como conjunto de resultados.

Conformidade

Versão introduzida: Conformidade com as Normas ODBC 1.0: ISO 92

Sintaxe

SQLRETURN SQLStatistics(
     SQLHSTMT        StatementHandle ,
     SQLCHAR *       CatalogName ,
     SQLSMALLINT     NameLength1 ,
     SQLCHAR *       SchemaName ,
     SQLSMALLINT     NameLength2 ,
     SQLCHAR *       TableName ,
     SQLSMALLINT     NameLength3 ,
     SQLUSMALLINT    Unique ,
     SQLUSMALLINT    Reserved);

Arguments

HandleStatement

[Entrada] Identificador do extrato.

Nome do Catálogo

[Entrada] Nome do catálogo. Se um driver suporta catálogos para algumas tabelas mas não para outras, como quando o driver recupera dados de diferentes SGBD, uma string vazia ("") indica aquelas tabelas que não têm catálogos. O CatalogName não pode conter um padrão de pesquisa em cadeia de caracteres.

Se o SQL_ATTR_METADATA_ID atributo da instrução estiver definido como SQL_TRUE, CatalogName é tratado como identificador e o seu caso não é significativo. Se for SQL_FALSE, Nome do Catálogo é um argumento comum; é tratado literalmente, e o seu caso é significativo. Para mais informações, consulte Argumentos em Funções de Catálogo.

NomeComprimento1

[Entrada] Comprimento em caracteres do CatalogName.

Nome do esquema

[Entrada] Nome do esquema. Se um driver suporta esquemas para algumas tabelas mas não para outras, como quando o driver recupera dados de diferentes SGBD, uma string vazia ("") indica as tabelas que não têm esquemas. O SchemaName não pode conter um padrão de pesquisa de cadeias.

Se o SQL_ATTR_METADATA_ID atributo da instrução for definido como SQL_TRUE, SchemaName é tratado como um identificador e o seu caso não é significativo. Se for SQL_FALSE, o Nome do Esquema é um argumento comum; é tratado literalmente, e o seu caso é significativo.

NomeComprimento2

[Entrada] Comprimento em caracteres do NomeEsquema.

Nome da tabela

[Entrada] Nome da mesa. Este argumento não pode ser um ponto nulo. O TableName não consegue conter um padrão de pesquisa de cadeias.

Se o SQL_ATTR_METADATA_ID atributo da instrução for definido como SQL_TRUE, TableName é tratado como identificador e o seu caso não é significativo. Se for SQL_FALSE, TableName é um argumento comum; é tratado literalmente, e o seu caso é significativo.

NomeComprimento3

[Entrada] Comprimento em caracteres do TableName.

Único

[Entrada] Tipo de índice: SQL_INDEX_UNIQUE ou SQL_INDEX_ALL.

Reservado

[Entrada] Indica a importância das CARDINALITY colunas e PAGES no conjunto de resultados. As seguintes opções afetam apenas o retorno das CARDINALITY colunas e PAGES ; a informação do índice é devolvida mesmo que CARDINALITY e PAGES não forem devolvidas.

SQL_ENSURE solicita que o controlador recupere incondicionalmente as estatísticas. (Drivers que cumprem apenas o padrão Open Group e não suportam extensões ODBC não poderão suportar SQL_ENSURE.)

SQL_QUICK solicita que o driver recupere os CARDINALITY e PAGES só se estiverem facilmente disponíveis no servidor. Neste caso, o driver não garante que os valores estão atuais. (As aplicações escritas para o padrão Open Group receberão sempre SQL_QUICK comportamento de drivers compatíveis com ODBC 3.x.)

Devoluções

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_STILL_EXECUTING, SQL_ERROR, ou SQL_INVALID_HANDLE.

Diagnóstico

Quando SQLStatistics retorna SQL_ERROR ou SQL_SUCCESS_WITH_INFO, um valor associado SQLSTATE pode ser obtido chamando SQLGetDiagRec com um HandleType de SQL_HANDLE_STMT e um Handle de StatementHandle. A tabela seguinte lista os SQLSTATE valores normalmente devolvidos por SQLStatistics e explica cada um no contexto desta função; a notação (DM) precede as descrições de cada SQLSTATE um devolvidas pelo Gestor de Drivers. O código de retorno associado a cada SQLSTATE valor é SQL_ERROR, salvo indicação em contrário.

SQLSTATE Erro Description
01000 Aviso geral Mensagem informativa específica para o condutor. (A função retorna SQL_SUCCESS_WITH_INFO.)
08S01 Falha da ligação de comunicação A ligação de comunicação entre o driver e a fonte de dados à qual o driver estava ligado falhou antes de a função concluir o processamento.
24000 Estado do cursor inválido Um cursor estava aberto no HandleStatement, e SQLFetch ou SQLFetchScroll tinha sido chamado. Este erro é devolvido pelo Gestor de Condutores se SQLFetch for ou SQLFetchScroll não tiver retornado SQL_NO_DATA e é devolvido pelo condutor se SQLFetch ou SQLFetchScroll tiver retornado SQL_NO_DATA.

Um cursor estava aberto no StatementHandle, mas SQLFetch ou SQLFetchScroll não tinha sido chamado.
40001 Falha de serialização A transação foi revertida devido a um bloqueio de recursos com outra transação.
40003 Conclusão da afirmação desconhecida A ligação associada falhou durante a execução desta função, e o estado da transação não pode ser determinado.
HY000 Erro geral Ocorreu um erro para o qual não existia uma especificidade SQLSTATE específica e para a qual nenhuma implementação SQLSTATE específica foi definida. A mensagem de erro devolvida SQLGetDiagRec no *MessageText buffer descreve o erro e a sua causa.
HY001 Erro de alocação de memória O controlador não conseguiu alocar a memória necessária para suportar a execução ou conclusão da função.
HY008 Operação cancelada O processamento assíncrono foi ativado para o StatementHandle. A função era chamada, e antes de terminar a execução, SQLCancel ou SQLCancelHandle ser chamada no StatementHandle, e depois a função era chamada novamente no StatementHandle.

A função era chamada, e antes de terminar a execução, SQLCancel ou SQLCancelHandle era chamada no StatementHandle a partir de outro thread numa aplicação multithread.
HY009 Uso inválido do ponteiro nulo O argumento TableName era um ponteiro nulo.

O SQL_ATTR_METADATA_ID atributo da instrução foi definido para SQL_TRUE, o argumento CatalogName era um ponteiro nulo, e o SQL_CATALOG_NAMEInfoType devolve que os nomes de catálogo são suportados.

(DM) O SQL_ATTR_METADATA_ID atributo da instrução foi definido para SQL_TRUE, e o argumento SchemaName era um ponteiro nulo.
HY010 Erro de sequência de funções (DM) Uma função de execução assíncrona era chamada para o handle de ligação associado ao StatementHandle. Esta função assíncrona continuava a ser executada quando a SQLStatistics função era chamada.

(DM) SQLExecute, SQLExecDirect, ou SQLMoreResults foi chamado para o HandleStatement e retornou SQL_PARAM_DATA_AVAILABLE. Esta função era chamada antes de os dados serem recuperados para todos os parâmetros transmitidos.

(DM) Uma função de execução assíncrona (não esta) era chamada para o StatementHandle e continuava a ser executada quando esta função era chamada.

(DM) SQLExecute, SQLExecDirect, SQLBulkOperations, ou SQLSetPos foi chamada para o HandleStatement e retornou SQL_NEED_DATA. Esta função era chamada antes de os dados serem enviados para todos os parâmetros ou colunas de dados na execução.
HY013 Erro de gestão de memória A chamada de função não podia ser processada porque os objetos de memória subjacentes não podiam ser acedidos, possivelmente devido a condições de baixa memória.
HY090 Comprimento inválido da corda ou do buffer (DM) O valor de um dos argumentos do comprimento do nome era menor que 0 mas não igual a SQL_NTS.

O valor de um dos argumentos do comprimento do nome excedia o valor máximo de comprimento do nome correspondente.
HY100 Opção de unicidade fora do intervalo (DM) Foi especificado um valor único inválido.
HY101 Tipo de opção de precisão fora do alcance (DM) Foi especificado um valor Reservado inválido.
HY117 A ligação é suspensa devido ao estado desconhecido da transação. Apenas funções de desconexão e de leitura são permitidas. (DM) Para mais informações sobre o estado suspenso, veja Função SQLEndTran.
HYC00 Funcionalidade opcional não implementada Foi especificado um catálogo, e o driver ou fonte de dados não suporta catálogos.

Foi especificado um esquema, e o driver ou fonte de dados não suporta esquemas.

A combinação das definições atuais dos SQL_ATTR_CONCURRENCY atributos da instrução e SQL_ATTR_CURSOR_TYPE não era suportada pelo driver ou pela fonte de dados.

O SQL_ATTR_USE_BOOKMARKS atributo da instrução foi definido para SQL_UB_VARIABLE, e o SQL_ATTR_CURSOR_TYPE atributo da instrução foi definido para um tipo de cursor para o qual o driver não suporta favoritos.
HYT00 O tempo expirou O período de tempo de espera da consulta expirava antes de a fonte de dados devolver o conjunto de resultados solicitado. O período de timeout é definido através de SQLSetStmtAttr, SQL_ATTR_QUERY_TIMEOUT.
HYT01 Expirou o tempo limite de ligação O período de timeout da ligação expirou antes de a fonte de dados responder ao pedido. O período de tempo de extinção da ligação é definido através de SQLSetConnectAttr, SQL_ATTR_CONNECTION_TIMEOUT.
IM001 O driver não suporta esta função (DM) O driver associado ao StatementHandle não suporta a função.
IM017 A sondagem está desativada no modo de notificação assíncrona Sempre que o modelo de notificação é utilizado, o sonding é desativado.
IM018 SQLCompleteAsync não foi chamado para completar a operação assíncrona anterior neste handle. Se a chamada de função anterior no handle regressar SQL_STILL_EXECUTING e se o modo de notificação estiver ativado, SQLCompleteAsync deve ser chamada no handle para fazer pós-processamento e completar a operação.

Comments

SQLStatistics retorna informação sobre uma única tabela como conjunto padrão de resultados, ordenado por NON_UNIQUE, TYPE, INDEX_QUALIFIER, INDEX_NAME, e ORDINAL_POSITION. O conjunto de resultados combina informação estatística (nas CARDINALITY colunas e PAGES do conjunto de resultados) para a tabela com informações sobre cada índice. Para informações sobre como esta informação pode ser utilizada, consulte Utilizações dos Dados de Catálogo.

Para determinar os comprimentos reais dos , , , e COLUMN_NAME das colunas, uma aplicação pode chamar SQLGetInfo com as SQL_MAX_CATALOG_NAME_LENopções, SQL_MAX_SCHEMA_NAME_LEN, SQL_MAX_TABLE_NAME_LEN, e SQL_MAX_COLUMN_NAME_LEN . TABLE_NAMETABLE_SCHEMTABLE_CAT

Observação

Para mais informações sobre o uso geral, argumentos e dados devolvidos das funções de catálogo ODBC, consulte Funções de Catálogo.

As colunas seguintes foram renomeadas para ODBC 3.x. As alterações no nome das colunas não afetam a compatibilidade retroativa porque as aplicações associam por número de coluna.

Coluna ODBC 2.0 Coluna ODBC 3.x
TABLE_QUALIFIER TABLE_CAT
TABLE_OWNER TABLE_SCHEM
SEQ_IN_INDEX ORDINAL_POSITION
COLLATION ASC_OR_DESC

A tabela seguinte lista as colunas do conjunto de resultados. Colunas adicionais para além da coluna 13 (FILTER_CONDITION) podem ser definidas pelo driver. Uma aplicação deve aceder a colunas específicas do driver contando decrescentemente a partir do final do conjunto de resultados em vez de especificar uma posição ordinal explícita. Para mais informações, consulte Dados Devolvidos por Funções de Catálogo.

Nome da coluna Número da coluna Tipo de dados Comments
TABLE_CAT (ODBC 1.0) 1 Varchar Nome do catálogo da tabela à qual a estatística ou índice se aplica; NULL Se não for aplicável à fonte de dados. Se um driver suporta catálogos para algumas tabelas mas não para outras, como quando o driver recupera dados de diferentes SGBD, devolve uma string vazia ("") para as tabelas que não têm catálogos.
TABLE_SCHEM (ODBC 1.0) 2 Varchar Nome do esquema da tabela à qual a estatística ou índice se aplica; NULL Se não for aplicável à fonte de dados. Se um driver suportar esquemas para algumas tabelas mas não para outras, como quando o driver recupera dados de diferentes SGBD, devolve uma string vazia ("") para as tabelas que não têm esquemas.
TABLE_NAME (ODBC 1.0) 3 Varchar não NULL Nome da tabela à qual a estatística ou índice se aplica.
NON_UNIQUE (ODBC 1.0) 4 smallint Indica se o índice não permite valores duplicados:

SQL_TRUE se os valores do índice podem ser não únicos.

SQL_FALSE se os valores do índice devem ser únicos.

NULL é devolvido se TYPE for SQL_TABLE_STAT.
INDEX_QUALIFIER (ODBC 1.0) 5 Varchar O identificador usado para qualificar o nome do índice fazendo um DROP INDEX; NULL é devolvido se um qualificador de índice não for suportado pela fonte de dados ou se TYPE for SQL_TABLE_STAT. Se um valor não nulo for devolvido nesta coluna, deve ser usado para qualificar o nome do índice numa DROP INDEX instrução; caso contrário, deve TABLE_SCHEM ser usado para qualificar o nome do índice.
INDEX_NAME (ODBC 1.0) 6 Varchar Nome do índice; NULL é devolvido se TYPE for SQL_TABLE_STAT.
TYPE (ODBC 1.0) 7 smallint not NULL Tipo de informação devolvida:

SQL_TABLE_STATindica uma estatística para a tabela (na CARDINALITY coluna ou).PAGES

SQL_INDEX_BTREE indica um índice B-Tree.

SQL_INDEX_CLUSTERED indica um índice agrupado.

SQL_INDEX_CONTENT indica um índice de conteúdos.

SQL_INDEX_HASHED indica um índice com hash.

SQL_INDEX_OTHER indica outro tipo de índice.
ORDINAL_POSITION (ODBC 1.0) 8 smallint Número de sequência da coluna no índice (começando por 1); NULL é devolvido se TYPE for SQL_TABLE_STAT.
COLUMN_NAME (ODBC 1.0) 9 Varchar Nome da coluna. Se a coluna for baseada numa expressão, como SALARY + BENEFITS, a expressão é devolvida; se a expressão não puder ser determinada, é devolvida uma cadeia vazia. NULL é devolvido se TYPE for SQL_TABLE_STAT.
ASC_OR_DESC (ODBC 1.0) 10 char(1) Ordem para a coluna: "A" para ascendente; "D" de descer; NULL é devolvido se a sequência de ordenação por colunas não for suportada pela fonte de dados ou se TYPE for SQL_TABLE_STAT.
CARDINALITY (ODBC 1.0) 11 integer Cardinalidade da tabela ou índice; número de linhas na tabela se TYPE for SQL_TABLE_STAT; número de valores únicos no índice se TYPE não SQL_TABLE_STATfor ; NULL é devolvido se o valor não estiver disponível na fonte de dados.
PAGES (ODBC 1.0) 12 integer Número de páginas usadas para armazenar o índice ou tabela; número de páginas para a tabela se TYPE for SQL_TABLE_STAT; número de páginas para o índice se TYPE não SQL_TABLE_STATfor ; NULL é devolvido se o valor não estiver disponível na fonte de dados ou se não for aplicável à fonte de dados.
FILTER_CONDITION (ODBC 2.0) 13 Varchar Se o índice for um índice filtrado, esta é a condição de filtro, como SALARY > 30000; se a condição de filtro não puder ser determinada, esta é uma cadeia vazia.

NULL Se o índice não for um índice filtrado, não se pode determinar se o índice é um índice filtrado, ou TYPE se é SQL_TABLE_STAT.

Se a linha do conjunto de resultados corresponder a uma tabela, o driver define TYPE para SQL_TABLE_STAT e define NON_UNIQUE, INDEX_QUALIFIER, INDEX_NAME, ORDINAL_POSITION, COLUMN_NAME, e ASC_OR_DESC para NULL. Se CARDINALITY ou PAGES não estiverem disponíveis na fonte de dados, o driver define-as para NULL.

Exemplo de código

Para um exemplo de código de uma função semelhante, veja Função SQLColumns.

Para obter informações sobre Artigo
Ligar um buffer a uma coluna num conjunto de resultados Função SQLBindCol
Cancelamento do processamento de extratos Função SQLCancel
Buscar uma única linha ou um bloco de dados numa direção apenas direta. Função SQLFetch
Buscar um bloco de dados ou percorrer um conjunto de resultados Função SQLFetchScroll
Devolvendo as colunas de chaves estrangeiras Função SQLForeignKeys
Devolver as colunas de uma chave primária Função SQLPrimaryKeys