logo

Kas ir kursors SQL?

Kursors ir pagaidu atmiņa vai pagaidu darba stacija. To piešķir Datu bāze Serveris brīdī, kad lietotājs veic DML (datu manipulācijas valodas) darbības tabulā. Kursori tiek izmantoti datu bāzu tabulu glabāšanai.

Ir 2 veidu kursori: netiešie kursori un skaidrie kursori. Tie ir izskaidroti šādi.



  1. Netieši kursori: Netiešie kursori ir zināmi arī kā SQL SERVER noklusējuma kursori. Šos kursorus piešķir SQL SERVER, kad lietotājs veic DML darbības.
  2. Skaidri kursori: Lietotāji izveido skaidrus kursorus ikreiz, kad lietotājs tos pieprasa. Skaidri kursori tiek izmantoti datu ienešanai no tabulas rindu pa rindiņām.

Kā izveidot skaidru kursoru?

  1. Kursora objekta deklarēšana

Sintakse:

DECLARE cursor_name CURSOR FOR SELECT * FROM tabulas_nosaukums

Vaicājums:



DECLARE s1 CURSOR FOR SELECT * FROM studDetails>

2. Atveriet Kursora savienojumu

java beigas cilpai

Sintakse:

OPEN cursor_connection



Vaicājums:

OPEN s1>

Ienesiet datus no kursora Kopumā ir 6 metodes, kā piekļūt datiem no kursora. Tie ir šādi:

  1. PIRMAIS tiek izmantots, lai no kursora tabulas izgūtu tikai pirmo rindu.
  2. PĒDĒJAIS tiek izmantots, lai no kursora tabulas iegūtu tikai pēdējo rindu.
  3. NĀKAMAIS tiek izmantots, lai no kursora tabulas iegūtu datus uz priekšu.
  4. PRIOR tiek izmantots, lai ielādētu datus atpakaļ virzienā no kursora tabulas.
  5. ABSOLŪTA n tiek izmantots, lai iegūtu precīzu nthrindu no kursora tabulas.
  6. RELATĪVAIS n tiek izmantots, lai iegūtu datus gan pieaugošā, gan dekrementālā veidā.

Sintakse:

IEŅEMT NĀKAMAJĀ/PIRMĀ/PĒDĒJĀ/PRIOR/ABSOLUTE n/RELATIVE n NO kursora_nosaukuma

Vaicājums:

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>
  • Aizvērt kursora savienojumu

Sintakse:

CLOSE kursora_nosaukums

Vaicājums:

CLOSE s1>
  • Atdalīt kursora atmiņu

Sintakse:

ATJAUNĀT kursora_nosaukumu

Vaicājums:

DEALLOCATE s1>

Kā izveidot netiešu kursoru?

Netiešais kursors ir kursors, ko automātiski izveido PL/SQL, kad izpildāt SQL priekšrakstu. Jums nav skaidri jādeklarē vai jāatver netiešs kursors. Tā vietā PL/SQL aizkulisēs pārvalda kursoru jūsu vietā.

Lai izveidotu netiešu kursoru PL/SQL, jums vienkārši jāizpilda SQL priekšraksts. Piemēram, lai izgūtu visas rindas no EMP tabulas, varat izmantot šādu kodu:

Vaicājums:

BEGIN FOR emp_rec IN SELECT * FROM emp LOOP DBMS_OUTPUT.PUT_LINE('Employee name: ' || emp_rec.ename); END LOOP; END;>

PL/SQL, kad mēs veicam IEVIETOT , ATJAUNINĀT vai DZĒST operācijas, automātiski tiek izveidots netiešais kursors. Šis kursors satur ievietojamos datus vai identificē atjaunināmās vai dzēšamās rindas. Šo kursoru savā kodā varat saukt par SQL kursoru. Šim SQL kursoram ir vairāki noderīgi atribūti.

  1. %FOUND ir patiess, ja pēdējā SQL darbība ietekmēja vismaz vienu rindu.
  2. %NOTFOUND ir patiess, ja tas neietekmēja nevienu rindu.
  3. %ROWCOUNT ir atgriež ietekmēto rindu skaitu.
  4. %ISOPEN pārbauda, ​​vai kursors ir atvērts.

Papildus šiem atribūtiem %BULK_ROWCOUNT un %BULK_EXCEPTIONS ir raksturīgi priekšrakstam FORALL, ko izmanto, lai vienlaikus veiktu vairākas DML darbības. %BULK_ROWCOUNT atgriež katras DML operācijas ietekmēto rindu skaitu, savukārt %BULK_EXCEPTION atgriež visus izņēmumus, kas radušies darbību laikā.

