Sunteți pe pagina 1din 10

DECLANŞATORI (Proceduri de

tip TRIGGER)
• Un declanşator (trigger) este un tip special de procedura care se
executa atunci când in baza de date survine o instrucţiune de
modificare, ştergere sau adăugare (UPDATE, DELETE, INSERT).

• Sintaxele simplificate pentru comenzile de actualizare sunt prezentate


in continuare:
Instrucţiunea UPDATE
Permite actualizarea înregistrărilor.
 
UPDATE
    [ TOP ( expression ) [ PERCENT ] ]  { <tabel|view> }    
SET { nume_coloană = { expresie }
[ WHERE { <condiţii> [; ]
 
TOP ( expression ) [ PERCENT ] – specifică un număr de înregistrări sau un procent din numărul total de
înregistrări ce vor fi modificate. Înregistrările nu pot fi însă ordonate.
<tabel|view> - numele tabelului sau obiectului de tip view ce conţine datele de actualizat.
În clauza SET se specifică numele câmpului ce va fi actualizat şi expresia care stă la baza modificărilor.
WHERE <condiţii> - specifică eventualele condiţii pentru limitarea înregistrărilor ce vor fi actualizate. Condiţiile
vor fi separate prin operatorii logici AND/OR.
Instrucţiunea DELETE
Permite ştergerea de înregistrări.
 
DELETE
[ TOP ( expression ) [ PERCENT ] ]
FROM <tabel>]
[ WHERE { <criterii>] [; ]
 
Unde:
TOP ( expression ) [ PERCENT ] –specifică un număr de înregistrări sau un procent din numărul total de
înregistrări ce vor fi şterse. În cadrul instrucţiunilor Insert, Delete şi Update, înregistrările nu pot fi însă
ordonate.
FROM <tabel> - specifică numele tabelului din care se vor şterge înregistrările.
WHERE <criterii> - permite specificarea uneia sau mai multor condiţii pentru limitarea numărului de
înregistrări ce vor fi şterse. Condiţiile vor fi separate prin operatorii logici AND/OR. Lipsa clauzei WHERE va
conduce la ştergerea tuturor înregistrărilor.
Instrucţiunea INSERT
Permite adăugarea de noi înregistrări într-un tabel.
Sintaxă simplificată:
INSERT
{ nume_tabel | nume_view }
{ [ ( lista_coloane ) ]
{ VALUES ( [ ,...n] )}
}
| DEFAULT VALUES
Unde:
nume_tabel– reprezintă numele tabelului în care se vor insera înregistrări;
nume_view - reprezintă numele unui view actualizabil în care se vor insera înregistrări;
 (lista_coloane) – reprezintă lista de câmpuri în care vor fi adăugate valori. Se vor preciza între
paranteze şi se vor separa prin virgulă.
VALUES - este utilizată pentru a introduce o listă de valori specificate pentru fiecare câmp în parte.
DEFAULT – solicită adăugarea în noua înregistrare a valorilor implicite definite la nivelul fiecărui câmp. În
cazul câmpurilor pentru care nu au fost definite valori implicite se va adăuga valoarea Null.
Proceduri de tip TRIGGER
• Declanşatorii sunt creaţi prin intermediul comenzii CREATE TRIGGER
si sunt proceduri ataşate tabelelor. Pentru un tabel este posibil sa se
definească mai mulţi declanşatori.
• Un trigger se executa atunci când intr-un table din baza de date
survine o instrucţiune de modificare, ştergere sau adăugare (UPDATE,
DELETE, INSERT).
• Pentru un tabel este posibil sa se definească mai mulţi declanşatori.
• Declanşatori sunt executaţi după o instrucţiune de actualizare, o
singura dată, indiferent de numărul de înregistrări afectate de
respectiva instrucţiune in cadrul tabelei.
Sintaxa simplificată a instrucţiunii CREATE TRIGGER este următoarea:
CREATE TRIGGER nume_trigger ON nume_tabel {FOR|
INSTEAD OF} {INSERT|UPDATE|DELETE} AS Instrucţiuni
SQL
Observaţii:
In loc de cuvântul cheie FOR se poate utiliza, cu aceleaşi rezultate AFTER
Dacă, în loc de FOR se utilizează INSTEAD OF, instrucţiunile SQL din cadrul
triggerului înlocuiesc operaţia de tip INSERT, UPDATE sau DELETE care nu se
mai execută.
Exemplul 1
Exemplu: realizati un trigger care sa impiedice stergerea persoanelor din Brasov

CREATE TRIGGER [dbo].[NU_STERGE_BV] ON [dbo].[PERSOANE]


FOR DELETE AS

IF EXISTS( SELECT * FROM DELETED WHERE


LOCALITATE='BRASOV')
BEGIN
RAISERROR ('NU SE POT STERGE DIN BV!!!',1,1)
ROLLBACK TRANSACTION

END
Exemplul 2
Exemplu: realizati un trigger care sa impiedice diminuarea salariilor

CREATE TRIGGER [dbo].[FARA_DIMINUARI_SALARIALE]


ON [dbo].[PERSOANE] FOR UPDATE AS

IF EXISTS( SELECT *
FROM DELETED, INSERTED
WHERE DELETED.SALARIU>INSERTED.SALARIU
AND DELETED.CNP=INSERTED.CNP )

BEGIN
RAISERROR ('NU E CORECT SA DIMINUAM SALARII',1,1)
ROLLBACK TRANSACTION
END
Exemplul 3
Exemplu: realizati un trigger prin intermediul caruia sa se memoreze in tabelul
numit ARHIVA codurile numerice, numele si data stergerii pentru persoanele
sterse din tabelul persoane.

ALTER TRIGGER [dbo].[MUTA_IN_ARHIVA]


ON [dbo].[PERSOANE] FOR DELETE AS

BEGIN
INSERT INTO ARHIVA(cnp, nume, data_stergere)
SELECT CNP, NUME, GETDATE() from Deleted
END

S-ar putea să vă placă și