PL / SQL – Kurzorok
Ebben a fejezetben a kurzorokat tárgyaljuk PL / SQL-ben. Az Oracle létrehoz egy memóriaterületet, más néven kontextusterületet egy SQL utasítás feldolgozásához, amely tartalmazza az utasítás feldolgozásához szükséges összes információt; például a feldolgozott sorok száma stb.
A kurzor mutató erre a kontextusra. A PL / SQL egy kurzoron keresztül irányítja a kontextus területét. A kurzor tartja az SQL utasítás által visszaadott sorokat (egy vagy több). A kurzor által tartott sorokat aktív halmaznak nevezzük.
Megnevezhet egy kurzort, hogy hivatkozni lehessen rá egy programban az SQL utasítás által visszaadott sorok lehívására és feldolgozására. egy időben. Kétféle kurzor létezik –
- implicit kurzorok
- explicit kurzorok
implicit kurzorok
implicit kurzorok automatikusan létrehozza az Oracle, amikor egy SQL utasítást futtatnak, amikor nincs kifejezett kurzor az utasításhoz. A programozók nem tudják ellenőrizni az implicit kurzorokat és a benne lévő információkat.
Amikor DML utasítás (INSERT, UPDATE és DELETE) kiadásra kerül, implicit kurzor társul ehhez az utasításhoz. INSERT műveleteknél a kurzor tartalmazza a beillesztendő adatokat. UPDATE és DELETE műveleteknél a kurzor azonosítja az érintett sorokat.
A PL / SQL-ben hivatkozhat a legfrissebb implicit kurzorra SQL-kurzorként, amelynek mindig vannak attribútumai, például% FOUND ,% ISOPEN,% NOTFOUND és% ROWCOUNT. Az SQL kurzor további attribútumokkal rendelkezik:% BULK_ROWCOUNT és% BULK_EXCEPTIONS, amelyeket a FORALL utasítással való használatra terveztek. Az alábbi táblázat ismerteti a leggyakrabban használt attribútumokat –
S.No | & Leírás |
---|---|
1 attribútum |
% FOUND IGAZ eredményt ad, ha egy INSERT, UPDATE vagy DELETE utasítás egy vagy több sort érintett vagy egy SELECT INTO utasítás egy vagy több sort adott vissza. Ellenkező esetben HAMIS. |
2 |
% NOTFOUND A% FOUND logikai ellentéte. Az IGAZ értéket adja vissza, ha egy INSERT, UPDATE vagy DELETE utasítás nem érintett sorokat, vagy a SELECT INTO utasítás nem adott sorokat. Ellenkező esetben a FALSE értéket adja vissza. |
3 |
% ISOPEN Az implicit kurzorok esetén mindig FALSE értéket ad vissza, mert az Oracle a társított SQL utasítás végrehajtása után automatikusan bezárja az SQL kurzort. |
4 |
% ROWCOUNT Visszaadja az INSERT, UPDATE vagy DELETE utasítással érintett vagy a SELECT INTO utasítás által visszaadott sorok számát. |
Bármely SQL kurzorattribútum sql% attribute_name néven lesz elérhető, a lenti példában látható módon.
Példa
Az előző fejezetekben létrehozott és használt ÜGYFELEK táblázatot fogjuk használni.
A következő program frissíti a táblázatot, és minden ügyfél fizetését 500-mal emeli, és az SQL% -ot fogja használni. ROWCOUNT attribútum az érintett sorok számának meghatározásához –
Amikor a fenti kód végrehajtásra kerül az SQL parancssorban, a következő eredményt kapja –
6 customers selected PL/SQL procedure successfully completed.
Ha megnézi a rekordokat az ügyfelek táblázatában, akkor kiderül, hogy a sorok frissültek –
Explicit Kurzorok
Az Explicit Kurzorok a programozó által definiált kurzorok, amelyekkel jobban ellenőrizhetők a kontextus területe. Egy explicit kurzort meg kell határozni a PL / SQL blokk deklarációs szakaszában. Egy SELECT utasításon jön létre, amely egynél több sort ad vissza.
Az explicit kurzor létrehozásának szintaxisa –
CURSOR cursor_name IS select_statement;
Működik explicit kurzorral a következő lépéseket tartalmazza:
- A kurzor deklarálása a memória inicializálásához
- A kurzor megnyitása a memória lefoglalásához
- A kurzor lekérése az adatok lekérdezéséhez
- A kurzor bezárása a kiosztott memória felszabadításához
A kurzor deklarálása
A kurzor deklarálása megadja a kurzort egy névvel és a társított SELECT utasítás. Például –
CURSOR c_customers IS SELECT id, name, address FROM customers;
A kurzor megnyitása
A kurzor megnyitása felosztja a memóriát a kurzor számára, és készen áll a visszaküldött sorok beolvasására. az SQL utasítással. Például a fenti kurzort a következőképpen nyitjuk meg:
OPEN c_customers;
A kurzor lekérése
A kurzor lekérése egy sor elérését jelenti. Egy idő. Például sorokat fogunk lekérni a fent megnyitott kurzorból az alábbiak szerint –
FETCH c_customers INTO c_id, c_name, c_addr;
A kurzor bezárása
A kurzor bezárása feloldást jelent a lefoglalt memória.Például bezárjuk a fent megnyitott kurzort az alábbiak szerint –
CLOSE c_customers;
Példa
Az alábbiakban bemutatunk egy teljes példát a fogalmak szemléltetésére. explicit kurzorok & minua;
Amikor a fenti kódot végrehajtják az SQL parancssorban, a következő eredményt kapja –
1 Ramesh Ahmedabad 2 Khilan Delhi 3 kaushik Kota 4 Chaitali Mumbai 5 Hardik Bhopal 6 Komal MP PL/SQL procedure successfully completed.