Oracle PL / SQL kurzor: Implicit, Explicit, Cursor for Loop [példa]
mi a kurzor a PL / SQL-ben?
a kurzor mutató erre a kontextusterületre. Az Oracle kontextusterületet hoz létre egy SQL utasítás feldolgozásához, amely tartalmazza a Nyilatkozattal kapcsolatos összes információt.
PL / SQL lehetővé teszi a programozó számára, hogy a kurzor segítségével vezérelje a kontextus területét. A kurzor tartja az SQL utasítás által visszaküldött sorokat. A sorokat a kurzor tartja a továbbiakban aktív készlet., Ezeket a kurzorokat úgy is meg lehet nevezni, hogy a kód másik helyéről is hivatkozhassanak.
ebben a bemutatóban megtudhatja –
- Implicit kurzor
- Explicit kurzor
- kurzor attribútumok
- hurok kurzor utasítás
a kurzor két típusból áll.
- Implicit kurzor
- Explicit kurzor
Implicit kurzor
amikor bármilyen DML művelet történik az adatbázisban, implicit kurzor jön létre, amely az érintett sorokat tartja, az adott műveletben., Ezeket a kurzorokat nem lehet megnevezni, ezért nem lehet ellenőrizni vagy hivatkozni a kód más helyéről. Csak a kurzor attribútumain keresztül hivatkozhatunk a legfrissebb kurzorra.
Explicit kurzor
a programozók létrehozhatnak megnevezett kontextusterületet a DML műveletek végrehajtásához, hogy nagyobb ellenőrzést szerezzenek rajta. Az explicit kurzort a PL/SQL blokk deklarációs részében kell definiálni, majd a kódban használandó “SELECT” utasításhoz kell létrehozni.
Az alábbiakban olyan lépések találhatók, amelyek részt vesznek az explicit kurzorokkal való együttműködésben.,
- A kurzor deklarálása
A kurzor deklarálása egyszerűen azt jelenti, hogy létrehozunk egy megnevezett kontextusterületet a Deklarációs részben definiált “SELECT” utasításhoz. Ennek a kontextusterületnek a neve megegyezik a kurzor nevével.
- nyitó kurzor
A kurzor megnyitása utasítja a PL/SQL-t, hogy osztja ki a kurzor memóriáját. Ez teszi a kurzort készen áll a rekordok letöltésére.
- az Adatok lekérése a Kurzorról
ebben a folyamatban a “SELECT” utasítás végrehajtásra kerül, a beolvasott sorok pedig a kiosztott memóriában tárolódnak., Ezeket most aktív készleteknek nevezik. Az Adatok lekérése a kurzorról rekordszintű tevékenység, ami azt jelenti, hogy rekordról rekordra tudjuk elérni az adatokat.
minden lekérési utasítás lekér egy aktív készletet, és megtartja az adott rekord adatait. Ez a kijelentés ugyanaz ,mint a “SELECT” utasítás, amely lekéri a rekordot, és hozzárendeli a változóhoz az “INTO” záradékban, de nem fog kivételt tenni.
- A kurzor Bezárása
miután az összes rekord letöltésre került, be kell zárnunk a kurzort, hogy az ehhez a kontextusterülethez rendelt memória felszabaduljon.,
szintaxis:
- a fenti szintaxisban a Deklarációs rész tartalmazza a kurzor és a kurzor változó deklarációját, amelybe a lekérett adatokat hozzárendelik.
- a kurzor a kurzor deklarációban megadott ‘SELECT’ utasításhoz jön létre.
- az execution részben a deklarált kurzort megnyitjuk, lekérjük és bezárjuk.
kurzor attribútumok
mind az Implicit kurzor, mind az explicit kurzor rendelkezik bizonyos attribútumokkal, amelyek elérhetők. Ezek az attribútumok több információt adnak a kurzor műveletekről., Az alábbiakban a különböző kurzor attribútumok, valamint azok használatát.
kurzor attribútum | leírás |
%talált | visszaadja a logikai eredményt “TRUE” ha a legutóbbi lekérési művelet sikeresen lekérte a rekordot, különben hamis lesz. |
%NOTFOUND | ez úgy működik, ellentétesen %talált vissza fog térni “TRUE”, ha a legutóbbi lekérési művelet nem tudott letölteni semmilyen rekordot., |
%ISOPEN | ez visszaadja logikai eredmény “TRUE” ha az adott kurzor már megnyitott, máshol visszatér “FALSE” |
%ROWCOUNT | visszaadja a numerikus értéket. Ez adja a tényleges száma rekordok, hogy van hatással a DML tevékenység. |
1.példa: ebben a példában látni fogjuk, hogyan kell kijelenteni, megnyitni, letölteni és bezárni az explicit kurzort.
az EMP táblából az összes alkalmazott nevét kurzorral vetítjük ki., A kurzor attribútumot is használjuk a hurok beállításához az összes rekord letöltéséhez a kurzorból.
kimenet
Employee Fetched:BBBEmployee Fetched:XXXEmployee Fetched:YYY Total rows fetched is 3
Kód magyarázat:
- 2.kódsor: a kurzor Guru99_det deklarálása “SELECT emp_name FROM emp’.
- 3. kódsor: változó Lv_emp_name deklarálása.
- 5. kódsor: a kurzor megnyitása guru99_det.
- 6. kódsor: az alaphurok utasítás beállítása az ’emp’ táblázat összes rekordjának lekéréséhez.,
- 7-es kódsor: a guru99_det adatok lekérése és az érték hozzárendelése az lv_emp_name-hez.
- 9. kódsor: a “%NOTFOUND ” kurzor attribútum használatával megállapíthatja, hogy a kurzor összes rekordja lekérésre került-e. Ha lekérik, akkor visszaadja a “TRUE” – t, a vezérlés pedig kilép a hurokból, különben a vezérlő folyamatosan lekéri az adatokat a kurzorról, majd kinyomtatja az adatokat.
- kódsor 11: a hurok utasítás kilépési feltétele.
- kódsor 12: nyomtassa ki a lekérett alkalmazott nevét.,
- kódsor 14: a kurzor attribútum “%ROWCOUNT ” segítségével megtalálhatja a kurzorban érintett/lekérett összes rekord számát.
- kódsor 15: a hurokból való kilépést követően a kurzor bezáródik, és a kiosztott memória szabaddá válik.
hurok kurzor utasítás
“a hurok” utasítás használható dolgozó kurzorok. Megadhatjuk a kurzor nevét a tartománykorlátozás helyett a For loop utasításban úgy, hogy a hurok a kurzor első rekordjától a kurzor utolsó rekordjáig működjön., A kurzor változó, a kurzor megnyitása, a kurzor lekérése és bezárása implicit módon történik a FOR hurokkal.
szintaxis:
DECLARECURSOR <cursor_name> IS <SELECT statement>;BEGIN FOR I IN <cursor_name> LOOP . . END LOOP;END;
- a fenti szintaxisban a Deklarációs rész tartalmazza a kurzor deklarációját.
- a kurzor a kurzor deklarációban megadott ‘SELECT’ utasításhoz jön létre.
- a végrehajtás részben a kijelölt kurzor a FOR hurokban van beállítva, ebben az esetben az ” I ” ciklusváltozó kurzorváltozóként fog viselkedni.,
1. példa: ebben a példában az EMP táblából az összes alkalmazott nevét kurzor-hurok segítségével vetítjük ki.
kimenet
Employee Fetched:BBB Employee Fetched:XXXEmployee Fetched:YYY
Kód magyarázat:
- kódsor 2: A kurzor Guru99_det deklarálása az “EMP-ből válassza ki az emp_name-t” kijelentéshez.
- kódsor 4: A kurzor ” FOR ” hurokjának felépítése az lv_emp_name hurok változóval.
- 5. kódsor: a munkavállaló nevének nyomtatása a hurok minden iterációjában.,
- 8-as kódsor: Kilépés a hurokból
Megjegyzés: A kurzor-for hurokban a kurzor attribútumok nem használhatók, mivel a kurzor megnyitása, lekérése és bezárása implicit módon történik a hurok számára.