Megosztás:


Állítás végrehajtása

Az utasítás végrehajtásának négy módja van attól függően, hogy az adatbázismotor mikor állítja össze (készíti el) és ki határozza meg azokat:

  • Közvetlen végrehajtás Az alkalmazás határozza meg az SQL-utasítást. A rendszer egyetlen lépésben készíti elő és hajtja végre futtatáskor.

  • Előkészített végrehajtás Az alkalmazás határozza meg az SQL-utasítást. A rendszer futásidőben, külön lépésekben készíti elő és hajtja végre. Az utasítás egy alkalommal készíthető el, és többször is végrehajtható.

  • Eljárások Az alkalmazás fejlesztési időben definiálhat és fordíthat le egy vagy több SQL-utasítást, és ezeket az utasításokat az adatforrásban tárolhatja eljárásként. Az eljárást futtatáskor egy vagy több alkalommal hajtja végre a rendszer. Az alkalmazás katalógusfüggvények használatával számba tudja sorolni az elérhető tárolt eljárásokat.

  • Katalógusfüggvények Az illesztőprogram-író létrehoz egy függvényt, amely egy előre definiált eredményhalmazt ad vissza. Ez a függvény általában előre definiált SQL-utasítást küld, vagy meghív egy erre a célra létrehozott eljárást. A függvény futtatásakor egy vagy több alkalommal kerül végrehajtásra.

Egy adott utasítás (az utasításkezelő által meghatározott módon) tetszőleges számú alkalommal végrehajtható. Az utasítás számos különböző SQL-utasítással végrehajtható, vagy megismételhető ugyanazzal az SQL-utasítással. Az alábbi kód például ugyanazt az utasításkezelőt (hstmt1) használja a táblák lekéréséhez és megjelenítéséhez a Sales adatbázisban. Ezután újra felhasználja ezt a leírót a felhasználó által kijelölt tábla oszlopainak lekéréséhez.

SQLHSTMT    hstmt1;  
SQLCHAR *   Table;  
  
// Create a result set of all tables in the Sales database.  
SQLTables(hstmt1, "Sales", SQL_NTS, "sysadmin", SQL_NTS, NULL, 0, NULL, 0);  
  
// Fetch and display the table names; then close the cursor.  
// Code not shown.  
  
// Have the user select a particular table.  
SelectTable(Table);  
  
// Reuse hstmt1 to create a result set of all columns in Table.  
SQLColumns(hstmt1, "Sales", SQL_NTS, "sysadmin", SQL_NTS, Table, SQL_NTS, NULL, 0);  
  
// Fetch and display the column names in Table; then close the cursor.  
// Code not shown.  

Az alábbi kód azt mutatja be, hogy egy fogópont hogyan hajtja végre ismételten ugyanazt az utasítást a sorok táblázatból való törléséhez.

SQLHSTMT      hstmt1;  
SQLUINTEGER   OrderID;  
SQLINTEGER    OrderIDInd = 0;  
  
// Prepare a statement to delete orders from the Orders table.  
SQLPrepare(hstmt1, "DELETE FROM Orders WHERE OrderID = ?", SQL_NTS);  
  
// Bind OrderID to the parameter for the OrderID column.  
SQLBindParameter(hstmt1, 1, SQL_PARAM_INPUT, SQL_C_ULONG, SQL_INTEGER, 5, 0,  
                  &OrderID, 0, &OrderIDInd);  
  
// Repeatedly execute hstmt1 with different values of OrderID.  
while ((OrderID = GetOrderID()) != 0) {  
   SQLExecute(hstmt1);  
}  

Sok illesztőprogram esetében az utasítások kiosztása költséges feladat, ezért ugyanazon állítás ilyen módon történő újrafelhasználása általában hatékonyabb, mint a meglévő utasítások felszabadítása és az újak kiosztása. Az eredményhalmazokat egy utasításon létrehozó alkalmazásoknak óvatosnak kell lenniük, hogy az utasítás újbóli létrehozása előtt zárja be a kurzort az eredményhalmaz fölé; további információ: A kurzor bezárása.

Az utasítások ismételt használata arra is kényszeríti az alkalmazást, hogy elkerülje az egyszerre aktív utasítások számának bizonyos illesztőprogramokban való korlátozását. Az "aktív" pontos definíciója illesztőprogram-specifikus, de gyakran hivatkozik minden olyan utasításra, amelyet előkészítettek vagy végrehajtottak, és továbbra is elérhetők az eredmények. Például az INSERT utasítás elkészítése után általában aktívnak tekintik; a SELECT utasítás végrehajtása után, és a kurzor továbbra is nyitva van, általában aktívnak minősül; A CREATE TABLE utasítás végrehajtása után általában nem tekinthető aktívnak.

Az alkalmazás az SQLGetInfo SQL_MAX_CONCURRENT_ACTIVITIES beállítással történő meghívásával határozza meg, hogy egyszerre hány utasítás lehet aktív egyetlen kapcsolaton. Egy alkalmazás több aktív utasítást használhat, mint ez a korlát, ha több kapcsolatot nyit meg az adatforrással; mivel a kapcsolatok költségesek lehetnek, figyelembe kell venni a teljesítményre gyakorolt hatást.

Az alkalmazások korlátozhatják az utasítás végrehajtásához a SQL_ATTR_QUERY_TIMEOUT utasítástribútummal kiszabott időt. Ha az időtúllépési időszak lejár, mielőtt az adatforrás visszaadja az eredményhalmazt, az SQL-utasítást végrehajtó függvény az SQLSTATE HYT00 értéket adja vissza (az időtúllépés lejárt). Alapértelmezés szerint nincs időtúllépés.

Ez a szakasz a következő témaköröket tartalmazza.