Udostępnij przez


SQLStatistics, funkcja

SQLStatistics Pobiera listę statystyk dotyczących pojedynczej tabeli i indeksów skojarzonych z tabelą. Sterownik zwraca informacje w zestawie wyników.

Zgodność

Wprowadzona wersja: Zgodność ze standardami ODBC 1.0: ISO 92

Składnia

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

Arguments

StatementHandle

[Dane wejściowe] Uchwyt instrukcji.

CatalogName

[Dane wejściowe] Nazwa wykazu. Jeśli sterownik obsługuje wykazy dla niektórych tabel, ale nie dla innych, na przykład gdy sterownik pobiera dane z różnych zestawów DBMS, pusty ciąg ("") wskazuje te tabele, które nie mają wykazów. CatalogName nie może zawierać wzorca wyszukiwania ciągów.

Jeśli atrybut instrukcji SQL_ATTR_METADATA_ID jest ustawiony na SQL_TRUE, CatalogName jest traktowany jako identyfikator, a jego przypadek nie jest znaczący. Jeśli jest to SQL_FALSE, CatalogName jest zwykłym argumentem; jest traktowany dosłownie, a jego przypadek jest znaczący. Aby uzyskać więcej informacji, zobacz Argumenty w funkcjach wykazu.

NameLength1

[Dane wejściowe] Długość znaków CatalogName.

NazwaSchematu

[Dane wejściowe] Nazwa schematu. Jeśli sterownik obsługuje schematy dla niektórych tabel, ale nie dla innych, takich jak gdy sterownik pobiera dane z różnych zestawów DBMS, pusty ciąg ("") wskazuje te tabele, które nie mają schematów. SchemaName nie może zawierać wzorca wyszukiwania ciągów.

Jeśli atrybut instrukcji SQL_ATTR_METADATA_ID jest ustawiony na SQL_TRUE, SchemaName jest traktowany jako identyfikator, a jego przypadek nie jest znaczący. Jeśli jest to SQL_FALSE, SchemaName jest zwykłym argumentem; jest traktowany dosłownie, a jego przypadek jest znaczący.

NameLength2

[Dane wejściowe] Długość znaków schemaName.

TableName

[Dane wejściowe] Nazwa tabeli. Ten argument nie może być wskaźnikiem o wartości null. Tabela TableName nie może zawierać wzorca wyszukiwania ciągów.

Jeśli atrybut instrukcji SQL_ATTR_METADATA_ID jest ustawiony na SQL_TRUE, TableName jest traktowany jako identyfikator, a jego przypadek nie jest znaczący. Jeśli jest to SQL_FALSE, TableName jest zwykłym argumentem; jest traktowany dosłownie, a jego przypadek jest znaczący.

NameLength3

[Dane wejściowe] Długość znaków tabeli TableName.

Niepowtarzalny

[Dane wejściowe] Typ indeksu: SQL_INDEX_UNIQUE lub SQL_INDEX_ALL.

Zastrzeżony

[Dane wejściowe] Wskazuje znaczenie CARDINALITY kolumn i PAGES w zestawie wyników. Poniższe opcje wpływają tylko na zwracanie CARDINALITY kolumn i PAGES ; informacje o indeksie są zwracane nawet wtedy, gdy CARDINALITYPAGES nie są zwracane.

SQL_ENSURE żąda, aby kierowca bezwarunkowo pobierał statystyki. (Sterowniki zgodne tylko ze standardem Open Group i nie obsługują rozszerzeń ODBC nie będą mogły obsługiwać SQL_ENSUREplików ).

SQL_QUICK żąda, aby sterownik pobierał CARDINALITY element i PAGES tylko wtedy, gdy są one łatwo dostępne z serwera. W takim przypadku sterownik nie sprawdza, czy wartości są aktualne. (Aplikacje zapisywane w standardzie Open Group zawsze będą otrzymywać SQL_QUICK zachowanie ze sterowników zgodnych ze standardem ODBC 3.x).

Zwraca

