Documente Academic
Documente Profesional
Documente Cultură
1. Declararea unui cursor - unui nume de cursor i se asociază setul de tuple rezultat,
corespunzător unei fraze SELECT; de asemenea se specifică o serie de caracteristici
ale cursorului.
4. Închiderea cursorului - se şterge setul de tuple cu care s-a populat cursorul, dar se
menţine cursorul în sine împreună cu definiţia sa.
1
nume_cursor - este numele cursorului;
FORWARD_ONLY (tip implicit) returnează secvenţial rândurile furnizate de
cursor. Modificarile efectuate asupra datelor de bază sunt vizibile de indată ce
se ajunge la ele.
SCROLL - indică faptul că toate opţiunile de navigare-accesare date (FIRST,
LAST, PRIOR, NEXT, RELATIVE, ABSOLUTE) sunt permise. În lipsa
acestei opţiuni, NEXT este singura opţiune de navigare permisă.
STATIC - defineşte un cursor derulabil, de tip READ_ONLY, care creează în
tempdb, o copie temporară a setului de tuple corespunzător. Modificările
ulterioare asupra datelor originale nu sunt reflectate în datele din cursor. Sunt in-
terzise operaţiile de actualizare la nivelul cursorului. Cursoarele de tip static sunt
denumite instantanee sau INSENSITIVE deoarece ele nu sunt sensibile la
modificarile efectuate în sursa lor de date.
DYNAMIC –sunt implicit derulabile. Modificarile efectuate asupra datelor de
bază sunt vizibile de indată ce se ajunge la ele. Cursoarele de tip dynamic sunt
denumite SENSITIVE deoarece ele sunt sensibile la modificarile efectuate în
sursa lor de date.
READ_ONLY – Optiune implicită. Asa cum sugerează şi numele său, această
opţiune previne modificarea datelor din cadrul cursorului. Sunt interzise
operaţiile de actualizare la nivelul cursorului.
2) Instrucţiunea OPEN
Sintaxa:
Observaţie:
2
3) Instrucţiunea FETCH
Sintaxa:
FETCH [ NEXT | PRIOR | FIRST | LAST |
ABSOLUTE { n | @nvar } | RELATIVE { n | @nvar } ]
FROM nume_cursor [ INTO lista_variabile ]
Unde:
3
4) Variabila sistem @@FETCH_STATUS
Returnează starea ultimei operaţii FETCH executată asupra unui cursor. Valorile posibile ale
variabilei @@FETCH_STATUS şi semnificaţia acestora este dată în următorul tabel:
@@FETCH_STATU Descriere
S
0 Instrucţiunea FETCH s-a executat cu succes.
-1 Instrucţiunea FETCH a eşuat sau cursor în afara setului
rezultat.
-2 Lipsă tuplă încarcată
Observaţii:
5) Instrucţiunea CLOSE
Sintaxa:
CLOSE nume_cursor
unde:
nume_cursor - este numele unui cursor deschis anterior;
4
6) Instrucţiunea DEALLOCATE
Sintaxa:
DEALLOCATE nume_cursor
unde:
Observaţii:
5
Exemple de utilizare a cursoarelor
6
Studentul 13 : S03 Alexandra Info
Studentul 14 : S02 Mihai Info
Studentul 15 : S01 Florin Info
2. Fie interogarea
Dorim sa formăm echipe din cate 2 studenti, tinand cont de mediile lor, astfel:
echipa 1: primul student cu ultimul student din lista,
echipa a 2-a: al doilea student cu penultimul student din lista, etc
open crs
set @P+=1
set @q-=1
end
close crs
deallocate crs
7
Echipa 1: S13 Adrian 9.00 + S12 Marian 6.00
Echipa 2: S11 Flavius 8.50 + S03 Alexandra 6.00
Echipa 3: S02 Mihai 7.50 + S01 Florin 7.00
UPDATE denumire_tabel
SET coloana=expresie, …,coloana=expresie
WHERE CURRENT OF denumire_cursor
Exercitiul 3
Scriptul urmator realizeaza stergerea angajatilor cu salariul mai mare decat 10000,
majorarea salariilor angajatilor departamentului d1 cu 20% si a salariilor celorlalti
angajati cu 10%
Open cursorModiSal
if @sal>10000
begin
delete from tAngajati
where current of cursorModiSal
goto urmatorul
end
if @codDep='d1'
update tAngajati set salariu=salariu*1.20
8
where current of cursorModiSal
else
update tAngajati set salariu=salariu*1.10
where current of cursorModiSal
urmatorul:
Fetch next from cursorModiSal into @codDep, @sal
END
close cursorModiSal
deallocate cursorModiSal