Žymeklis yra laikina atmintis arba laikino darbo vieta. Jį skiria Duomenų bazė Serveris tuo metu, kai vartotojas atlieka DML (duomenų manipuliavimo kalbos) operacijas lentelėje. Žymekliai naudojami duomenų bazių lentelėms saugoti.
Yra 2 žymeklių tipai: numanomi žymekliai ir aiškūs žymekliai. Tai paaiškinama taip, kaip nurodyta toliau.
- Netiesioginiai žymekliai: Numanomi žymekliai taip pat žinomi kaip numatytieji SQL SERVER žymekliai. Šiuos žymeklius paskirsto SQL SERVER, kai vartotojas atlieka DML operacijas.
- Aiškūs žymekliai: Aiškius žymeklius sukuria vartotojai, kai tik vartotojas jų reikalauja. Aiškūs žymekliai naudojami duomenims iš lentelės gauti eilučių po eilutės būdu.
Kaip sukurti aiškų žymeklį?
- Paskelbkite žymeklio objektą
Sintaksė:
DECLARE cursor_name CURSOR FOR SELECT * FROM lentelės_pavadinimas
Užklausa:
DECLARE s1 CURSOR FOR SELECT * FROM studDetails>
2. Atidarykite žymeklio ryšį
žiniasklaidos perdavimas
Sintaksė:
OPEN cursor_connection
Užklausa:
OPEN s1>
Gaukite duomenis iš žymeklio Iš viso yra 6 būdai pasiekti duomenis iš žymeklio. Jie yra tokie:
- PIRMAS naudojamas norint gauti tik pirmąją eilutę iš žymeklio lentelės.
- PASKUTINĖS naudojamas norint gauti tik paskutinę eilutę iš žymeklio lentelės.
- KITAS naudojamas duomenims paimti į priekį iš žymeklio lentelės.
- PRIOR naudojamas duomenims paimti iš žymeklio lentelės atgaline kryptimi.
- ABSOLIUTAS n naudojamas tiksliai n gautitheilutę iš žymeklio lentelės.
- GIMININĖ n naudojamas duomenims gauti laipsnišku ir mažėjančiu būdu.
Sintaksė:
ATGAUTI KITAS/PIRMAS/PASKUTINIS/PRIOR/ABSOLIUTE n/SANTYKIUS n IŠ žymeklio_pavadinimo
Užklausa:
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>
- Uždarykite žymeklio ryšį
Sintaksė:
UŽDARYTI žymeklio_pavadinimą
Užklausa:
CLOSE s1>
- Atskirkite žymeklio atmintį
Sintaksė:
ATŠAUKTI žymeklio_pavadinimą
Užklausa:
DEALLOCATE s1>
Kaip sukurti numanomą žymeklį?
Netiesioginis žymeklis yra žymeklis, kurį automatiškai sukuria PL/SQL, kai vykdote SQL sakinį. Nereikia aiškiai deklaruoti ar atidaryti numanomo žymeklio. Vietoj to, PL/SQL valdo žymeklį už jūsų užkulisiuose.
Norėdami sukurti numanomą žymeklį PL/SQL, tiesiog reikia vykdyti SQL sakinį. Pavyzdžiui, norėdami gauti visas EMP lentelės eilutes, galite naudoti šį kodą:
Užklausa:
BEGIN FOR emp_rec IN SELECT * FROM emp LOOP DBMS_OUTPUT.PUT_LINE('Employee name: ' || emp_rec.ename); END LOOP; END;> PL/SQL, kai atliekame ĮDĖTI , ATNAUJINTI arba IŠTRINTI operacijas, automatiškai sukuriamas numanomas žymeklis. Šis žymeklis saugo duomenis, kuriuos reikia įterpti, arba nurodo eilutes, kurias reikia atnaujinti arba ištrinti. Šį žymeklį savo kode galite vadinti SQL žymekliu. Šis SQL žymeklis turi keletą naudingų atributų.
- %FOUND yra tiesa, jei naujausia SQL operacija paveikė bent vieną eilutę.
- %NOTFOUND yra tiesa, jei ji nepaveikė jokios eilutės.
- %ROWCOUNT yra grąžina paveiktų eilučių skaičių.
- %ISOPEN patikrina, ar žymeklis atidarytas.
Be šių atributų, %BULK_ROWCOUNT ir %BULK_EXCEPTIONS būdingi sakiniui FORALL, kuris naudojamas kelioms DML operacijoms vienu metu atlikti. %BULK_ROWCOUNT pateikia eilučių, paveiktų kiekvienos DML operacijos, skaičių, o %BULK_EXCEPTION pateikia bet kokią išimtį, kuri įvyko atliekant operacijas.
Užklausa:
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;>
Išvestis:
Ši programa atnaujina lentelę, padidindama kiekvieno darbuotojo atlyginimą 1500. Po atnaujinimo atributas SQL%ROWCOUNT naudojamas norint sužinoti, kiek eilučių paveikė operacija.
Užklausa:
DECLARE total_rows number; BEGIN UPDATE Emp SET Salary = Salary + 1500; total_rows := SQL%ROWCOUNT; dbms_output.put_line(total_rows || ' rows updated.'); END;>
Išvestis:
5 Emp selected PL/SQL procedure successfully completed.>
SQL žymeklio išimtys
Kai vykdome SQL užklausą, yra netikėtos klaidos galimybė. Žymeklis eina per kiekvieną eilučių rinkinį, kad sugrįžtų į SQL užklausą.
Yra keletas labai populiarių išimčių:
- Pasikartojanti vertė: Šio tipo klaida atsiranda, kai žymeklis bando įterpti įrašą arba eilutę, kuri jau yra duomenų bazėje. šių tipų klaidų galima išvengti tinkamai tvarkant klaidų konf
- Neteisinga žymeklio būsena: Kai žymeklis yra netinkamoje būsenoje, tokio tipo klaida bus rodoma kaip klaida.
- Užrakinimo skirtasis laikas: Taip atsitinka, kai žymeklis bando užrakinti eilutę arba lentelę, bet užraktas jau yra sulaikytas kitos operacijos.
Žymeklio poreikis SQL serveryje
- Žymekliai leidžia apdoroti duomenis iš eilės, o tai gali būti naudinga, kai reikia atlikti sudėtingus duomenų skaičiavimus ar transformacijas.
- Žymekliai leidžia pakartoti rezultatų rinkinį kelis kartus, o tai gali būti naudinga, kai su tais pačiais duomenimis reikia atlikti kelias operacijas.
- Žymekliai gali būti naudingi, kai reikia sujungti kelias lenteles su sudėtingais ryšiais, pvz., apdorojant hierarchines duomenų struktūras arba atliekant rekursines užklausas.
- Žymekliai leidžia atlikti tokias operacijas kaip įrašų atnaujinimas, trynimas arba įterpimas pagal tam tikras sąlygas ar kriterijus.
- Žymekliai ypač naudingi apdorojant duomenis iš kelių lentelių, kur ryšiai nėra aiškūs.
SQL serverio žymeklio apribojimai
Kadangi žymeklis turi tam tikrų apribojimų, jis turėtų būti naudojamas tik tada, kai nėra kito pasirinkimo. Šie apribojimai apima:
- Apdorojant duomenis, jis užrakina poaibį arba visą lentelę.
- Žymeklio atnaujinimų lentelė vienu metu įrašo vieną eilutę, o tai sulėtina jos veikimą.
- Nors kilpos yra lėtesnės nei žymekliai, jos turi daugiau papildomų išlaidų.
- Kitas veiksnys, turintis įtakos žymeklio greičiui, yra į žymeklį įtrauktų eilučių ir stulpelių skaičius.
DUK:
1 klausimas. Kaip galima išvengti žymeklių?
Atsakymas:
Pagrindinė žymeklio funkcija yra lentelės naršymas po eilutę. Toliau pateikiami keli paprasti būdai, kaip išvengti žymeklio:
2 Q. Kaip naudoti SQL žymeklio ciklo metu?
Atsakymas:
Naudoti ciklą, kuris leidžia įterpti rezultatų rinkinį į laikinąją lentelę, yra paprasčiausias būdas išvengti žymeklio.
Q.3 Kas yra vartotojo nustatytos funkcijos SQL žymeklyje?
Atsakymas:
Kartais gautas eilučių rinkinys apskaičiuojamas naudojant žymeklius. Tai galime pasiekti naudodami vartotojo apibrėžtą funkciją, kuri atitinka specifikacijas.
4 klausimas. Sujungimų su SQL žymekliu naudojimas?
Atsakymas:
Tais atvejais, kai reikia apdoroti didžiulius įrašus, prisijungimas sumažina kodo eilučių skaičių apdorojant tik tuos stulpelius, kurie atitinka nurodytą sąlygą.