SQLProcedures-Funktion
Konformität
Version eingeführt: ODBC 1.0-Standardkonformität: ODBC
Zusammenfassung
SQLProcedures gibt die Liste der Prozedurnamen zurück, die in einer bestimmten Datenquelle gespeichert sind. Prozedur ist ein generischer Begriff, der verwendet wird, um ein ausführbares Objekt oder eine benannte Entität zu beschreiben, die mithilfe von Eingabe- und Ausgabeparametern aufgerufen werden kann. Weitere Informationen zu Prozeduren finden Sie unter Prozeduren.
Syntax
SQLRETURN SQLProcedures(
SQLHSTMT StatementHandle,
SQLCHAR * CatalogName,
SQLSMALLINT NameLength1,
SQLCHAR * SchemaName,
SQLSMALLINT NameLength2,
SQLCHAR * ProcName,
SQLSMALLINT NameLength3);
Argumente
StatementHandle
[Eingabe] Anweisungshandle.
Catalogname
[Eingabe] Prozedurkatalog. Wenn ein Treiber Kataloge für einige Tabellen, aber nicht für andere unterstützt, z. B. wenn der Treiber Daten aus verschiedenen DBMSs abruft, gibt eine leere Zeichenfolge ("") die Tabellen an, die keine Kataloge enthalten. 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] Zeichenfolgensuchmuster für Prozedurschemanamen. Wenn ein Treiber Schemas für einige Prozeduren unterstützt, aber nicht für andere, z. B. wenn der Treiber Daten aus verschiedenen DBMS abruft, kennzeichnet eine leere Zeichenfolge ("") die Prozeduren, die keine Schemas haben.
Wenn das SQL_ATTR_METADATA_ID-Anweisungsattribut auf SQL_TRUE festgelegt ist, wird SchemaName als Bezeichner behandelt, und die Groß-/Kleinschreibung ist nicht signifikant. Wenn es SQL_FALSE ist, ist SchemaName ein Musterwertargument. es wird wörtlich behandelt, und sein Fall ist signifikant.
NameLength2
[Eingabe] Länge in Zeichen von *SchemaName.
ProcName
[Eingabe] Zeichenfolgensuchmuster für Prozedurnamen.
Wenn das SQL_ATTR_METADATA_ID-Anweisungsattribut auf SQL_TRUE festgelegt ist, wird ProcName als Bezeichner behandelt, und die Groß-/Kleinschreibung ist nicht signifikant. Wenn es SQL_FALSE ist, ist ProcName ein Musterwertargument. es wird wörtlich behandelt, und sein Fall ist signifikant.
NameLength3
[Eingabe] Länge in Zeichen von *ProcName.
Gibt zurück
SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_STILL_EXECUTING, SQL_ERROR oder SQL_INVALID_HANDLE.
Diagnose
Wenn SQLProcedures 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 von StatementHandle aufgerufen wird. In der folgenden Tabelle sind die SQLSTATE-Werte aufgeführt, die häufig von SQLProcedures 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 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 ProcName 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. |
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 Prozedurkatalog angegeben, und der Treiber oder die Datenquelle unterstützt keine Kataloge. Es wurde ein Prozedurschema angegeben, und der Treiber oder die Datenquelle unterstützt keine Schemas. Für das Prozedurschema oder den Prozedurnamen wurde ein Zeichenfolgensuchmuster angegeben, und die Datenquelle unterstützt keine Suchmuster für eines oder mehrere dieser Argumente. Die Kombination aus den aktuellen Einstellungen des SQL_ATTR_CONCURRENCY- und SQL_ATTR_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 angeforderte 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 Treiber, der dem StatementHandle zugeordnet ist, unterstützt diese 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
SQLProcedures listet alle Prozeduren im angeforderten Bereich auf. Ein Benutzer kann über die Berechtigung zum Ausführen einer dieser Prozeduren verfügen oder nicht. Um die Barrierefreiheit zu überprüfen, kann eine Anwendung SQLGetInfo aufrufen und den Wert der SQL_ACCESSIBLE_PROCEDURES Informationen überprüfen. Andernfalls muss die Anwendung in der Lage sein, eine Situation zu verarbeiten, in der der Benutzer eine Prozedur auswählt, die nicht ausgeführt werden kann. Informationen dazu, wie diese Informationen verwendet werden können, finden Sie unter Prozeduren.
Hinweis
Weitere Informationen zur allgemeinen Verwendung, zu Argumenten und zurückgegebenen Daten von ODBC-Katalogfunktionen finden Sie unter Katalogfunktionen.
SQLProcedures gibt die Ergebnisse als Standardresultset zurück, geordnet nach PROCEDURE_CAT, PROCEDURE_SCHEMA und PROCEDURE_NAME.
Hinweis
SQLProcedures gibt möglicherweise nicht alle Prozeduren zurück. Anwendungen können jede gültige Prozedur verwenden, unabhängig davon, ob sie von SQLProcedures zurückgegeben wird.
Die folgenden Spalten wurden für ODBC 3*.x* umbenannt. 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 |
---|---|
PROCEDURE_QUALIFIER | PROCEDURE_CAT |
VERFAHREN _OWNER | VERFAHREN _SCHEM |
Um die tatsächliche Länge der spalten PROCEDURE_CAT, PROCEDURE_SCHEM und PROCEDURE_NAME zu bestimmen, kann eine Anwendung SQLGetInfo mit den Optionen SQL_MAX_CATALOG_NAME_LEN, SQL_MAX_SCHEMA_NAME_LEN und SQL_MAX_PROCEDURE_NAME_LEN aufrufen.
In der folgenden Tabelle sind die Spalten im Resultset aufgeführt. Zusätzliche Spalten über Spalte 8 (PROCEDURE_TYPE) 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 |
---|---|---|---|
PROCEDURE_CAT (ODBC 2.0) | 1 | Varchar | Prozedurkatalogbezeichner; NULL, wenn nicht auf die Datenquelle anwendbar. Wenn ein Treiber Kataloge für einige Prozeduren 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 Prozeduren zurück, die keine Kataloge haben. |
PROCEDURE_SCHEM (ODBC 2.0) | 2 | Varchar | Prozedurschemabezeichner; NULL, wenn nicht auf die Datenquelle anwendbar. Wenn ein Treiber Schemas für einige Prozeduren, 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 Prozeduren zurück, die keine Schemas haben. |
PROCEDURE_NAME (ODBC 2.0) | 3 | Varchar nicht NULL | Prozedurbezeichner. |
NUM_INPUT_PARAMS (ODBC 2.0) | 4 | – | Für die zukünftige Verwendung reserviert. Anwendungen sollten sich nicht auf die daten verlassen, die in diesen Ergebnisspalten zurückgegeben werden. |
NUM_OUTPUT_PARAMS (ODBC 2.0) | 5 | – | Für die zukünftige Verwendung reserviert. Anwendungen sollten sich nicht auf die daten verlassen, die in diesen Ergebnisspalten zurückgegeben werden. |
NUM_RESULT_SETS (ODBC 2.0) | 6 | – | Für die zukünftige Verwendung reserviert. Anwendungen sollten sich nicht auf die daten verlassen, die in diesen Ergebnisspalten zurückgegeben werden. |
HINWEISE (ODBC 2.0) | 7 | Varchar | Eine Beschreibung der Prozedur. |
PROCEDURE_TYPE (ODBC 2.0) | 8 | Smallint | Definiert den Prozedurtyp: SQL_PT_UNKNOWN: Es kann nicht bestimmt werden, ob die Prozedur einen Wert zurückgibt. SQL_PT_PROCEDURE: Das zurückgegebene Objekt ist eine Prozedur. Das heißt, es verfügt nicht über einen Rückgabewert. SQL_PT_FUNCTION: Das zurückgegebene Objekt ist eine Funktion. Das heißt, es verfügt über einen Rückgabewert. |
Die Argumente SchemaName und ProcName akzeptieren Suchmuster. Weitere Informationen zu gültigen Suchmustern finden Sie unter Musterwertargumente.
Codebeispiel
Weitere Informationen finden Sie unter Prozeduraufrufe.
Verwandte Funktionen
Informationen über | Finden Sie unter |
---|---|
Binden eines Puffers an eine Spalte in einem Resultset | SQLBindCol-Funktion |
Abbrechen der Anweisungsverarbeitung | SQLCancel-Funktion |
Abrufen einer einzelnen Zeile oder eines Datenblocks in vorwärtsgerichteter Richtung | SQLFetch-Funktion |
Abrufen eines Datenblocks oder Scrollen durch ein Resultset | SQLFetchScroll-Funktion |
Zurückgeben von Informationen zu einem Treiber oder einer Datenquelle | SQLGetInfo-Funktion |
Zurückgeben der Parameter und Resultsetspalten einer Prozedur | SQLProcedureColumns-Funktion |
Syntax zum Aufrufen gespeicherter Prozeduren | Ausführen von Anweisungen |