SQLColumnPrivileges-Funktion
Konformität
Version eingeführt: ODBC 1.0-Standardkonformität: ODBC
Zusammenfassung
SQLColumnPrivileges gibt eine Liste von Spalten und zugeordneten Berechtigungen für die angegebene Tabelle zurück. Der Treiber gibt die Informationen als Resultset für den angegebenen StatementHandle zurück.
Syntax
SQLRETURN SQLColumnPrivileges(
SQLHSTMT StatementHandle,
SQLCHAR * CatalogName,
SQLSMALLINT NameLength1,
SQLCHAR * SchemaName,
SQLSMALLINT NameLength2,
SQLCHAR * TableName,
SQLSMALLINT NameLength3,
SQLCHAR * ColumnName,
SQLSMALLINT NameLength4);
Argumente
StatementHandle
[Eingabe] Anweisungshandle.
Catalogname
[Eingabe] Katalogname. Wenn ein Treiber Namen für einige Kataloge unterstützt, aber nicht für andere, z. B. wenn der Treiber Daten aus verschiedenen DBMS abruft, kennzeichnet eine leere Zeichenfolge ("") die Kataloge, die keine Namen haben. CatalogName kann kein Zeichenfolgensuchmuster enthalten.
Wenn das SQL_ATTR_METADATA_ID-Anweisungsattribut auf SQL_TRUE festgelegt ist, wird CatalogName als Bezeichner behandelt, und die Groß-/Kleinschreibung ist nicht signifikant. Wenn es SQL_FALSE ist, ist CatalogName ein gewöhnliches Argument. es wird wörtlich behandelt, und sein Fall ist signifikant. Weitere Informationen finden Sie unter Argumente in Katalogfunktionen.
NameLength1
[Eingabe] Länge in Zeichen von *CatalogName.
Schemaname
[Eingabe] Schemaname. Wenn ein Treiber Schemas für einige Tabellen, aber nicht für andere unterstützt, z. B. wenn der Treiber Daten aus verschiedenen DBMS abruft, kennzeichnet eine leere Zeichenfolge ("") die Tabellen, die keine Schemas aufweisen. SchemaName kann kein Zeichenfolgensuchmuster enthalten.
Wenn das SQL_ATTR_METADATA_ID-Anweisungsattribut auf SQL_TRUE festgelegt ist, wird SchemaName als Bezeichner behandelt. Wenn es SQL_FALSE ist, ist SchemaName ein gewöhnliches Argument. es wird wörtlich behandelt, und sein Fall ist signifikant.
NameLength2
[Eingabe] Länge in Zeichen von *SchemaName.
TableName
[Eingabe] Tabellenname. Dieses Argument darf kein NULL-Zeiger sein. TableName kann kein Zeichenfolgensuchmuster enthalten.
Wenn das SQL_ATTR_METADATA_ID-Anweisungsattribut auf SQL_TRUE festgelegt ist, wird TableName als Bezeichner behandelt, und die Groß-/Kleinschreibung ist nicht signifikant. Wenn es SQL_FALSE ist, ist TableName ein gewöhnliches Argument. es wird wörtlich behandelt, und sein Fall ist signifikant.
NameLength3
[Eingabe] Länge in Zeichen von *TableName.
ColumnName
[Eingabe] Zeichenfolgensuchmuster für Spaltennamen.
Wenn das SQL_ATTR_METADATA_ID-Anweisungsattribut auf SQL_TRUE festgelegt ist, wird ColumnName als Bezeichner behandelt, und die Groß-/Kleinschreibung ist nicht signifikant. Wenn es SQL_FALSE ist, ist ColumnName ein Musterwertargument. es wird wörtlich behandelt, und sein Fall ist signifikant.
NameLength4
[Eingabe] Länge in Zeichen von *ColumnName.
Gibt zurück
SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_STILL_EXECUTING, SQL_ERROR oder SQL_INVALID_HANDLE.
Diagnose
Wenn SQLColumnPrivileges SQL_ERROR oder SQL_SUCCESS_WITH_INFO zurückgibt, kann ein zugeordneter SQLSTATE-Wert abgerufen werden, indem SQLGetDiagRec mit einem HandleType von SQL_HANDLE_STMT und einem Handle of StatementHandle aufgerufen wird. In der folgenden Tabelle sind die SQLSTATE-Werte aufgeführt, die häufig von SQLColumnPrivileges zurückgegeben werden, und die einzelnen Werte werden im Kontext dieser Funktion erläutert. die Notation "(DM)" steht vor den Beschreibungen von SQLSTATEs, die vom Treiber-Manager zurückgegeben werden. Der Rückgabecode, der jedem SQLSTATE-Wert zugeordnet ist, ist SQL_ERROR, sofern nicht anders angegeben.
SQLSTATE | Fehler | BESCHREIBUNG |
---|---|---|
01000 | Allgemeine Warnung | Treiberspezifische Informationsmeldung. (Funktion gibt SQL_SUCCESS_WITH_INFO zurück.) |
08S01 | Kommunikationslinkfehler | Die Kommunikationsverbindung zwischen dem Treiber und der Datenquelle, mit der der Treiber verbunden wurde, ist fehlgeschlagen, bevor die Verarbeitung der Funktion abgeschlossen wurde. |
24.000 | Ungültiger Cursorstatus | Im StatementHandle war ein Cursor geöffnet, und SQLFetch oder SQLFetchScroll wurde aufgerufen. Dieser Fehler wird vom Treiber-Manager zurückgegeben, wenn SQLFetch oder SQLFetchScroll nicht SQL_NO_DATA zurückgegeben hat, und vom Treiber zurückgegeben wird, wenn SQLFetch oder SQLFetchScroll SQL_NO_DATA zurückgegeben hat. Im StatementHandle war ein Cursor geöffnet, aber SQLFetch oder SQLFetchScroll wurde nicht aufgerufen. |
40001 | Serialisierungsfehler | Für die Transaktion wurde aufgrund eines Ressourcen-Deadlocks mit einer anderen Transaktion ein Rollback ausgeführt. |
40003 | Anweisungsabschluss unbekannt | Die zugeordnete Verbindung ist während der Ausführung dieser Funktion fehlgeschlagen, und der Status der Transaktion kann nicht bestimmt werden. |
HY000 | Allgemeiner Fehler | Es ist ein Fehler aufgetreten, für den kein spezifischer SQLSTATE-Wert vorhanden war und für den keine implementierungsspezifische SQLSTATE definiert wurde. Die von SQLGetDiagRec im *MessageText-Puffer zurückgegebene Fehlermeldung beschreibt den Fehler und seine Ursache. |
HY001 | Fehler bei der Speicherbelegung | Der Treiber konnte keinen Arbeitsspeicher zuordnen, der für die Unterstützung der Ausführung oder Fertigstellung der Funktion erforderlich ist. |
HY008 | Vorgang abgebrochen | Die asynchrone Verarbeitung wurde für statementHandle aktiviert. Die Funktion wurde aufgerufen, und vor Abschluss der Ausführung wurde SQLCancel oder SQLCancelHandle für statementHandle aufgerufen. Anschließend wurde die Funktion für die AnweisungHandle erneut aufgerufen. Die Funktion wurde aufgerufen, und bevor die Ausführung abgeschlossen wurde, wurde SQLCancel oder SQLCancelHandle für die StatementHandle aus einem anderen Thread in einer Multithreadanwendung aufgerufen. |
HY009 | Ungültige Verwendung des NULL-Zeigers | Das Argument TableName war ein NULL-Zeiger. Das SQL_ATTR_METADATA_ID-Anweisungsattribut wurde auf SQL_TRUE festgelegt, das CatalogName-Argument war ein NULL-Zeiger, und die SQL_CATALOG_NAME InfoType gibt zurück, dass Katalognamen unterstützt werden. (DM) Das SQL_ATTR_METADATA_ID-Anweisungsattribut wurde auf SQL_TRUE festgelegt, und das Argument SchemaName oder ColumnName war ein NULL-Zeiger. |
HY010 | Funktionssequenzfehler | (DM) Eine asynchron ausgeführte Funktion wurde für das Verbindungshandle aufgerufen, das dem StatementHandle zugeordnet ist. Diese asynchrone Funktion wurde noch ausgeführt, als diese Funktion aufgerufen wurde. (DM) SQLExecute, SQLExecDirect oder SQLMoreResults wurde für statementHandle aufgerufen und SQL_PARAM_DATA_AVAILABLE zurückgegeben. Diese Funktion wurde aufgerufen, bevor Daten für alle gestreamten Parameter abgerufen wurden. (DM) Eine asynchron ausgeführte Funktion (nicht diese) wurde für das StatementHandle aufgerufen und wurde noch ausgeführt, als diese Funktion aufgerufen wurde. (DM) SQLExecute, SQLExecDirect, SQLBulkOperations oder SQLSetPos wurde für statementHandle aufgerufen und SQL_NEED_DATA zurückgegeben. Diese Funktion wurde aufgerufen, bevor Daten für alle Daten bei der Ausführungsparameter oder -spalten gesendet wurden. |
HY013 | Fehler bei der Speicherverwaltung | Der Funktionsaufruf konnte nicht verarbeitet werden, weil auf die zugrunde liegenden Speicherobjekte nicht zugegriffen werden konnte, möglicherweise aufgrund von geringen Arbeitsspeicherbedingungen. |
HY090 | Ungültige Zeichenfolgen- oder Pufferlänge | (DM) Der Wert eines der Namenslängenargumente war kleiner als 0, aber nicht gleich SQL_NTS. |
Der Wert eines der Namenslängenargumente hat den maximalen Längenwert für den entsprechenden Namen überschritten. (Siehe "Kommentare".) | ||
HY117 | Die Verbindung wird aufgrund eines unbekannten Transaktionsstatus angehalten. Nur trenn- und schreibgeschützte Funktionen sind zulässig. | (DM) Weitere Informationen zum angehaltenen Zustand finden Sie unter SQLEndTran-Funktion. |
HYC00 | Optionales Feature nicht implementiert | Es wurde ein Katalogname angegeben, und der Treiber oder die Datenquelle unterstützt keine Kataloge. Es wurde ein Schemaname angegeben, und der Treiber oder die Datenquelle unterstützt keine Schemas. Für den Spaltennamen wurde ein Zeichenfolgensuchmuster angegeben, und die Datenquelle unterstützt keine Suchmuster für dieses Argument. Die Kombination aus den aktuellen Einstellungen des SQL_CONCURRENCY- und SQL_CURSOR_TYPE-Anweisungsattributes wurde vom Treiber oder der Datenquelle nicht unterstützt. Das SQL_ATTR_USE_BOOKMARKS-Anweisungsattribut wurde auf SQL_UB_VARIABLE festgelegt, und das Attribut der SQL_ATTR_CURSOR_TYPE-Anweisung wurde auf einen Cursortyp festgelegt, für den der Treiber keine Lesezeichen unterstützt. |
HYT00 | Timeout abgelaufen | Der Abfragetimeoutzeitraum ist abgelaufen, bevor die Datenquelle das Resultset zurückgegeben hat. Der Timeoutzeitraum wird über SQLSetStmtAttr festgelegt, SQL_ATTR_QUERY_TIMEOUT. |
HYT01 | Verbindungstimeout abgelaufen | Der Zeitraum für das Verbindungstimeout ist abgelaufen, bevor die Datenquelle auf die Anforderung geantwortet hat. Der Verbindungstimeoutzeitraum wird über SQLSetConnectAttr festgelegt, SQL_ATTR_CONNECTION_TIMEOUT. |
IM001 | Treiber unterstützt diese Funktion nicht. | (DM) Der Der StatementHandle zugeordnete Treiber unterstützt die Funktion nicht. |
IM017 | Abruf ist im asynchronen Benachrichtigungsmodus deaktiviert. | Wenn das Benachrichtigungsmodell verwendet wird, wird die Abfrage deaktiviert. |
IM018 | SQLCompleteAsync wurde nicht aufgerufen, um den vorherigen asynchronen Vorgang für dieses Handle abzuschließen. | Wenn der vorherige Funktionsaufruf für das Handle SQL_STILL_EXECUTING zurückgibt und der Benachrichtigungsmodus aktiviert ist, muss SQLCompleteAsync für das Handle aufgerufen werden, um die Nachverarbeitung durchzuführen und den Vorgang abzuschließen. |
Kommentare
SQLColumnPrivileges gibt die Ergebnisse als Standardergebnissatz zurück, geordnet nach TABLE_CAT, TABLE_SCHEM, TABLE_NAME, COLUMN_NAME und PRIVILEGE.
Hinweis
SQLColumnPrivileges gibt möglicherweise keine Berechtigungen für alle Spalten zurück. Beispielsweise gibt ein Treiber möglicherweise keine Informationen zu Berechtigungen für Pseudospalten zurück, z. B. Oracle ROWID. Anwendungen können jede gültige Spalte verwenden, unabhängig davon, ob sie von SQLColumnPrivileges zurückgegeben wird.
Die Längen der VARCHAR-Spalten werden in der Tabelle nicht angezeigt. die tatsächliche Länge hängt von der Datenquelle ab. Um die tatsächliche Länge der Spalten CATALOG_NAME, SCHEMA_NAME, TABLE_NAME und COLUMN_NAME zu bestimmen, kann eine Anwendung SQLGetInfo mit den Optionen SQL_MAX_CATALOG_NAME_LEN, SQL_MAX_SCHEMA_NAME_LEN, SQL_MAX_TABLE_NAME_LEN und SQL_MAX_COLUMN_NAME_LEN aufrufen.
Hinweis
Weitere Informationen zur allgemeinen Verwendung, zu Argumenten und zurückgegebenen Daten von ODBC-Katalogfunktionen finden Sie unter Katalogfunktionen.
Die folgenden Spalten wurden für ODBC 3 umbenannt. x. Die Änderungen des Spaltennamens wirken sich nicht auf die Abwärtskompatibilität aus, da Anwendungen anhand der Spaltennummer gebunden werden.
ODBC 2.0-Spalte | ODBC 3. x-Spalte |
---|---|
TABLE_QUALIFIER | TABLE_CAT |
TABLE_OWNER | TABLE_SCHEM |
In der folgenden Tabelle sind die Spalten im Resultset aufgeführt. Zusätzliche Spalten über Spalte 8 (IS_GRANTABLE) hinaus können vom Treiber definiert werden. Eine Anwendung sollte Zugriff auf treiberspezifische Spalten erhalten, indem sie vom Ende des Resultsets heruntergezählt wird, anstatt eine explizite Ordnungsposition anzugeben. Weitere Informationen finden Sie unter Von Katalogfunktionen zurückgegebene Daten.
Spaltenname | Spaltennummer | Datentyp | Kommentare |
---|---|---|---|
TABLE_CAT (ODBC 1.0) | 1 | Varchar | Katalogbezeichner; NULL, wenn nicht auf die Datenquelle anwendbar. Wenn ein Treiber Kataloge für einige Tabellen, aber nicht für andere unterstützt, z. B. wenn der Treiber Daten aus verschiedenen DBMS abruft, gibt er eine leere Zeichenfolge ("") für die Tabellen zurück, die keine Kataloge enthalten. |
TABLE_SCHEM (ODBC 1.0) | 2 | Varchar | Schemabezeichner; NULL, wenn nicht auf die Datenquelle anwendbar. Wenn ein Treiber Schemas für einige Tabellen unterstützt, aber nicht für andere, z. B. wenn der Treiber Daten aus verschiedenen DBMS abruft, gibt er eine leere Zeichenfolge ("") für die Tabellen zurück, die keine Schemas haben. |
TABLE_NAME (ODBC 1.0) | 3 | Varchar nicht NULL | Tabellenbezeichner. |
COLUMN_NAME (ODBC 1.0) | 4 | Varchar nicht NULL | Spaltenname. Der Treiber gibt eine leere Zeichenfolge für eine Spalte ohne Namen zurück. |
GRANTOR (ODBC 1.0) | 5 | Varchar | Name des Benutzers, der die Berechtigung gewährt hat; NULL, wenn nicht auf die Datenquelle anwendbar. Für alle Zeilen, in denen der Wert in der GRANTEE-Spalte der Besitzer des Objekts ist, lautet die GRANTOR-Spalte "_SYSTEM". |
EMPFÄNGER (ODBC 1.0) | 6 | Varchar nicht NULL | Name des Benutzers, dem die Berechtigung gewährt wurde. |
PRIVILEGE (ODBC 1.0) | 7 | Varchar nicht NULL | Gibt die Spaltenberechtigung an. Kann eine der folgenden Werte sein (oder andere, die von der Datenquelle unterstützt werden, wenn die Implementierung definiert ist): SELECT: Der Empfänger darf Daten für die Spalte abrufen. INSERT: Der Empfänger darf Daten für die Spalte in neuen Zeilen bereitstellen, die in die zugeordnete Tabelle eingefügt werden. UPDATE: Der Empfänger darf Daten in der Spalte aktualisieren. VERWEISE: Der Empfänger darf innerhalb einer Einschränkung (z. B. einer eindeutigen, referenziellen oder Tabellenüberprüfungseinschränkung) auf die Spalte verweisen. |
IS_GRANTABLE (ODBC 1.0) | 8 | Varchar | Gibt an, ob der Empfänger anderen Benutzern die Berechtigung gewähren darf; "YES", "NO" oder "NULL", wenn unbekannt oder nicht auf die Datenquelle anwendbar ist. Eine Berechtigung kann entweder gewährt oder nicht gewährt werden, aber nicht beides. Das von SQLColumnPrivileges zurückgegebene Resultset enthält nie zwei Zeilen, für die alle Spalten mit Ausnahme der IS_GRANTABLE Spalte den gleichen Wert enthalten. |
Codebeispiel
Ein Codebeispiel für eine ähnliche Funktion finden Sie unter SQLColumns-Funktion.
Verwandte Funktionen
Informationen über | Finden Sie unter |
---|---|
Binden eines Puffers an eine Spalte in einem Resultset | SQLBindCol-Funktion |
Abbrechen der Anweisungsverarbeitung | SQLCancel-Funktion |
Zurückgeben der Spalten in einer Tabelle oder Tabellen | SQLColumns-Funktion |
Abrufen eines Datenblocks oder Scrollen durch ein Resultset | SQLFetchScroll-Funktion |
Abrufen mehrerer Datenzeilen | SQLFetch-Funktion |
Zurückgeben von Berechtigungen für eine Tabelle oder Tabellen | SQLTablePrivileges-Funktion |
Zurückgeben einer Liste von Tabellen in einer Datenquelle | SQLTables-Funktion |