Mi az a kurzor a PL / SQL-ben?
A kurzor mutató erre az összefüggési területre. Az Oracle létrehoz egy kontextusterületet egy SQL utasítás feldolgozásához, amely minden információt tartalmaz az utasításról.
A PL / SQL lehetővé teszi a programozó számára, hogy a kurzoron keresztül vezérelje a kontextus területét. A kurzor tartja az SQL utasítás által visszaadott sorokat. A kurzor által tartott sorokat aktív halmaznak nevezzük. Ezeket a kurzorokat meg lehet nevezni, hogy a kód egy másik helyéről hivatkozhassanak rájuk.
Ebben az oktatóanyagban megtanulja-
- Implicit kurzor
- Kifejezett kurzor
- Kurzorattribútumok
- FOR Loop Kurzor utasítás
A kurzor kétféle lehet.
- Implicit kurzor
- Kifejezett kurzor
Implicit kurzor
Valahányszor bármilyen DML művelet történik az adatbázisban, létrejön egy implicit kurzor, amely az érintett sorokat tartja az adott műveletben. Ezeket a kurzorokat nem lehet megnevezni, ezért nem lehet őket vezérelni vagy hivatkozni a kód egy másik helyéről. Csak a legfrissebb kurzorra hivatkozhatunk a kurzorattribútumokon keresztül.
Kifejezett kurzor
A programozók létrehozhatnak megnevezett kontextusterületet DML-műveleteik végrehajtásához, hogy jobban ellenőrizzék azt. Az explicit kurzort meg kell határozni a PL / SQL blokk deklarációs szakaszában, és a kódban használt 'SELECT' utasításhoz kell létrehozni.
Az alábbiakban bemutatjuk azokat a lépéseket, amelyek az explicit kurzorokkal végzett munkához kapcsolódnak.
- A kurzor deklarálása
A kurzor deklarálása egyszerűen azt jelenti, hogy létrehozzunk egy megnevezett kontextusterületet a 'SELECT' utasításhoz, amelyet a deklarációs rész definiál. Ennek a környezetnek a neve megegyezik a kurzor nevével.
- Kurzor megnyitása
A kurzor megnyitása utasítja a PL / SQL-t, hogy foglalja le a memóriát ehhez a kurzorhoz. A kurzor készen áll a rekordok beolvasására.
- Adatok lekérése a kurzorból
Ebben a folyamatban a 'SELECT' utasítás végrehajtásra kerül, és a beolvasott sorokat a lefoglalt memória tárolja. Ezeket most aktív halmazoknak nevezzük. Az adatok lekérése a kurzorból rekordszintű tevékenység, ami azt jelenti, hogy rekordonként férhetünk hozzá az adatokhoz.
Minden lekérési utasítás egy aktív halmazt fog lekérni, és tárolja az adott rekord információit. Ez az utasítás megegyezik a 'SELECT' utasítással, amely beolvassa a rekordot és hozzárendeli a változóhoz az 'INTO' záradékban, de nem vet ki kivételeket.
- A kurzor bezárása
Miután az összes rekord lekérésre került, be kell zárnunk a kurzort, hogy felszabaduljon az ehhez a kontextushoz rendelt memória.
Szintaxis:
DECLARECURSORIS
- A fenti szintaxisban a deklarációs rész tartalmazza a kurzor és a kurzor változó deklarációját, amelyben a lekért adatok hozzárendelésre kerülnek.
- A kurzor a kurzor deklarációjában megadott 'SELECT' utasításhoz jön létre.
- A végrehajtási részben a kijelölt kurzor kinyílik, beolvassa és bezárja.
Kurzorattribútumok
Mind az implicit kurzor, mind az explicit kurzor rendelkezik bizonyos attribútumokkal, amelyekhez hozzáférhet. Ezek az attribútumok további információt nyújtanak a kurzor műveleteiről. Az alábbiakban bemutatjuk a különböző kurzorattribútumokat és azok használatát.
Kurzorattribútum | Leírás |
%MEGTALÁLT | Visszaadja a 'TRUE' logikai eredményt, ha a legutóbbi lekérési művelet sikeresen lekérte a rekordot, ellenkező esetben FALSE. |
%NEM TALÁLHATÓ | Ez ellentétesen működik a% FOUND-tal, és visszaadja az IGAZ értéket, ha a legutóbbi lekérési művelet nem tudott beolvasni egyetlen rekordot sem. |
%NYITVA VAN | Ha az adott kurzor már meg van nyitva, akkor a logikai eredményt 'IGAZ'-val adja vissza, különben a' HAMIS 'eredményt adja |
% ROWCOUNT | Visszaadja a numerikus értéket. Megadja a DML aktivitás által érintett rekordok tényleges számát. |
1. példa : Ebben a példában megnézzük, hogyan deklarálhatjuk, nyithatjuk meg, tölthetjük le és zárhatjuk be a kurzort.
Kurzorral vetítjük az alkalmazó összes nevét az emp táblából. A kurzor attribútummal azt is beállítjuk, hogy a hurok az összes rekordot lekérje a kurzorból.
DECLARECURSOR guru99_det IS SELECT emp_name FROM emp;lv_emp_name emp.emp_name%type;BEGINOPEN guru99_det;LOOPFETCH guru99_det INTO lv_emp_name;IF guru99_det%NOTFOUNDTHENEXIT;END IF;Dbms_output.put_line(‘Employee Fetched:‘||lv_emp_name);END LOOP;Dbms_output.put_line(‘Total rows fetched is‘||guru99_det%R0WCOUNT);CLOSE guru99_det;END:/
Kimenet
Employee Fetched:BBBEmployee Fetched:XXXEmployee Fetched:YYYTotal rows fetched is 3
Kód Magyarázat:
- 2. kódsor: A „SELECT emp_name FROM emp” utasítás guru99_det kurzorának deklarálása.
- 3. kódsor: Az lv_emp_name változó deklarálása.
- 5. kódsor: A guru99_det kurzor megnyitása.
- 6. kódsor : A Basic ciklus utasítás beállítása az összes rekord beolvasására az 'emp' táblázatban.
- 7. kódsor : Megkapja a guru99_det adatokat, és az értéket hozzárendeli az lv_emp_name értékhez.
- 9. kódsor : A '% NOTFOUND' kurzorattribútum segítségével megtudhatja, hogy a kurzorban lévő összes rekord be van-e töltve. Ha be van töltve, akkor az IGAZ értéket adja vissza, és a vezérlő kilép a ciklusból, ellenkező esetben a vezérlő folytatja az adatok lekérését a kurzorból és az adatok kinyomtatását.
- 11. kódsor : EXIT feltétel a ciklus utasításhoz.
- 12. kódsor : Nyomtassa ki a letöltött alkalmazott nevét.
- 14. kódsor : A „% ROWCOUNT” kurzorattribútum használatával megtalálja a kurzorban érintett / lekért rekordok teljes számát.
- 15. kódsor: A hurokból való kilépés után a kurzor bezárul, és a kiosztott memória szabaddá válik.
FOR Loop Kurzor utasítás
A "FOR LOOP" utasítás használható a kurzorokkal való munkához. Megadhatjuk a kurzor nevét a hatókörhatár helyett a FOR ciklus utasításban, így a hurok a kurzor első rekordjától a kurzor utolsó rekordjáig fog működni. A kurzor változót, a kurzor megnyitását, a kurzor beolvasását és bezárását implicit módon a FOR hurok fogja végrehajtani.
Szintaxis:
DECLARECURSORIS
- A fenti szintaxisban a deklarációs rész tartalmazza a kurzor deklarációját.
- A kurzor a kurzor deklarációjában megadott 'SELECT' utasításhoz jön létre.
- A végrehajtási részben a deklarált kurzor a FOR ciklusban van beállítva, és az 'I' hurokváltozó ebben az esetben kurzorváltozóként fog viselkedni.
1. példa : Ebben a példában az alkalmazottak összes nevét kivetítjük az emp táblából egy kurzor-FOR hurok segítségével.
DECLARECURSOR guru99_det IS SELECT emp_name FROM emp;BEGINFOR lv_emp_name IN guru99_detLOOPDbms_output.put_line(‘Employee Fetched:‘||lv_emp_name.emp_name);END LOOP;END;/
Kimenet
Employee Fetched:BBBEmployee Fetched:XXXEmployee Fetched:YYY
Kód Magyarázat:
- 2. kódsor: A „SELECT emp_name FROM emp” utasítás guru99_det kurzorának deklarálása.
- 4. kódsor: A kurzor 'FOR' ciklusának megalkotása az lv_emp_name hurokváltozóval.
- 5. kódsor : Az alkalmazott nevének kinyomtatása a hurok minden iterációjában.
- 8. kódsor : Lépjen ki a hurokból
Megjegyzés: A Kurzor-FOR ciklusban a kurzorattribútumok nem használhatók, mivel a kurzor megnyitását, lehívását és bezárását implicit módon a FOR ciklus végzi.