Kursori on tilapäinen muisti tai tilapäinen työasema. Sen jakaa Tietokanta Palvelin, kun käyttäjä suorittaa DML- (Data Manipulation Language) -toimintoja taulukossa. Kursoreita käytetään tietokantataulukoiden tallentamiseen.
Kursoreita on 2 tyyppiä: implicit cursors ja explicit cursors. Nämä selitetään alla seuraavasti.
- Implisiittiset kursorit: Implisiittiset osoittimet tunnetaan myös SQL SERVERin oletuskursoreina. SQL SERVER allokoi nämä osoittimet, kun käyttäjä suorittaa DML-toimintoja.
- Eksplisiittiset kohdistimet: Käyttäjät luovat eksplisiittisiä kohdistimia aina, kun käyttäjä niitä vaatii. Eksplisiittisiä kohdistimia käytetään tietojen hakemiseen taulukosta rivi riviltä.
Kuinka luoda eksplisiittinen kohdistin?
- Ilmoita kohdistinobjekti
Syntaksi:
ILMOITTAA kursorin_nimi CURSOR FOR SELECT * FROM taulukon_nimi
Kysely:
DECLARE s1 CURSOR FOR SELECT * FROM studDetails>
2. Avaa kursoriyhteys
kokonaisluku kaksinkertaiseksi javaksi
Syntaksi:
AVAA cursor_connection
Kysely:
OPEN s1>
Hae tiedot kursorista On yhteensä 6 tapaa käyttää tietoja kursorista. Ne ovat seuraavat:
- ENSIMMÄINEN käytetään vain ensimmäisen rivin hakemiseen kohdistintaulukosta.
- KESTÄÄ käytetään vain viimeisen rivin hakemiseen kohdistintaulukosta.
- SEURAAVA käytetään tietojen hakemiseen eteenpäin kohdistintaulukosta.
- ENNEN käytetään tietojen hakemiseen taaksepäin kursoritaulukosta.
- ABSOLUUTTI n käytetään hakemaan tarkka nthrivi kohdistintaulukosta.
- SUHTEELLINEN n käytetään tietojen hakemiseen sekä inkrementaalisesti että dekrementaalisesti.
Syntaksi:
HAE SEURAAVA/ENSIMMÄINEN/VIIMINEN/EDELLINEN/ABSOLUUTTINEN n/SUHTEELLINEN n kohdistimen_nimi
Kysely:
FETCH FIRST FROM s1 FETCH LAST FROM s1 FETCH NEXT FROM s1 FETCH PRIOR FROM s1 FETCH ABSOLUTE 7 FROM s1 FETCH RELATIVE -2 FROM s1>
- Sulje kursoriyhteys
Syntaksi:
SULJE kohdistimen_nimi
Kysely:
CLOSE s1>
- Pura kohdistimen muisti
Syntaksi:
POISTA kursorin_nimi
Kysely:
DEALLOCATE s1>
Kuinka luoda implisiittinen kohdistin?
Implisiittinen kohdistin on kohdistin, jonka PL/SQL luo automaattisesti, kun suoritat SQL-käskyn. Sinun ei tarvitse ilmoittaa tai avata implisiittistä kohdistinta eksplisiittisesti. Sen sijaan PL/SQL hallitsee kohdistinta puolestasi kulissien takana.
Jos haluat luoda implisiittisen kohdistimen PL/SQL:ssä, sinun on yksinkertaisesti suoritettava SQL-käsky. Voit esimerkiksi hakea kaikki rivit EMP-taulukosta käyttämällä seuraavaa koodia:
Kysely:
BEGIN FOR emp_rec IN SELECT * FROM emp LOOP DBMS_OUTPUT.PUT_LINE('Employee name: ' || emp_rec.ename); END LOOP; END;> PL/SQL:ssä, kun suoritamme LISÄÄ , PÄIVITTÄÄ tai POISTAA toiminnot, implisiittinen kohdistin luodaan automaattisesti. Tämä kohdistin sisältää lisättävät tiedot tai identifioi päivitettävät tai poistettavat rivit. Voit kutsua tätä kohdistinta koodisi SQL-kohdistimena. Tällä SQL-kohdistimella on useita hyödyllisiä määritteitä.
- %FOUND on tosi, jos viimeisin SQL-toiminto vaikutti vähintään yhteen riviin.
- %NOTFOUND on totta, jos se ei vaikuttanut mihinkään riveihin.
- %ROWCOUNT on palauttaa vaikuttavien rivien määrän.
- %ISOPEN tarkistaa, onko kohdistin auki.
Näiden attribuuttien lisäksi %BULK_ROWCOUNT ja %BULK_EXCEPTIONS ovat ominaisia FORALL-käskylle, jota käytetään useiden DML-toimintojen suorittamiseen kerralla. %BULK_ROWCOUNT palauttaa niiden rivien määrän, joihin kukin DML-toiminto vaikuttaa, kun taas %BULK_EXCEPTION palauttaa kaikki toimintojen aikana tapahtuneet poikkeukset.
Kysely:
CREATE TABLE Emp( EmpID INT PRIMARY KEY, Name VARCHAR(50), Country VARCHAR(50), Age int(2), Salary int(10) ); -- Insert some sample data into the Customers table INSERT INTO Emp (EmpID, Name,Country, Age, Salary) VALUES (1, 'Shubham', 'India','23','30000'), (2, 'Aman ', 'Australia','21','45000'), (3, 'Naveen', 'Sri lanka','24','40000'), (4, 'Aditya', 'Austria','21','35000'), (5, 'Nishant', 'Spain','22','25000'); Select * from Emp;>
Lähtö:
Tämä ohjelma päivittää taulukon korottamalla kunkin työntekijän palkkaa 1500:lla. Päivityksen jälkeen SQL%ROWCOUNT-attribuutilla selvitetään, kuinka monelle riville toiminto on vaikuttanut.
Kysely:
DECLARE total_rows number; BEGIN UPDATE Emp SET Salary = Salary + 1500; total_rows := SQL%ROWCOUNT; dbms_output.put_line(total_rows || ' rows updated.'); END;>
Lähtö:
5 Emp selected PL/SQL procedure successfully completed.>
SQL-kohdistimen poikkeukset
Aina kun suoritamme SQL-kyselyn, on olemassa odottamattoman virheen mahdollisuus. Kursori kulkee jokaisen rivijoukon läpi palatakseen SQL-kyselyyn.
On olemassa joitain erittäin suosittuja poikkeuksia:
- Päällekkäinen arvo: Tämän tyyppinen virhe ilmenee, kun kohdistin yrittää lisätä tietueen tai monikko, joka on jo olemassa tietokannassa. Tämäntyyppiset virheet voidaan välttää käsittelemällä oikea virhekonf
- Virheellinen kohdistimen tila: Aina kun kohdistin on virheellisessä tilassa, tämän tyyppinen virhe näkyy virheenä.
- Lukituksen aikakatkaisu: Tämä tapahtuu, kun kohdistin yrittää saada lukon riville tai taulukolle, mutta lukko on jo toisen tapahtuman hallussa.
Kohdistimen tarve SQL-palvelimessa
- Kohdistimet antavat meille mahdollisuuden käsitellä tietoja rivi riviltä, mikä voi olla hyödyllistä, kun joudumme suorittamaan monimutkaisia laskelmia tai muunnoksia tiedoille.
- Kohdistimet antavat meille mahdollisuuden iteroida tulosjoukkoa useita kertoja, mikä voi olla hyödyllistä, kun meidän on suoritettava useita toimintoja samalle tiedolle.
- Kohdistimet voivat olla hyödyllisiä, kun meidän on yhdistettävä useita taulukoita, joissa on monimutkaisia suhteita, kuten käsiteltäessä hierarkkisia tietorakenteita tai suoritettaessa rekursiivisia kyselyitä.
- Kohdistimet antavat meille mahdollisuuden suorittaa toimintoja, kuten päivittää, poistaa tai lisätä tietueita joidenkin ehtojen tai kriteerien perusteella.
- Kohdistimet ovat erityisen hyödyllisiä, kun käsitellään tietoja useista taulukoista, joissa suhteet eivät ole yksinkertaisia.
SQL Server -kohdistimen rajoitukset
Koska kursorilla on joitain rajoituksia, sitä tulisi käyttää vain, kun muuta vaihtoehtoa ei ole. Näitä rajoituksia ovat mm.
- Dataa käsiteltäessä se asettaa lukot osajoukolle tai koko taulukolle.
- Kohdistimen päivitystaulukko tallentaa yhden rivin kerrallaan, mikä hidastaa sen suorituskykyä.
- Vaikka silmukat ovat hitaampia kuin kursorit, niillä on enemmän ylärajaa.
- Toinen kursorin nopeuteen vaikuttava tekijä on kohdistimeen tuotujen rivien ja sarakkeiden määrä.
FAQ:
K.1 Miten kohdistimet voidaan välttää?
Vastaus:
Kohdistinten ensisijainen tehtävä on navigointi rivi riviltä. Seuraavassa on muutamia yksinkertaisia tapoja välttää kursoreita:
Q.2 Kuinka silmukkaa käytetään SQL-kohdistimessa?
Vastaus:
Käyttämällä while-silmukkaa, joka mahdollistaa tulosjoukon lisäämisen väliaikaiseen taulukkoon, on yksinkertaisin tapa välttää kursorin tarvetta.
Q.3 Mitä ovat käyttäjän määrittämät funktiot SQL-kohdistimessa?
Vastaus:
Joskus tuloksena oleva rivijoukko lasketaan kursoreiden avulla. Voimme saavuttaa tämän käyttämällä käyttäjän määrittämää toimintoa, joka täyttää vaatimukset.
K.4 Liitosten käyttö SQL-kohdistimen kanssa?
Vastaus:
Tapauksissa, joissa on käsiteltävä suuria tietueita, liittäminen vähentää koodirivien määrää käsittelemällä vain ne sarakkeet, jotka täyttävät määritetyn ehdon.