Oracle PL/SQL-kohdistin: implisiittinen, eksplisiittinen, silmukalle esimerkin kanssa
⚡ Älykäs yhteenveto
Kursorit Oracle PL/SQL-kursorit ovat osoittimia kontekstialueelle, joka sisältää SQL-lausekkeen palauttamat rivit. Niitä on kahdenlaisia: implisiittiset kursorit, jotka luodaan automaattisesti DML:ää varten, ja eksplisiittiset kursorit, jotka ohjelmoija määrittelee ja joita hän ohjaa.

Mikä on CURSOR PL/SQL:ssä?
Kursori on osoitin kontekstialueelle. Oracle luo kontekstialueen käsittelyä varten SQL lauseke, ja tämä alue sisältää kaikki lauseketta koskevat tiedot.
PL / SQL mahdollistaa ohjelmoijan hallita kontekstialuetta kohdistimen avulla. Kohdistin sisältää SQL-lausekkeen palauttamat rivit, ja kohdistimen sisältämää rivijoukkoa kutsutaan aktiiviseksi joukoksi. Nämä kursorit voidaan myös nimetä, jotta niihin voidaan viitata koodin toisesta paikasta.
Kursoria on kahdenlaisia:
- Implisiittinen kohdistin
- Eksplisiittinen kohdistin
Implisiittinen kohdistin
Aina kun jokin DML-toiminto Jos tietokannassa tapahtuu toiminto , luodaan implisiittinen kursori, joka sisältää kyseisessä toiminnossa käytetyt rivit. Näitä kursoreita ei voi nimetä, joten niitä ei voida ohjata tai niihin ei voida viitata koodin toisesta kohdasta. Voimme viitata vain viimeisimpään kursoriin kursorin ominaisuuksien kautta.
Eksplisiittinen kohdistin
Ohjelmoijat voivat luoda nimetyn kontekstialueen DML-toimintojensa suorittamiseksi ja saada siitä enemmän hallintaa. Eksplisiittinen kursori tulisi määritellä funktion deklarointiosiossa. PL/SQL-lohko, ja se luodaan koodissa käytettävää SELECT-lauseketta varten.
Alla on vaiheet, jotka liittyvät eksplisiittisten kursoreiden käsittelyyn:
- Kohdistimen määrittäminen: Kohdistimen määrittely tarkoittaa yksinkertaisesti yhden nimetyn kontekstialueen luomista SELECT-lausekkeelle, joka määritellään määrittelyosassa. Tämän kontekstialueen nimi on sama kuin kohdistimen nimi.
- Kohdistimen avaaminen: Kohdistimen avaaminen käskee PL/SQL:ää varaamaan muistia tälle kohdistimelle. Se valmistelee kohdistimen tietueiden hakemiseen.
- Tiedon hakeminen kursorista: Tässä prosessissa SELECT-lauseke suoritetaan ja noudetut rivit tallennetaan varattuun muistiin. Näitä kutsutaan nyt aktiivisiksi joukoiksi. Tiedon hakeminen kohdistimesta on tietuetason toiminto, mikä tarkoittaa, että voimme käyttää tietoja tietue kerrallaan. Jokainen fetch-lauseke noutaa yhden aktiivisen joukon ja sisältää kyseisen tietueen tiedot. Tämä lauseke on sama kuin SELECT-lauseke, joka noutaa tietueen ja sijoittaa sen INTO-lausekkeen muuttujaan, mutta se ei heitä mitään virhettä. poikkeukset.
- Kohdistimen sulkeminen: Kun kaikki tietueet on noudettu, meidän on suljettava kohdistin, jotta tälle kontekstialueelle varattu muisti vapautuu.
Syntaksi
DECLARE CURSOR <cursor_name> IS <SELECT statement>; <cursor_variable declaration>; BEGIN OPEN <cursor_name>; FETCH <cursor_name> INTO <cursor_variable>; . . CLOSE <cursor_name>; END;
Yllä olevassa syntaksissa deklarointiosa sisältää kohdistimen ja kohdistinmuuttujan deklaroinnin, johon noudetut tiedot sijoitetaan. Kursori luodaan kohdistimen deklaroinnissa annettua SELECT-lauseketta varten. Suoritusosassa ilmoitettu kohdistin avataan, noudetaan ja suljetaan.
Kohdistimen attribuutit
Sekä implisiittisellä että eksplisiittisellä kursorilla on tiettyjä ominaisuuksia, joihin voi päästä käsiksi. Nämä ominaisuudet antavat lisätietoja kursorin toiminnoista. Alla on lueteltu eri kursorin ominaisuudet ja niiden käyttö.
| Kohdistimen attribuutti | Tuotetiedot |
|---|---|
| % FOUND | Palauttaa totuusarvon TRUE, jos viimeisin hakutoiminto nouti tietueen onnistuneesti; muuten se palauttaa FALSE. |
| %EI LÖYDETTY | Toimii päinvastoin kuin %FOUND. Palauttaa arvon TRUE, jos viimeisin hakutoiminto ei pystynyt hakemaan yhtään tietuetta. |
| % ISOPEN | Palauttaa loogisen tuloksen TOTUUSarvon TOSI, jos annettu kursori on jo auki; muuten se palauttaa arvon EPÄTOSI. |
| % ROWCOUNT | Palauttaa numeerisen arvon, joka antaa toiminnon vaikuttamien tai noutamien tietueiden todellisen määrän. |
Eksplisiittinen kursori esimerkki: Tässä esimerkissä näemme, miten eksplisiittinen kursori määritetään, avataan, noudetaan ja suljetaan. Projisoimme kaikkien työntekijöiden nimet emp-taulukosta kursorin avulla. Käytämme myös kursoriattribuuttia asettaaksemme silmukan noutamaan kaikki tietueet kursorista.
Alla oleva kuvakaappaus näyttää tämän eksplisiittisen kursoriesimerkin ja sen tulosteen Oracle.
DECLARE CURSOR guru99_det IS SELECT emp_name FROM emp; lv_emp_name emp.emp_name%type; BEGIN OPEN guru99_det; LOOP FETCH guru99_det INTO lv_emp_name; IF guru99_det%NOTFOUND THEN EXIT; END IF; Dbms_output.put_line('Employee Fetched:'||lv_emp_name); END LOOP; Dbms_output.put_line('Total rows fetched is'||guru99_det%ROWCOUNT); CLOSE guru99_det; END; /
ulostulo
Employee Fetched:BBB Employee Fetched:XXX Employee Fetched:YYY Total rows fetched is 3
Code Selitys
- Code rivi 2: Kohdistimen guru99_det määrittely lausekkeelle 'SELECT emp_name FROM emp'.
- Code rivi 3: Muuttujan lv_emp_name määrittäminen käyttämällä %tyyppi ankkuroitu emp.emp_name-tiedostoon.
- Code rivi 5: Kohdistimen guru99_det avaaminen.
- Code rivi 6: Perussilmukan asettaminen hakemaan kaikki emp-taulukon tietueet.
- Code rivi 7: Noutaa guru99_det-tiedot ja määrittää arvon lv_emp_name-muuttujalle.
- Code rivi 8: Käytetään kohdistimen attribuuttia %NOTFOUND tarkistetaan, onko kaikki kohdistimen tietueet noudettu. Jos noudettu, se palauttaa arvon TRUE ja control poistuu silmukasta; muuten control jatkaa datan noutamista kohdistimesta ja tulostaa sen.
- Code rivi 10: EXIT-ehto silmukkakäskylle.
- Code rivi 12: Tulosta haettu työntekijän nimi.
- Code rivi 14: Kohdistimen attribuutin %ROWCOUNT avulla voit löytää kohdistimen noutamien tietueiden kokonaismäärän.
- Code rivi 15: Silmukasta poistumisen jälkeen kursori suljetaan ja varattu muisti vapautetaan.
FOR Loop Cursor -lause
Kohdistin FOR silmukkaa voidaan käyttää kursoreiden kanssa työskentelyyn. Voimme antaa FOR-silmukassa kohdistimen nimen aluerajan sijaan, jolloin silmukka toimii kohdistimen ensimmäisestä tietueesta viimeiseen tietueeseen. Kursorimuuttujan arvon määrittäminen, kohdistimen avaaminen, hakeminen ja sulkeminen tehdään kaikki implisiittisesti FOR-silmukassa.
Syntaksi
DECLARE CURSOR <cursor_name> IS <SELECT statement>; BEGIN FOR I IN <cursor_name> LOOP . . END LOOP; END;
Yllä olevassa syntaksissa deklarointiosa sisältää kohdistimen deklaroinnin. Kursori luodaan kohdistimen deklaroinnissa annettua SELECT-lauseketta varten. Suoritusosassa deklaroitu kohdistin asetetaan FOR-silmukassa, ja silmukkamuuttuja 'I' toimii tässä tapauksessa kohdistinmuuttujana.
Oracle Silmukan kursoriesimerkki: Tässä esimerkissä projisoimme kaikkien työntekijöiden nimet emp-taulukosta käyttämällä kursori-FOR-silmukkaa.
DECLARE CURSOR guru99_det IS SELECT emp_name FROM emp; BEGIN FOR lv_emp_name IN guru99_det LOOP Dbms_output.put_line('Employee Fetched:'||lv_emp_name.emp_name); END LOOP; END; /
ulostulo
Employee Fetched:BBB Employee Fetched:XXX Employee Fetched:YYY
Code Selitys
- Code rivi 2: Kohdistimen guru99_det määrittely lausekkeelle 'SELECT emp_name FROM emp'.
- Code rivi 4: FOR-silmukan muodostaminen kohdistimelle silmukkamuuttujalla lv_emp_name.
- Code rivi 6: Työntekijän nimen tulostaminen jokaiseen silmukan iteraatioon.
- Code rivi 7: Poistu silmukasta (LOPPU SILMUKKA).
Huomautus: Kursori-FOR-silmukassa kohdistimen attribuutteja ei voida käyttää, koska FOR-silmukka avaa, hakee ja sulkee kohdistimen implisiittisesti.

