Uvod u kursore u SQL-u

Kursori su privremeni radni prostori stvoreni u memoriji za obradu nekih SQL naredbi na hrpi podataka. Previše složena definicija? Da razumijemo. Razmislite o kursorima kao o svakoj petlji u SQL-u. Ako želite izvršiti zadatak na skupu podataka, koristite pokazivač. Recimo da imate stol zaposlenika koji drži plaću svakog zaposlenika organizacije. Želite povećati plaću svakog zaposlenika za određeni postotak. Ovdje biste koristili pokazivač. 'Kako' je prikazano kasnije u članku.

Dakle, kursori stvaraju privremeni radni prostor s odabranim nizom redaka i pokazivačem koji upućuje na trenutni redak. Ovaj skup redaka, na kojem će pokazivač izvršiti željenu operaciju, naziva se aktivnim skupom podataka. Pokazivač pojedinačno pronalazi retke iz skupa rezultata. Tada možete izvoditi bilo koju SQL operaciju jedan red po jedan.

Implicitni kursori

Implicitni pokazivači, kao što i ime implicira, generirani su SQL analizatorom za DML upite. DML upiti su upiti za manipulaciju podacima. Ovi upiti manipuliraju ili mijenjaju podatke. Oni se ne miješaju u strukturu ili shemu baze podataka. Upiti poput SELECT, INSERT, UPDATE i DELETE generiraju implicitni kursor. Implicitni pokazivači su skriveni krajnjem korisniku.

Eksplicitni kursori

Eksplicitni kursori su kursori generirani od strane korisnika. Kad korisnik uputi SQL analizator da stvori pokazivač za aktivni skup, tako kreiran pokazivač naziva se eksplicitni kursor. Aktivni skup je definiran putem SELECT upita od strane korisnika. U ovom ćemo članku detaljno biti obuhvaćeni eksplicitni pokazivači.

Radnje kursora - Životni ciklus pokazivača

Životni ciklus pokazivača obično uključuje pet faza:

1. Izjaviti: prvi korak je proglašavanje pokazivača. Ovaj korak upućuje sustav da generira pokazivač s danim skupom podataka. Skup podataka konstruira se pomoću SQL izraza. U ovoj se fazi stvara aktivni skup, ali privremeni radni prostor pokazivača još nije otvoren u memoriji.

2. Otvoreno: Zatim sustav upućuje da otvori pokazivač. U ovoj se fazi privremeni radni prostor učitava u memoriju s aktivnim setom i generira se pokazivač koji upućuje na prvi red u aktivnom skupu.

3. Dohvat: Ovo je ponavljajući korak u cijelom procesu. Dohvaća se trenutni red usmjeren pokazivačem i željeni zadatak se izvodi na podacima retka. Pokazivač se pomiče na sljedeći red pokazivača.

4. Zatvori: Nakon završetka manipulacije podacima, pokazivač treba biti zatvoren.

5. Dijeljenje odredišta: ovo je posljednji korak za brisanje pokazivača i oslobađanje memorije, procesora i drugih resursa sustava dodijeljenih pokazivaču.

Eksplicitni kursori - na djelu!

U redu, sada imamo osnovno razumijevanje što su kursori i kako funkcioniraju. Vrijeme je da umažemo ruke i sami kreiramo eksplicitni pokazivač.

Terminologija kursora u SQL-u

Shvatimo terminologije koje se koriste u ovoj sintaksi.

Opseg pokazivača

  • Opseg pokazivača može biti GLOBAL ili LOCAL . Globalni pokazivač dostupan je u cijeloj vezi. Lokalni pokazivač ograničen je samo na pohranjene postupke, funkcije ili upit koji drži pokazivač.
  • Ovo je značajka MS SQL Server-a. MySQL podržava samo mjerne pokazivače.

Kretanje kursora

  • MS SQL Server također daje mogućnost podešavanja kretanja kursora. To može biti bilo uobičajeni način Naprijed_Ono, koji pomiče pokazivač od prvog reda do posljednjeg retka po red. Ili se može pomicati do prvog, posljednjeg, prethodnog ili sljedećeg retka.
  • Kursori u MySQL-u ne mogu se pomicati.

Vrsta kursora

  • Kursor može biti statičan jer može predmemorirati aktivni skup do prijenosa i može žonglirati naprijed i natrag kroz taj predmemorirani aktivni skup. Pokazivač može biti brzo_naprijed samo u statičkom načinu rada.
  • Također može biti dinamično da dopušta dodavanje ili brisanje redaka u aktivnom skupu dok je kursor otvoren. Ove promjene nisu vidljive drugim korisnicima kursora u načinu podešavanja tipki. Kursori u MySQL-u su samo fast_forward.

Zaključavanje kursora

  • Zaključavanje kursora korisno je u okruženju za više korisnika. Oni zaključavaju red tako da dva korisnika ne rade istovremeno na istim podacima. To osigurava integritet podataka.
  • Zaključavanje samo za čitanje kaže da se redak ne može ažurirati.
  • Scroll-locks zaključavaju red dok su dohvaćeni u pokazivaču osiguravajući da zadatak uspije, a ažurirani podaci su dostupni izvan pokazivača. Optimistični pokušaji ažuriranja retka bez ikakvog zaključavanja. Dakle, ako je red ažuriran izvan pokazivača, zadatak neće uspjeti.
  • MySQL podržava zaključavanje samo za čitanje. To znači da MySQL neće ažurirati stvarnu tablicu, već će kopirati podatke za izvršavanje naredbi za ažuriranje.

Dakle, vidimo da su ove opcije dostupne samo u MS SQL Serveru. To čini sintaksu za MySQL pokazivače još jednostavnijom.

Primjer

Ažurirajte plaće zaposlenika u tablici zaposlenika.

Koristili bismo dolje podatke u tim pokazivačima u primjeru SQL-a.

Naš bi kurs pokazivača bio sljedeći:

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

A izlaz nakon izvršenja gornje naredbe pokazivača bio bi:

Zaključak - Kursori u SQL-u

Tako smo vidjeli što su kursori, kako ih koristiti i gdje ih izbjeći. Kursori se dokazuju kao korisni alat za programere, ali po cijenu izvedbe. Dakle, budite oprezni kad se odlučite za pokazivače.

Preporučeni članci

Ovo je vodič za kursore u SQL-u. Ovdje ćemo s primjerima razgovarati o vrstama, životnom ciklusu i terminologiji pokazivača u SQL-u. Možete i pregledati naše druge predložene članke -

  1. Vrste pridruživanja u SQL-u
  2. SQL Alter naredba
  3. SQL prikazi
  4. Alati za upravljanje SQL-om
  5. Vrste kursora u PL / SQL
  6. Top 6 vrsta pridruživanja u MySQL-u s primjerima

Kategorija: