Sdílet prostřednictvím


Volání procedur

Procedura je spustitelný objekt uložený ve zdroji dat. Obecně platí, že jde o jeden nebo více příkazů SQL, které byly předkompilovány. Řídicí sekvence pro volání procedury je

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

where procedure-name určuje název procedury a parametr určuje parametr procedury.

Další informace o řídicí sekvenci volání procedury naleznete v tématu Řídicí sekvence volání procedur v dodatku C: Gramatika SQL.

Procedura může mít nulové nebo více parametrů. Může také vrátit hodnotu označenou volitelnou značkou parametru ?= na začátku syntaxe. Pokud je parametr vstupním nebo výstupním parametrem, může to být literál nebo značka parametru. Interoperabilní aplikace by však měly vždy používat značky parametrů, protože některé zdroje dat nepřijímají hodnoty literálových parametrů. Pokud je parametr výstupním parametrem, musí se jednat o značku parametru. Značky parametrů musí být vázány s SQLBindParameter před provedením příkazu volání procedury.

Vstupní a vstupní/výstupní parametry je možné vynechat z volání procedur. Pokud je volána procedura s závorkou, ale bez parametrů, například {call procedure-name()}, ovladač dává zdroji dat pokyn, aby použil výchozí hodnotu pro první parametr. Pokud procedura neobsahuje žádné parametry, může to způsobit selhání procedury. Pokud je volána procedura bez závorek, například {call procedure-name}, ovladač neodesílá žádné hodnoty parametrů.

Literály je možné zadat pro vstupní a výstupní parametry ve volání procedur. Předpokládejme například, že procedura InsertOrder má pět vstupních parametrů. Následující volání insertOrder vynechá první parametr, poskytuje literál druhého parametru a používá značku parametru pro třetí, čtvrtý a pátý parametr:

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

Všimněte si, že pokud je parametr vynechán, musí se stále zobrazovat čárka, která ho odděluje od jiných parametrů. Pokud je vstupní nebo vstupní/výstupní parametr vynechán, použije procedura výchozí hodnotu parametru. Dalším způsobem, jak zadat výchozí hodnotu vstupního nebo vstupního/výstupního parametru, je nastavit hodnotu bufferu délky/indikátoru vázaného na parametr na SQL_DEFAULT_PARAM.

Pokud je vstupní/výstupní parametr vynechán nebo pokud je pro parametr zadán literál, ovladač zahodí výstupní hodnotu. Podobně, pokud je vynechána značka parametru pro návratovou hodnotu procedury, ovladač ztratí (zahodí) návratovou hodnotu. Nakonec, pokud aplikace určuje parametr návratové hodnoty u procedury, která nevrací hodnotu, ovladač nastaví hodnotu vyrovnávací paměti délky/indikátoru vázaného na parametr na SQL_NULL_DATA.

Předpokládejme, že procedura PARTS_IN_ORDERS vytvoří sadu výsledků, která obsahuje seznam objednávek obsahujících konkrétní číslo dílu. Následující kód volá tento postup pro část číslo 544:

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);  

Chcete-li zjistit, zda zdroj dat podporuje procedury, aplikace volá SQLGetInfo s možností SQL_PROCEDURES.

Další informace o postupech naleznete v tématu Procedury.