Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
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.