Sdílet prostřednictvím


Parametry procedury

Parametry ve volání procedur můžou být vstupní, vstupní/výstupní nebo výstupní parametry. To se liší od parametrů ve všech ostatních příkazech SQL, které jsou vždy vstupními parametry.

Vstupní parametry se používají k odesílání hodnot do procedury. Předpokládejme například, že tabulka Parts obsahuje sloupce PartID, Description a Price. Procedura InsertPart může mít vstupní parametr pro každý sloupec v tabulce. Například:

{call InsertPart(?, ?, ?)}  

Ovladač by neměl upravovat obsah vstupní vyrovnávací paměti, dokud SQLExecDirect nebo SQLExecute nevrátí SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR, SQL_INVALID_HANDLE nebo SQL_NO_DATA. Obsah vstupní vyrovnávací paměti by neměl být měněn, zatímco SQLExecDirect nebo SQLExecute vrátí SQL_NEED_DATA nebo SQL_STILL_EXECUTING.

Vstupní/výstupní parametry slouží k odesílání hodnot do procedur a načítání hodnot z procedur. Použití stejného parametru jako vstupní i výstupní parametr má tendenci být matoucí a mělo by se jim vyhnout. Předpokládejme například, že procedura přijímá ID objednávky a vrací ID zákazníka. Dá se definovat pomocí jednoho vstupního a výstupního parametru:

{call GetCustID(?)}  

Může být lepší použít dva parametry: vstupní parametr pro ID objednávky a výstupní nebo vstupní/výstupní parametr pro ID zákazníka:

{call GetCustID(?, ?)}  

Výstupní parametry se používají k načtení návratové hodnoty procedury a k načtení hodnot z argumentů procedury; procedury, které vracejí hodnoty, se někdy označují jako funkce. Předpokládejme například, že procedura GetCustID právě zmíněná vrátí hodnotu, která označuje, zda bylo možné najít pořadí. V následujícím volání je prvním parametrem výstupní parametr použitý k načtení návratové hodnoty procedury, druhým parametrem je vstupní parametr použitý k zadání ID objednávky a třetí parametr je výstupní parametr použitý k načtení ID zákazníka:

{? = call GetCustID(?, ?)}  

Ovladače zpracovávají hodnoty vstupních a vstupních/výstupních parametrů v procedurách bez rozdílu než vstupní parametry v jiných příkazech SQL. Při spuštění příkazu načtou hodnoty proměnných vázaných na tyto parametry a odešlou je do zdroje dat.

Po provedení příkazu ovladače ukládají vrácené hodnoty vstupních a výstupních parametrů do proměnných vázaných na tyto parametry. Tyto vrácené hodnoty nejsou zaručeny, dokud nebudou všechny výsledky vrácené procedurou načteny a SQLMoreResults vrátí SQL_NO_DATA. Pokud provedení příkazu způsobí chybu, obsah vyrovnávací paměti vstupního/výstupního parametru nebo vyrovnávací paměti výstupního parametru není definován.

Aplikace volá SQLProcedure , aby určila, jestli má procedura návratovou hodnotu. Volá SQLProcedureColumns k určení typu (návratová hodnota, vstup, vstup/výstup nebo výstup) každého parametru procedury.