Prozeduraufrufe

Eine Prozedur ist ein ausführbares Objekt, das in der Datenquelle gespeichert ist. In der Regel handelt es sich dabei um eine oder mehrere vorkompilierte SQL-Anweisungen. Die Escapesequenz zum Aufrufen einer Prozedur ist

{[?=]callprocedure-name[([parameter][,[parameter]]...)]}

wobei der Prozedurname den Namen einer Prozedur und eines Parameters angibt, gibt einen Prozedurparameter an.

Weitere Informationen zur Escapesequenz für Prozeduraufrufe finden Sie in Anhang C: SQL-Grammatik.

Eine Prozedur kann 0 (null) oder mehr Parameter haben. Es kann auch einen Wert zurückgeben, wie durch die optionale Parametermarkierung ?= am Anfang der Syntax angegeben. Wenn der Parameter ein Eingabe- oder Ausgabeparameter ist, kann es sich um ein Literal oder einen Parametermarker handelt. Interoperable Anwendungen sollten jedoch immer Parametermarkierungen verwenden, da einige Datenquellen keine Literalparameterwerte akzeptieren. Wenn der Parameter ein Ausgabeparameter ist, muss es sich um eine Parametermarkierung handelt. Parametermarkierungen müssen mit SQLBindParameter gebunden werden, bevor die Prozeduraufrufanweisung ausgeführt wird.

Eingabe- und Eingabe-/Ausgabeparameter müssen in Prozeduraufrufen nicht angegeben werden. Wenn eine Prozedur mit Klammern, aber ohne Parameter aufgerufen wird, z. B. {call procedure-name()}, weist der Treiber die Datenquelle an, den Standardwert für den ersten Parameter zu verwenden. Wenn die Prozedur keine Parameter enthält, kann dies dazu führen, dass die Prozedur fehlschlägt. Wenn eine Prozedur ohne Klammern aufgerufen wird, z. B. {call procedure-name}, sendet der Treiber keine Parameterwerte.

Literalwerte können in Prozeduraufrufen für Eingabe- und Eingabe-/Ausgabeparameter angegeben werden. Angenommen, die Prozedur InsertOrder verfügt über fünf Eingabeparameter. Der folgende Aufruf von InsertOrder lässt den ersten Parameter weg, stellt ein Literal für den zweiten Parameter bereit und verwendet eine Parametermarkierung für die dritten, vierten und fünften Parameter:

{call InsertOrder(, 10, ?, ?, ?)}   // Not interoperable!  

Beachten Sie, dass, wenn ein Parameter nicht angegeben wird, das Komma, das es von anderen Parametern getrennt, weiterhin angezeigt werden muss. Wenn ein Eingabe- oder ein Eingabe-/Ausgabeparameter ausgelassen wird, verwendet die Prozedur den Standardwert des Parameters. Eine weitere Möglichkeit zum Angeben des Standardwerts eines Eingabe- oder Eingabe-/Ausgabeparameters besteht darin, den Wert des an den Parameter gebundenen Längen-/Indikatorpuffers auf SQL_DEFAULT_PARAM festzulegen.

Wenn ein Eingabe-/Ausgabeparameter ausgelassen wird oder ein Literal für den Parameter angegeben wird, wird der Ausgabewert vom Treiber getrennt Karte. Entsprechend verwirft der Treiber den Rückgabewert, wenn die Parametermarkierung für den Rückgabewert einer Prozedur ausgelassen wird. Wenn eine Anwendung den Parameter des Rückgabewerts für eine Prozedur angibt, die keinen Wert zurückgibt, legt der Treiber den Wert des an den Parameter gebundenen Längen-/Indikatorpuffers auf SQL_NULL_DATA fest.

Angenommen, die Prozedur PARTS_IN_ORDERS erstellt ein Resultset, das eine Liste von Bestellungen enthält, die eine bestimmte Teilenummer enthalten. Der folgende Code ruft diese Prozedur für die Teilenummer 544 auf:

SQLUINTEGER   PartID;  
SQLINTEGER    PartIDInd = 0;  
  
// Bind the parameter.  
SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0,  
                  &PartID, 0, PartIDInd);  
  
// Place the department number in PartID.  
PartID = 544;  
  
// Execute the statement.  
SQLExecDirect(hstmt, "{call PARTS_IN_ORDERS(?)}", SQL_NTS);  

Um festzustellen, ob eine Datenquelle Prozeduren unterstützt, ruft eine Anwendung SQLGetInfo mit der Option SQL_PROCEDURES auf.

Weitere Informationen zu Prozeduren finden Sie unter "Prozeduren".