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.
A billentyűkészlet-vezérelt kurzor egy statikus és egy dinamikus kurzor között helyezkedik el, amely képes észlelni a változásokat. A statikus kurzorhoz hasonlóan nem mindig észleli az eredményhalmaz tagságának és sorrendjének változásait. A dinamikus kurzorhoz hasonlóan észleli az eredményhalmaz sorainak változásait (a tranzakció elkülönítési szintjétől függően, a SQL_ATTR_TXN_ISOLATION kapcsolatattribútum által beállított értéktől függően).
A kulcskészlet-vezérelt kurzor megnyitásakor a teljes eredményhalmaz kulcsait menti; ez kijavítja az eredményhalmaz látszólagos tagságát és sorrendjét. Ahogy a kurzor végiggörget az eredményhalmazon, a kulcskészletben található billentyűkkel kéri le az egyes sorok aktuális adatértékeit. Tegyük fel például, hogy egy kulcskészlet-vezérelt kurzor lekér egy sort, és egy másik alkalmazás frissíti azt. Ha a kurzor újrafésüli a sort, a megjelenített értékek az újak, mert a kulcsával újrafogalmazta a sort. Emiatt a billentyűkészlet-vezérelt kurzorok mindig észlelik a saját és mások által végrehajtott módosításokat.
Amikor a kurzor egy törölt sort próbál lekérni, ez a sor "lyukként" jelenik meg az eredményhalmazban: A sor kulcsa létezik a kulcskészletben, de a sor már nem létezik az eredményhalmazban. Ha egy sor kulcsértékei frissülnek, a sort úgy kezeljük, mintha töröltük volna és utána újra beillesztettük volna, ezért az ilyen sorok is réseként jelennek meg az eredményhalmazban. Bár a kulcskészlet-vezérelt kurzor mindig észleli a mások által törölt sorokat, opcionálisan eltávolíthatja azokat a sorokat, amelyeket töröl a kulcskészletből. Az ilyen kulcskészlet-vezérelt kurzorok nem tudják észlelni a saját törléseiket. A rendszer az SQLGetInfo SQL_STATIC_SENSITIVITY lehetőségével jelzi, hogy egy adott kulcskészlet-vezérelt kurzor észleli-e a saját törléseit.
A mások által beszúrt sorok soha nem láthatók a billentyűkészlet-vezérelt kurzor számára, mert ezekhez a sorokhoz nincsenek kulcsok a kulcskészletben. A billentyűkészlet-vezérelt kurzor azonban opcionálisan hozzáadhatja a saját maga által beszúrt sorok kulcsait a kulcskészlethez. Azok a kulcskészlet-vezérelt kurzorok, amelyek ezt teszik, képesek észlelni a saját beszúrásaikat. A rendszer az SQLGetInfo SQL_STATIC_SENSITIVITY lehetőségével jelzi, hogy egy adott kulcskészlet-vezérelt kurzor észleli-e a saját beszúrásait.
A SQL_ATTR_ROW_STATUS_PTR utasítás attribútum által megadott sorállapot-tömb bármely sorhoz tartalmazhat SQL_ROW_SUCCESS, SQL_ROW_SUCCESS_WITH_INFO vagy SQL_ROW_ERROR. Az SQL_ROW_UPDATED, SQL_ROW_DELETED vagy SQL_ROW_ADDED értékeket adja vissza azokra a sorokra, amelyeket frissítettként, töröltként vagy beszúrtként észlel.
A kulcskészlet-alapú kurzorok általában úgy implementálódnak, hogy létrehoznak egy ideiglenes táblát, amely az eredményhalmaz minden sorához tartalmazza a kulcsokat. Mivel a kurzornak azt is meg kell határoznia, hogy a sorok frissültek-e, ez a táblázat gyakran tartalmaz egy sorverziós információt tartalmazó oszlopot is.
Az eredeti eredményhalmaz görgetéséhez a billentyűkészlet-vezérelt kurzor statikus kurzort nyit meg az ideiglenes táblázat felett. Az eredeti eredményhalmaz egy sorának lekéréséhez a kurzor először lekéri a megfelelő kulcsot az ideiglenes táblából, majd lekéri a sor aktuális értékeit. Ha blokkkurzorokat használ, a kurzornak több kulcsot és sort kell lekérnie.