Megosztás:


Eljáráshívások

Az eljárás az adatforráson tárolt végrehajtható objektum. Általában egy vagy több előre összeállított SQL-utasításról van szó. Az eljárás meghívásának feloldási sorrendje a következő:

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

ahol az eljárás neve egy eljárás nevét adja meg, a paraméter pedig egy eljárásparamétert.

Az eljáráshívási megszakítási sorozatról további információt a C függelékben, az SQL Grammar című részben a Procedure Call Escape Sequence fejezetben talál.

Egy eljárásnak nulla vagy több paramétere lehet. Egy értéket is visszaadhat, amint azt a szintaxis elején lévő opcionális paraméterjelölő ?= jelzi. Ha a paraméter bemenet vagy bemeneti/kimeneti paraméter, akkor lehet literál vagy paraméterjelölő. Az interoperábilis alkalmazásoknak azonban mindig paraméterjelölőket kell használniuk, mivel egyes adatforrások nem fogadnak el literális paraméterértékeket. Ha a paraméter kimeneti paraméter, akkor paraméterjelölőnek kell lennie. A paraméterjelölőket az eljáráshívási utasítás végrehajtása előtt az SQLBindParameterhez kell kötni.

A bemeneti és bemeneti/kimeneti paraméterek kihagyhatók az eljáráshívásokból. Ha egy eljárást zárójelekkel hív meg, de paraméterek nélkül( például {call procedure-name()}, az illesztőprogram utasítja az adatforrást, hogy használja az első paraméter alapértelmezett értékét. Ha az eljárás nem rendelkezik paraméterekkel, az az eljárás meghiúsulását okozhatja. Ha egy eljárást zárójelek nélkül hív meg (például {call procedure-name}), az illesztő nem küld paraméterértékeket.

Az eljáráshívásokban konstansok határozhatók meg a bemeneti és bemeneti/kimeneti paraméterekhez. Tegyük fel például, hogy az InsertOrder eljárásnak öt bemeneti paramétere van. Az InsertOrder következő hívása kihagyja az első paramétert, konstanst biztosít a második paraméterhez, és egy paraméterjelölőt használ a harmadik, a negyedik és az ötödik paraméterhez:

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

Figyelje meg, hogy ha egy paraméter nincs megadva, a más paraméterektől elválasztó vesszőnek továbbra is meg kell jelennie. Ha egy bemeneti vagy bemeneti/kimeneti paraméter nincs megadva, az eljárás a paraméter alapértelmezett értékét használja. Egy bemeneti vagy bemeneti/kimeneti paraméter alapértelmezett értékének megadásának másik módja, ha a paraméterhez kötött hossz/mutató puffer értékét SQL_DEFAULT_PARAM értékre állítja.

Ha egy bemeneti/kimeneti paraméter nincs megadva, vagy ha a paraméterhez literált ad meg, az illesztőprogram figyelmen kívül hagyja a kimeneti értéket. Hasonlóképpen, ha egy eljárás visszatérési értékének paraméterjelölője nincs megadva, az illesztő elveti a visszatérési értéket. Végül, ha egy alkalmazás visszaadott érték paramétert ad meg egy olyan eljáráshoz, amely nem ad vissza értéket, az illesztő a paraméterhez kötött hossz/mutató puffer értékét SQL_NULL_DATA értékre állítja.

Tegyük fel, hogy az eljárás PARTS_IN_ORDERS létrehoz egy eredménykészletet, amely egy adott cikkszámot tartalmazó rendelések listáját tartalmazza. Az alábbi kód meghívja ezt az eljárást az 544-es számú részhez:

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

Annak megállapításához, hogy egy adatforrás támogatja-e az eljárásokat, egy alkalmazás meghívja az SQLGetInfo-t a SQL_PROCEDURES lehetőséggel.

Az eljárásokkal kapcsolatos további információkért lásd: Eljárások.