SQL_SUCCESS, , SQL_SUCCESS_WITH_INFO, SQL_ERRORSQL_STILL_EXECUTING, lub SQL_INVALID_HANDLE.

Diagnostics

Gdy SQLStatistics zwraca SQL_ERROR wartość lub SQL_SUCCESS_WITH_INFO, skojarzona SQLSTATE wartość można uzyskać, wywołując element SQLGetDiagRecHandleTypeSQL_HANDLE_STMT klasy i uchwytinstrukcjiHandle. W poniższej tabeli wymieniono SQLSTATE wartości zwykle zwracane przez SQLStatistics program i objaśniono je w kontekście tej funkcji. Notacja (DM) poprzedza opisy każdego SQLSTATE zwracanego przez Menedżera sterowników. Kod zwracany skojarzony z każdą SQLSTATE wartością to SQL_ERROR, chyba że określono inaczej.

SQLSTATE Error Description
01000 Ostrzeżenie ogólne Komunikat informacyjny specyficzny dla sterownika. (Funkcja zwraca SQL_SUCCESS_WITH_INFOwartość .)
08S01 Błąd połączenia komunikacyjnego Połączenie komunikacyjne między sterownikiem a źródłem danych, z którym sterownik został połączony, nie powiodło się przed zakończeniem przetwarzania funkcji.
24000 Nieprawidłowy stan kursora Kursor był otwarty na StatementHandle i SQLFetch został SQLFetchScroll wywołany. Ten błąd jest zwracany przez Menedżera sterowników, jeśli SQLFetch lub SQLFetchScroll nie został zwrócony SQL_NO_DATA i jest zwracany przez sterownik, jeśli SQLFetch lub SQLFetchScroll zwrócił SQL_NO_DATA.

Kursor był otwarty na StatementHandle, ale SQLFetch lub SQLFetchScroll nie został wywołany.
40001 Niepowodzenie serializacji Transakcja została wycofana z powodu zakleszczenia zasobów z inną transakcją.
40003 Ukończenie instrukcji nieznane Skojarzone połączenie nie powiodło się podczas wykonywania tej funkcji, a nie można określić stanu transakcji.
HY000 Błąd ogólny Wystąpił błąd, dla którego nie było określonego SQLSTATE elementu i dla którego nie zdefiniowano żadnego specyficznego dla SQLSTATE implementacji. Komunikat o błędzie zwrócony przez SQLGetDiagRec element w buforze *MessageText opisuje błąd i jego przyczynę.
HY001 Błąd alokacji pamięci Sterownik nie może przydzielić pamięci wymaganej do obsługi wykonywania lub ukończenia funkcji.
HY008 Operacja anulowana Przetwarzanie asynchroniczne zostało włączone dla instrukcji StatementHandle. Funkcja została wywołana i przed jej zakończeniem wykonywania SQLCancel lub SQLCancelHandle została wywołana na StatementHandle, a następnie funkcja została wywołana ponownie w instrukcji StatementHandle.

Funkcja została wywołana i przed zakończeniem wykonywania SQLCancel lub SQLCancelHandle została wywołana w instrukcji StatementHandle z innego wątku w aplikacji wielowątku.
HY009 Nieprawidłowe użycie wskaźnika o wartości null Argument TableName był wskaźnikiem o wartości null.

Atrybut SQL_ATTR_METADATA_ID instrukcji został ustawiony na SQL_TRUE, argument CatalogName był wskaźnikiem o wartości null, a SQL_CATALOG_NAME właściwość InfoType zwraca, że nazwy wykazu są obsługiwane.

(DM) Atrybut SQL_ATTR_METADATA_ID instrukcji został ustawiony na SQL_TRUE, a argument SchemaName był wskaźnikiem o wartości null.
HY010 Błąd sekwencji funkcji (DM) Asynchronicznie wykonywana funkcja została wywołana dla dojścia połączenia skojarzonego z instrukcją StatementHandle. Ta funkcja asynchroniczna była nadal wykonywana, gdy SQLStatistics funkcja została wywołana.