Vaicājums:

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;>

Izvade:

img1

Šī programma atjaunina tabulu, palielinot katra darbinieka algu par 1500. Pēc atjaunināšanas tiek izmantots atribūts SQL%ROWCOUNT, lai noskaidrotu, cik rindu ir ietekmējusi darbība.

Vaicājums:

DECLARE total_rows number; BEGIN UPDATE Emp SET Salary = Salary + 1500; total_rows := SQL%ROWCOUNT; dbms_output.put_line(total_rows || ' rows updated.'); END;>

Izvade:

5 Emp selected PL/SQL procedure successfully completed.>

SQL kursora izņēmumi

Ikreiz, kad izpildām SQL vaicājumu, pastāv neparedzētas kļūdas iespēja. Kursors iet cauri katrai rindu kopai, lai atgrieztos SQL vaicājumā.

Ir daži ļoti populāri izņēmumi:

  1. Dublētā vērtība: Šāda veida kļūda rodas, kad kursors mēģina ievietot ierakstu vai virkni, kas jau pastāv datu bāzē. no šāda veida kļūdām var izvairīties, pareizi apstrādājot kļūdu konf
  2. Nederīgs kursora stāvoklis: Ikreiz, kad kursors atrodas nederīgā stāvoklī, šāda veida kļūda tiks parādīta kā kļūda.
  3. Bloķēšanas taimauts: Tas notiek, kad kursors mēģina bloķēt rindu vai tabulu, bet bloķēšanu jau aiztur cits darījums.

Kursora nepieciešamība SQL serverī

  1. Kursori ļauj apstrādāt datus pa rindiņām, kas var būt noderīgi, ja mums ir jāveic sarežģīti datu aprēķini vai transformācijas.
  2. Kursori ļauj mums vairākas reizes atkārtot rezultātu kopu, kas var būt noderīgi, ja ar tiem pašiem datiem ir jāveic vairākas darbības.
  3. Kursori var būt noderīgi, ja mums ir jāapvieno vairākas tabulas ar sarežģītām attiecībām, piemēram, apstrādājot hierarhiskas datu struktūras vai veicot rekursīvus vaicājumus.
  4. Kursori ļauj mums veikt tādas darbības kā ierakstu atjaunināšana, dzēšana vai ievietošana, pamatojoties uz dažiem nosacījumiem vai kritērijiem.
  5. Kursori ir īpaši noderīgi, apstrādājot datus no vairākām tabulām, kur attiecības nav vienkāršas.

SQL servera kursora ierobežojumi

Tā kā kursoram ir daži ierobežojumi, to vajadzētu izmantot tikai tad, ja nav citas izvēles. Šie ierobežojumi ietver:

  1. Apstrādājot datus, tas bloķē apakškopu vai visu tabulu.
  2. Kursora atjaunināšanas tabula vienlaikus ieraksta vienu rindu, kas palēnina tā darbību.
  3. Lai gan cilpas ir lēnākas nekā kursori, tām ir vairāk pieskaitāmās izmaksas.
  4. Vēl viens faktors, kas ietekmē kursora ātrumu, ir kursorā ievietoto rindu un kolonnu skaits.

FAQ:

Q.1 Kā var izvairīties no kursoriem?

Atbilde:

Kursoru galvenā funkcija ir tabulas navigācija pa rindiņām. Tālāk ir norādītas dažas vienkāršas metodes, kā izvairīties no kursoriem:

2. J. Kā izmantot cilpu SQL kursorā?

Atbilde:

Visvienkāršākais veids, kā izvairīties no kursora, ir izmantot cilpu, kas ļauj ievietot rezultātu kopu pagaidu tabulā.

Q.3 Kas ir lietotāja definētas funkcijas SQL kursorā?

Atbilde:

Dažreiz iegūtā rindu kopa tiek aprēķināta, izmantojot kursorus. Mēs to varam panākt, izmantojot lietotāja definētu funkciju, kas atbilst specifikācijām.

4. jautājums. Savienojumu izmantošana ar SQL kursoru?

Atbilde:

Gadījumos, kad jāapstrādā milzīgi ieraksti, pievienošanās samazina koda rindu skaitu, apstrādājot tikai tās kolonnas, kas atbilst norādītajam nosacījumam.