Prozedurparameter

Parameter in Prozeduraufrufen können Eingabe-, Eingabe-/Ausgabe- oder Ausgabeparameter sein. Dies unterscheidet sich von Parametern in allen anderen SQL-Anweisungen, die immer Eingabeparameter sind.

Eingabeparameter werden verwendet, um Werte an die Prozedur zu senden. Angenommen, die Tabelle "Parts" enthält Die Spalten "PartID", "Beschreibung" und "Preis". Die InsertPart-Prozedur verfügt möglicherweise über einen Eingabeparameter für jede Spalte in der Tabelle. Beispiel:

{call InsertPart(?, ?, ?)}  

Ein Treiber sollte den Inhalt eines Eingabepuffers erst ändern, wenn SQLExecDirect oder SQLExecute SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR, SQL_INVALID_HANDLE oder SQL_NO_DATA zurückgibt. Der Inhalt des Eingabepuffers sollte nicht geändert werden, während SQLExecDirect oder SQLExecute SQL_NEED_DATA oder SQL_STILL_EXECUTING zurückgibt.

Eingabe-/Ausgabeparameter werden verwendet, um Werte an Prozeduren zu senden und Werte aus Prozeduren abzurufen. Die Verwendung desselben Parameters wie eine Eingabe und ein Ausgabeparameter sind tendenziell verwirrend und sollten vermieden werden. Angenommen, eine Prozedur akzeptiert eine Auftrags-ID und gibt die ID des Kunden zurück. Dies kann mit einem einzelnen Eingabe-/Ausgabeparameter definiert werden:

{call GetCustID(?)}  

Es kann besser sein, zwei Parameter zu verwenden: einen Eingabeparameter für die Auftrags-ID und einen Ausgabe- oder Eingabe-/Ausgabeparameter für die Kunden-ID:

{call GetCustID(?, ?)}  

Ausgabeparameter werden verwendet, um den Rückgabewert der Prozedur abzurufen und Werte aus Prozedurargumenten abzurufen; Prozeduren, die Werte zurückgeben, werden manchmal als Funktionen bezeichnet. Angenommen, die GetCustID-Prozedur gibt nur Erwähnung ed einen Wert zurück, der angibt, ob die Reihenfolge gefunden werden konnte. Im folgenden Aufruf ist der erste Parameter ein Ausgabeparameter, der zum Abrufen des Rückgabewerts der Prozedur verwendet wird, der zweite Parameter ist ein Eingabeparameter, der zum Angeben der Auftrags-ID verwendet wird, und der dritte Parameter ist ein Ausgabeparameter, der zum Abrufen der Kunden-ID verwendet wird:

{? = call GetCustID(?, ?)}  

Treiber verarbeiten Werte für Eingabe- und Eingabe-/Ausgabeparameter in Prozeduren nicht anders als Eingabeparameter in anderen SQL-Anweisungen. Wenn die Anweisung ausgeführt wird, rufen sie die Werte der Variablen ab, die an diese Parameter gebunden sind, und senden sie an die Datenquelle.

Nachdem die Anweisung ausgeführt wurde, speichern Treiber die zurückgegebenen Werte von Eingabe-/Ausgabe- und Ausgabeparametern in den Variablen, die an diese Parameter gebunden sind. Diese zurückgegebenen Werte werden erst festgelegt, wenn alle von der Prozedur zurückgegebenen Ergebnisse abgerufen wurden und SQLMoreResults SQL_NO_DATA zurückgegeben wurde. Wenn das Ausführen der Anweisung zu einem Fehler führt, sind die Inhalte des Eingabe-/Ausgabeparameterpuffers oder Ausgabeparameterpuffers nicht definiert.

Eine Anwendung ruft SQLProcedure auf, um zu bestimmen, ob eine Prozedur über einen Rückgabewert verfügt. Sie ruft SQLProcedureColumns auf, um den Typ (Rückgabewert, Eingabe, Eingabe/Ausgabe oder Ausgabe) der einzelnen Prozedurparameter zu bestimmen.