(DM) SQLExecute, SQLExecDirectlub SQLMoreResults został wezwany do instrukcji StatementHandle i zwrócił SQL_PARAM_DATA_AVAILABLE. Ta funkcja została wywołana przed pobraniem danych dla wszystkich parametrów przesyłanych strumieniowo.

(DM) Asynchronicznie wykonująca funkcję (a nie tę) została wywołana dla instrukcji StatementHandle i nadal była wykonywana, gdy ta funkcja została wywołana.

(DM) SQLExecute, , SQLBulkOperationsSQLExecDirectlub SQLSetPos został wywołany dla InstrukcjiHandle i zwrócił SQL_NEED_DATA. Ta funkcja została wywołana przed wysłaniem danych dla wszystkich parametrów wykonywania danych lub kolumn.
HY013 Błąd zarządzania pamięcią Nie można przetworzyć wywołania funkcji, ponieważ nie można uzyskać dostępu do bazowych obiektów pamięci, prawdopodobnie z powodu niskich warunków pamięci.
HY090 Nieprawidłowa długość ciągu lub buforu (DM) Wartość jednego z argumentów długości nazwy była mniejsza niż 0, ale nie równa SQL_NTS.

Wartość jednego z argumentów długości nazwy przekroczyła maksymalną wartość długości odpowiadającej mu nazwy.
HY100 Typ opcji unikatowości poza zakresem (DM) Określono nieprawidłową wartość unikatową .
HY101 Typ opcji dokładności poza zakresem (DM) Określono nieprawidłową wartość zarezerwowaną .
HY117 Połączenie jest zawieszone z powodu nieznanego stanu transakcji. Dozwolone są tylko funkcje rozłączania i tylko do odczytu. (DM) Aby uzyskać więcej informacji na temat stanu wstrzymania, zobacz SQLEndTran, funkcja.
HYC00 Opcjonalna funkcja nie zaimplementowana Określono wykaz, a sterownik lub źródło danych nie obsługuje wykazów.

Określono schemat, a sterownik lub źródło danych nie obsługuje schematów.

Kombinacja bieżących ustawień atrybutów instrukcji SQL_ATTR_CONCURRENCY i SQL_ATTR_CURSOR_TYPE nie była obsługiwana przez sterownik ani źródło danych.

Atrybut SQL_ATTR_USE_BOOKMARKS instrukcji został ustawiony na SQL_UB_VARIABLE, a SQL_ATTR_CURSOR_TYPE atrybut instrukcji został ustawiony na typ kursora, dla którego sterownik nie obsługuje zakładek.
HYT00 Upłynął limit czasu Okres przekroczenia limitu czasu zapytania wygasł, zanim źródło danych zwróciło żądany zestaw wyników. Okres limitu czasu jest ustawiany na wartość SQLSetStmtAttr, SQL_ATTR_QUERY_TIMEOUT.
HYT01 Upłynął limit czasu połączenia Okres przekroczenia limitu czasu połączenia wygasł, zanim źródło danych odpowiedziało na żądanie. Limit czasu połączenia jest ustawiany za pomocą SQLSetConnectAttrwartości , SQL_ATTR_CONNECTION_TIMEOUT.
IM001 Sterownik nie obsługuje tej funkcji (DM) Sterownik skojarzony z instrukcją StatementHandle nie obsługuje funkcji.
IM017 Sondowanie jest wyłączone w trybie powiadomień asynchronicznych Za każdym razem, gdy jest używany model powiadomień, sondowanie jest wyłączone.
IM018 SQLCompleteAsync Nie wywołano wywołania w celu ukończenia poprzedniej operacji asynchronicznej na tym dojściu. Jeśli poprzednie wywołanie funkcji na dojściu zwraca wartość SQL_STILL_EXECUTING i jeśli tryb powiadomień jest włączony, należy wywołać do dojścia, SQLCompleteAsync aby wykonać przetwarzanie końcowe i zakończyć operację.

Comments

