Not
Åtkomst till denna sida kräver auktorisation. Du kan prova att logga in eller byta katalog.
Åtkomst till denna sida kräver auktorisation. Du kan prova att byta katalog.
En procedur är ett körbart objekt som lagras på datakällan. I allmänhet är det en eller flera SQL-instruktioner som har förkompilerats. Escape-sekvensen för att anropa en procedur är
{[?=]callprocedure-name[([parameter][,[parameter]]... )]}
där procedure-name anger namnet på en procedur och parametern anger en procedurparameter.
Mer information om proceduranropets escape-sekvens finns i Proceduranropssekvens i bilaga C: SQL-grammatik.
En procedur kan ha noll eller fler parametrar. Det kan också returnera ett värde, vilket anges av den valfria parametermarkören ?= i början av syntaxen. Om parametern är en indata- eller indata-/utdataparameter kan den vara en literal eller en parametermarkör. Interoperabla program bör dock alltid använda parametermarkörer eftersom vissa datakällor inte accepterar literala parametervärden. Om parametern är en utdataparameter måste den vara en parametermarkör. Parametermarkörer måste vara bundna med SQLBindParameter innan proceduranropsinstrukeringen körs.
In- och in-/utdataparametrar kan utelämnas från proceduranrop. Om en procedur anropas med parenteser men utan parametrar, till exempel {call procedure-name()}, instruerar drivrutinen datakällan att använda standardvärdet för den första parametern. Om proceduren inte har några parametrar kan det leda till att proceduren misslyckas. Om en procedur anropas utan parenteser, till exempel {call procedure-name}, skickar drivrutinen inga parametervärden.
Literaler kan anges för in- och indata-/utdataparametrar i proceduranrop. Anta till exempel att proceduren InsertOrder har fem indataparametrar. Följande anrop till InsertOrder utelämnar den första parametern, tillhandahåller en literal för den andra parametern och använder en parametermarkör för parametrarna tredje, fjärde och femte:
{call InsertOrder(, 10, ?, ?, ?)} // Not interoperable!
Observera att om en parameter utelämnas måste kommatecknet som avgränsar den från andra parametrar fortfarande visas. Om en indata- eller indata-/utdataparameter utelämnas använder proceduren parameterns standardvärde. Ett annat sätt att ange standardvärdet för en indata- eller indata-/utdataparameter är att ange värdet för den längd-/indikatorbuffert som är bunden till parametern till SQL_DEFAULT_PARAM.
Om en indata-/utdataparameter utelämnas eller om en literal anges för parametern tar drivrutinen bort utdatavärdet. På samma sätt, om parametermarkören för returvärdet för en procedur utelämnas, tar drivrutinen bort returvärdet. Om ett program slutligen anger en returvärdeparameter för en procedur som inte returnerar ett värde anger drivrutinen värdet för den längd-/indikatorbuffert som är bunden till parametern till SQL_NULL_DATA.
Anta att proceduren PARTS_IN_ORDERS skapar en resultatuppsättning som innehåller en lista över order som innehåller ett visst delnummer. Följande kod anropar den här proceduren för delnummer 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);
För att avgöra om en datakälla stöder procedurer anropar ett program SQLGetInfo med alternativet SQL_PROCEDURES.
Mer information om procedurer finns i Procedurer.