SQL-i kursorite sissejuhatus

Kursorid on ajutised tööruumid, mis luuakse mällu, et töödelda hunniku andmetes mõnda SQL-i käsku. Liiga keeruline määratlus? Saame sellest aru. Mõelge kursoritele nagu igale SQL-i silmusele. Soovite täita toimingut andmereaga, kasutades kursorit. Oletame, et teil on töötajate tabel, kus on kirjas organisatsiooni iga töötaja töötasu. Soovite iga töötaja palka teatud protsendi võrra suurendada. Siin saate kasutada kursorit. "Kuidas" on artiklis hiljem illustreeritud.

Niisiis loovad kursorid ajutise tööruumi valitud ridade komplektiga ja kursoriga, mis osutab praegusele reale. Seda ridade komplekti, millel kursor soovitud toimingu teeb, nimetatakse aktiivseks andmekoguks. Kursor tõmbab read ükshaaval tulemuste komplektist. Seejärel saate suvalisi SQL-toiminguid teha üks rida korraga.

Kaudsed kursorid

Kaudsed kursorid, nagu nimigi viitab, genereerib SQL-i parser DML-päringute jaoks. DML-päringud on andmete manipuleerimise päringud. Need päringud manipuleerivad või muudavad andmeid. Need ei häiri andmebaasi ülesehitust ega skeemi. Päringud nagu SELECT, INSERT, UPDATE ja DELETE genereerivad kaudse kursori. Kaudsed kursorid on lõppkasutaja jaoks peidetud.

Selgesõnalised kursorid

Selgesõnalised kursorid on kasutaja loodud kursorid. Kui kasutaja annab SQL-i parserile käsu luua aktiivse komplekti jaoks kursor, nimetatakse selliselt loodud kursorit eksplitsiitseks kursoriks. Aktiivse komplekti määratleb kasutaja SELECT-päringu abil. Selles artiklis käsitleme üksikasjalikke kursoreid üksikasjalikult.

Kursori toimingud - kursori elutsükkel

Kursori elutsükkel hõlmab tavaliselt viit etappi:

1. Deklareerimine: esimene samm on kursori kuulutamine. See samm käsib süsteemil genereerida kursori antud andmekogumiga. Andmekogum on konstrueeritud SQL-lause abil. Selles etapis luuakse aktiivne komplekt, kuid kursori ajutist tööruumi pole veel mällu avatud.

2. Ava: Järgnevalt antakse süsteemile korraldus kursori avamiseks. Selles etapis laaditakse ajutise tööruumi aktiivse komplektiga mällu ja genereeritakse osuti, mis osutab aktiivse komplekti esimesele reale.

3. Too: see on kogu protsessi korduv samm. Praegune kursori osutatav rida tõmmatakse alla ja soovitud ülesanne täidetakse reaandmetega. Kursor liigub kursori järgmisele reale.

4. Sulge: Pärast andmetöötlust tuleb kursor sulgeda.

5. Deallocate: See on viimane samm kursori kustutamiseks ja kursorile eraldatud mälu, protsessori ja muude süsteemiressursside vabastamiseks.

Selgesõnalised kursorid - tegevuses!

Olgu, nii et nüüd on meil põhiteadmised kursorite kohta ja kuidas need töötavad. On aeg meie käed määrduda ja ise selgesõnaline kursor luua.

Kursorite terminoloogia SQL-is

Mõistame selles süntaksis kasutatud terminoloogiaid.

Kursori ulatus

  • Kursori ulatus võib olla nii globaalne kui ka lokaalne . Kogu ühenduse ajal on saadaval globaalne kursor. Kohaliku kursori ulatus on piiratud ainult salvestatud protseduuride, funktsioonide või kursorit hoidva päringuga.
  • See on MS SQL Serveri spetsiifiline funktsioon. MySQL toetab ainult kohaliku ulatusega kursoreid.

Kursori liikumine

  • MS SQL Server annab ka võimaluse kursori liikumise määramiseks. See võib olla kas tavaline režiim Forward_Only, mis viib kursori esimesest reast viimasele reale reas. Või saab seda kerida esimesele, viimasele, eelmisele või järgmisele reale.
  • MySQL-i kursorid pole keritavad.

Kursori tüüp

  • Kursor võib olla staatiline, kuna see võib aktiivset komplekti vahemällu salvestada kuni tehingu asukohani ja võib edasi liikuda edasi ja tagasi läbi selle vahemällu salvestatud aktiivse komplekti. Kursor saab kiiresti edasi liikuda ainult staatilises režiimis.
  • Samuti võib dünaamiline lubada aktiivse komplekti ridade lisamist või kustutamist, kui kursor on avatud. Need muudatused pole klaviatuurirežiimis teistele kursori kasutajatele nähtavad. MySQL-i kursorid on ainult kiired.

Kursori lukk

  • Kursorilukud on kasulikud mitme kasutaja keskkonnas. Nad lukustavad rea nii, et kaks kasutajat ei tööta samadel andmetel üheaegselt. See tagab andmete terviklikkuse.
  • Ainult kirjutuskaitsega lukk väidab, et rida ei saa värskendada.
  • Kerimislukud lukustavad rea, kui need kursorile tuuakse, tagades, et toiming õnnestub ja värskendatud andmed on väljaspool kursorit saadaval. Optimistlikud katsed värskendada rida ilma lukustuseta. Seega, kui rida on värskendatud väljaspool kursorit, siis ülesanne ei õnnestu.
  • MySQL toetab ainult kirjutuskaitstud lukke. See tähendab, et MySQL tegelikku tabelit ei värskenda, pigem kopeerib andmed värskenduskäskluste tegemiseks.

Seega näeme, et need suvandid on saadaval ainult MS SQL Serveris. See muudab MySQL-i kursorite süntaksi veelgi lihtsamaks.

Näide

Uuendage nüüd töötajate tabelis olev töötajate palk.

Kasutame allpool toodud andmeid nendes kursorites SQL-i näites.

Meie kursori kood on järgmine:

DECLARE @sal float
DECLARE @newsal float
DECLARE Emp_Cur CURSOR FOR SELECT Salary, Updated_Salary FROM Employees
OPEN Emp_Cur
FETCH NEXT FROM Emp_Cur INTO @sal, @newsal
WHILE @@FETCH_STATUS = 0
BEGIN
SET @newsal = @sal*1.25
UPDATE Employees SET Updated_Salary = @newsal WHERE CURRENT OF Emp_Cur
FETCH NEXT FROM Emp_Cur INTO @sal, @newsal
END
CLOSE Emp_Cur
DEALLOCATE Emp_Cur

Ja väljund pärast ülaltoodud kursori käsu täitmist oleks järgmine:

Järeldus - kursorid SQL-is

Seega oleme näinud, mis on kursorid, kuidas neid kasutada ja kus neid vältida. Kursorid osutuvad arendajatele kasulikuks utiliidiks, kuid toimivuse hinnaga. Seega, ole kursorite valimisel ettevaatlik.

Soovitatavad artiklid

See on SQL-i kursorite juhend. Siin käsitleme näidetega SQL-i kursori tüüpe, elutsüklit ja terminoloogiat. Võite vaadata ka meie teisi soovitatud artikleid -

  1. Liitumiste tüübid SQL-is
  2. SQL-i muutmiskäsk
  3. SQL vaated
  4. SQL-i haldustööriistad
  5. Kursorite tüübid PL / SQL-is
  6. MySQL-i 6 parimat liitumistüüpi koos näidetega