SQLStatisticsZwraca informacje o pojedynczej tabeli jako standardowy zestaw wyników uporządkowany według NON_UNIQUEwartości , , INDEX_QUALIFIERTYPE, INDEX_NAME, i ORDINAL_POSITION. Zestaw wyników łączy informacje statystyczne (w CARDINALITY kolumnach i PAGES zestawu wyników) dla tabeli z informacjami o każdym indeksie. Aby uzyskać informacje o sposobie korzystania z tych informacji, zobacz Korzystanie z danych wykazu.

Aby określić rzeczywiste długości TABLE_CATkolumn , , TABLE_NAMETABLE_SCHEMiCOLUMN_NAME, aplikacja może wywołać SQLGetInfo za pomocą SQL_MAX_CATALOG_NAME_LENopcji , SQL_MAX_SCHEMA_NAME_LEN, SQL_MAX_TABLE_NAME_LENi SQL_MAX_COLUMN_NAME_LEN .

Uwaga / Notatka

Aby uzyskać więcej informacji na temat ogólnego użycia, argumentów i zwracanych danych funkcji wykazu ODBC, zobacz Funkcje wykazu.

Nazwa następujących kolumn została zmieniona na ODBC 3.x. Zmiany nazwy kolumny nie mają wpływu na zgodność z poprzednimi wersjami, ponieważ aplikacje są powiązane według numeru kolumny.

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

W poniższej tabeli wymieniono kolumny w zestawie wyników. Dodatkowe kolumny poza kolumną 13 (FILTER_CONDITION) można zdefiniować przez sterownik. Aplikacja powinna uzyskać dostęp do kolumn specyficznych dla sterownika przez odliczanie od końca zestawu wyników zamiast określania jawnej pozycji porządkowej. Aby uzyskać więcej informacji, zobacz Dane zwrócone przez funkcje wykazu.

Nazwa kolumny Numer kolumny Typ danych Comments
TABLE_CAT (ODBC 1.0) 1 varchar Nazwa katalogu tabeli, do której ma zastosowanie statystyka lub indeks; NULL jeśli nie ma zastosowania do źródła danych. Jeśli sterownik obsługuje wykazy dla niektórych tabel, ale nie dla innych, na przykład gdy sterownik pobiera dane z różnych zestawów DBMS, zwraca pusty ciąg ("") dla tych tabel, które nie mają wykazów.
TABLE_SCHEM (ODBC 1.0) 2 varchar Nazwa schematu tabeli, do której ma zastosowanie statystyka lub indeks; NULL jeśli nie ma zastosowania do źródła danych. Jeśli sterownik obsługuje schematy dla niektórych tabel, ale nie dla innych, na przykład gdy sterownik pobiera dane z różnych zestawów DBMS, zwraca pusty ciąg ("") dla tych tabel, które nie mają schematów.
TABLE_NAME (ODBC 1.0) 3 varchar nie NULL Nazwa tabeli, do której ma zastosowanie statystyka lub indeks.
NON_UNIQUE (ODBC 1.0) 4 smallint Wskazuje, czy indeks nie zezwala na zduplikowane wartości:

SQL_TRUE jeśli wartości indeksu mogą być niezgodne.

SQL_FALSE jeśli wartości indeksu muszą być unikatowe.

NULL jest zwracany, jeśli TYPE ma wartość SQL_TABLE_STAT.
INDEX_QUALIFIER (ODBC 1.0) 5 varchar Identyfikator, który jest używany do kwalifikowania nazwy indeksu wykonującego DROP INDEXelement ; NULL jest zwracany, jeśli kwalifikator indeksu nie jest obsługiwany przez źródło danych lub jeśli TYPE ma wartość SQL_TABLE_STAT. Jeśli w tej kolumnie zostanie zwrócona wartość inna niż null, należy użyć jej do zakwalifikowania nazwy indeksu w DROP INDEX instrukcji. W przeciwnym razie należy użyć wartości TABLE_SCHEM w celu zakwalifikowania nazwy indeksu.
INDEX_NAME (ODBC 1.0) 6 varchar Nazwa indeksu; NULL jest zwracany, jeśli TYPE ma wartość SQL_TABLE_STAT.
TYPE (ODBC 1.0) 7 smallint not NULL Typ zwracanych informacji:

SQL_TABLE_STAT wskazuje statystykę tabeli (w kolumnie CARDINALITY lub PAGES ).

SQL_INDEX_BTREE wskazuje indeks drzewa B.

SQL_INDEX_CLUSTERED wskazuje indeks klastrowany.

SQL_INDEX_CONTENT wskazuje indeks zawartości.

SQL_INDEX_HASHED wskazuje skrót indeksu.

SQL_INDEX_OTHER wskazuje inny typ indeksu.
ORDINAL_POSITION (ODBC 1.0) 8 smallint Numer sekwencji kolumn w indeksie (począwszy od 1); NULL jest zwracany, jeśli TYPE ma wartość SQL_TABLE_STAT.
COLUMN_NAME (ODBC 1.0) 9 varchar Nazwa kolumny. Jeśli kolumna jest oparta na wyrażeniu, takim jak SALARY + BENEFITS, zwracane jest wyrażenie. Jeśli nie można określić wyrażenia, zwracany jest pusty ciąg. NULL jest zwracany, jeśli TYPE ma wartość SQL_TABLE_STAT.
ASC_OR_DESC (ODBC 1.0) 10 char(1) Sekwencja sortowania dla kolumny: "A" dla rosnącej; "D" dla malejącego; NULL jest zwracana, jeśli sekwencja sortowania kolumn nie jest obsługiwana przez źródło danych lub jeśli TYPE jest to SQL_TABLE_STAT.
CARDINALITY (ODBC 1.0) 11 integer Kardynalność tabeli lub indeksu; liczba wierszy w tabeli, jeśli TYPE to SQL_TABLE_STAT; liczba unikatowych wartości w indeksie, jeśli TYPE nie SQL_TABLE_STATjest ; NULL jest zwracana, jeśli wartość nie jest dostępna ze źródła danych.
PAGES (ODBC 1.0) 12 integer Liczba stron używanych do przechowywania indeksu lub tabeli; liczba stron tabeli, jeśli TYPE to SQL_TABLE_STAT; liczba stron indeksu, jeśli TYPE nie SQL_TABLE_STATjest ; NULL jest zwracana, jeśli wartość nie jest dostępna ze źródła danych lub jeśli nie ma zastosowania do źródła danych.
FILTER_CONDITION (ODBC 2.0) 13 varchar Jeśli indeks jest indeksem filtrowanym, jest to warunek filtru, taki jak SALARY > 30000; jeśli nie można określić warunku filtru, jest to pusty ciąg.

NULL Jeśli indeks nie jest indeksem filtrowanym, nie można określić, czy indeks jest indeksem filtrowanym, czy TYPE też jest SQL_TABLE_STAT.

Jeśli wiersz w zestawie wyników odpowiada tabeli, sterownik ustawia wartości TYPESQL_TABLE_STAT i ustawia NON_UNIQUEwartości , , INDEX_QUALIFIER, INDEX_NAMEORDINAL_POSITION, COLUMN_NAME, i .NULLASC_OR_DESC Jeśli CARDINALITY lub PAGES nie jest dostępny ze źródła danych, sterownik ustawia go na NULLwartość .

Przykład kodu

Aby zapoznać się z przykładem kodu podobnej funkcji, zobacz FUNKCJA SQLColumns.

Aby uzyskać informacje o Article
Wiązanie buforu z kolumną w zestawie wyników SQLBindCol, funkcja
Anulowanie przetwarzania instrukcji SQLCancel, funkcja
Pobieranie pojedynczego wiersza lub bloku danych w kierunku tylko do przodu. SQLFetch, funkcja
Pobieranie bloku danych lub przewijanie zestawu wyników SQLFetchScroll, funkcja
Zwracanie kolumn kluczy obcych SQLForeignKeys, funkcja
Zwracanie kolumn klucza podstawowego SQLPrimaryKeys, funkcja