Documente online.
Zona de administrare documente. Fisierele tale
Am uitat parola x Creaza cont nou
 HomeExploreaza
upload
Upload




CURSOARE

sql


CURSOARE

Specificul bazelor de date relationale, si al limbajului SQL in particular este modul de operare asupra relatiilor ca un tot unitar. Orice operatie, se face asupra setului complet de tuple care satisface anumite c 858b11i ondi'ii. Cursoareel constituie un mod    complementar de lucru prin care se permite accesul la tuple, una cāte una, si prelucrarea independenta a fiecarei tuple in parte. Prin introducerea cursoarelor se aduce o extensie utila limbajului SQL care este astfel īntregit cu toate facilitatile specifice limbajelor navigationale:



-pozitionare pe un anumit element

- modificarea elementului de pe pozitia curenta

-deplasare cursor inainte si inapoi;

-prelucrarea subsetului de elemente īncepānd cu pozitia curenta;

De remarcat ca nu este utila folosirea cursoarelor in operatii obisnuite care se pot rezolva cu fraze SQL, ci au fost introduse ca o extensie si nu ca alternativa la frazele SELECT, UPDATE care sunt in general mult mai rapide.

O prelucrare bazata pe curoare se desfasoara īn mai multe faze dupa cum urmeaza:

1. Declararea unui cursor

2. Dechiderea cursorului

3. Īncarcarea cursorului

4. Prelucrare

5. Īnchiderea cursorului

6. Dealocarea cursorului

Declararea cursorului se face cu instructiunea:

DECLARE nume_cursor [INSENSITIVE][SCROLL]

CURSOR FOR fraza_select

[FOR]

Deschiderea unui cursor si popularea prin executarea frazei SELECT specificata in declaratia cursorului are sintaxa: OPEN |nume_variabila_cursor}. Dupa deschiderea unui cursor variabila sistem @@CURSOR_ROWS contine numarul de inregistrari incarcate de la ultima operatie OPEN.

Instructiunea FETCH acceseaza o inregistrare din cursor si īncarca continutul acesteia īntr-un set de variabile.

Sintaxa: FETCH[[NEXT|PRIOR|LAST|ABSOLUTE |RELATIVE ]

FROM ]|nume_variabila_cursor}

[INTO @nume_variabila[,n]]

Variabila system @@FETCH_STATUS indica modul in care s-a desfasurat ultima operatie FETCH si deoarece este o variabila globala, testarea ei trebuie facuta imediat dupa operatia a carei stare vrem sa o aflam.

Īnchiderea unui cursor deschis se face cu ajutorul intructiunii CLOSE care odata cu inchiderea acestuia elibereaza si setul rezultat asociat. Un cursor inchis poate fi redeschis cu ajutorul intructiunii OPEN care calculeaza o noua valoare actualizata a setului rezultat.

Sintaxa: CLOSE |nume_variabila_cursor}

Stergerea unei referinte la un cursor se face cu instructiunea DEALOCATE care elibereaza resursele ocupate de un anumit cursor.

Sintaxa: DEALOCATE |nume_variabila_cursor}

Exemplu de folosire CURSOR:

DECLARE @Nume varchar 30)

DECLARE @Oras varchar 30)

DECLARE cursor_furnizor CURSOR FOR

SELECT nume, oras FROM Furnizor

OPEN cursor_furnizor

FETCH NEXT FROM cursor_furnizor INTO @Nume, @Oras

WHILE @@FETCH_STATUS=0

BEGIN

EXEC send_mail @Nume,@Oras

FETCH NEXT FROM cursor_furnizor INTO @Nume, @Oras

END

CLOSE cursor_furnizor

DEALOCATE cursor_furnizor

GO

TRIGGERE

Triggerele sunt o clasa speciala de proceduri stocate, associate unei tabele, definite pentru a fi lansate īn executie automat la initierea unei operatii de tip UPDATE, INSERT sau DELETE asupra tabelei īn cauza. Sunt un instrument puternic pentru implementarea a ceea ce in aplicatiile de baze de date poarta numele de business rules. Termenul se refera la acele reguli, in general constāngeri, care tin in mod inerent de structura bazei de date si sunt induse de semantica unei colectii de date, fiind comune tuturor aplictiilor care folosesc acea baza de date relativ independente de fiecare aplicatie īn parte. Triggerele extind posibilitatile altor instrumente de verificare a integritatii din SQL SERVER cum ar fi constrāngeri, valori implicite si reguli. Totusi, aceste instrumente declarative vor fi preferate īn locul triggerelor ori de cāte ori este posibil.

Un trigger este initiat ori de cāte ori se īncearca operatia de modificare corespunzatoare tabelului cīreia ii este atasat. Un trigger poate contine instructiuni SQL complexe si poate accesa datele din alte tabele. Triggerul si operatia care īl declanseaza sunt considerate ca un tot unitar ceea ce inseamna ca daca executia triggerului esueaza, dintr'un motiv sau altul, atunci si operatia care l-a declansat se anuleaza. Un tabel poate avea asociate mai multe triggere. Instructiunea de CREATE TRIGGER poate fi definita cu oricare dintre clauzele FOR UPDATE, FOR INSERT sau FOR DELETE pentru a crea triggere specializate pentru fiecare tip de modificare a unui tabel. Daca se foloseste clauza FOR UPDATE, atunci se poate de asemenea folosi clauza IF UPDATE (nume_coloana) prin care se poate crea un trigger specializat pentru situatia modificarii unei coloane anume. Clauza IF UPDATE este de fapt un test care returneaza valoarea true daca coloana data ca parametru a fost modificata de operatia care a declansat triggerul si false in caz contrar.

Instructiunea e creare a unui trigger atasat unui tabel pentru o anumita operatie este:

CREATE TRIGGER trigger_name
ON
[ WITH ENCRYPTION ]

        [ WITH APPEND ]
        AS
        [ UPDATE column ]
        [ ...n ]
        | IF COLUMNS_UPDATED updated_bitmask
         column_bitmask [ ...n ]
        } ]
        sql_statement [ ...n ]
    } }

Exemplu de trigger:

Fie tabelul : Studenti (cods, nrmatricol, nume, grupa, datan)

-- nu se poate efectua modificare daca grupa studentului nu este de nivel 1, in

-- tabelul dei2.dbo.grupe

create trigger cross_db_grupe on studenti for update

as

declare @levelx int

declare @grupa varchar(3)

if (select count(*) from inserted)=1

begin

select @grupa=grupa from inserted

select @levelx=nivel from dei2.dbo.grupe where grupa=@grupa

if @levelx<>1

begin

print 'Nu este de nivel 1'

rollback transaction

end

end


Document Info


Accesari: 2198
Apreciat: hand-up

Comenteaza documentul:

Nu esti inregistrat
Trebuie sa fii utilizator inregistrat pentru a putea comenta


Creaza cont nou

A fost util?

Daca documentul a fost util si crezi ca merita
sa adaugi un link catre el la tine in site


in pagina web a site-ului tau.




eCoduri.com - coduri postale, contabile, CAEN sau bancare

Politica de confidentialitate | Termenii si conditii de utilizare




Copyright © Contact (SCRIGROUP Int. 2024 )