Ghid complet sql

Și aici este un alt declanșator, care rezolvă problema unui alt fel. El monitorizează încercările de a elimina din baza de date de înregistrări ale clienților, pentru care există înregistrări ale ordinelor. Găsirea o astfel de situație, declanșatorul anulează întreaga tranzacție, inclusiv instrucțiuni șterse, ca răspuns la care declanșatorul a fost cauzată de:

crearea de declanșare CHK del cust

/ * Declanșatorul care activează la ștergerea înregistrărilor

Costomers de tabel * / pe clienții pentru ca delete

/ * Ne aflăm dacă există comenzi pentru a șterge clientul * / if (select count (*)

din comenzi / șterse unde orders.cust = șters. num cust)> 0 începe

Scoaterea de imprimare imposibilă are comenzi de rdiserror 31234

Declarație de actualizare legate de Trigger în Transact-SQL oferă posibilitatea de a afla exact care coloanele unui tabel sunt modificate, și ca răspuns să ia măsuri corespunzătoare. Pentru a face acest lucru, un declanșator poate folosi o formă specială a instrucțiunii if - dacă actualizare. Următoarea declanșare este activat ca răspuns la înregistrările actualizare în tabelul salesreps și efectuează acțiuni diferite, în funcție de care dintre coloane modificărilor, din cota ACELAȘI sau vânzări.

crearea de declanșare repetari upd

/ * Aktiviziruyuschiysch de declanșare atunci când actualizarea înregistrărilor

SALESREPS de masă * / pe salesreps pentru actualizare ca

/ * Proces de actualizare coloana COTA * /

/ * Procesul de actualizare coloana SALES * /

Declanșează în dialectul Informix

în Informix declanșează prea sunt create cu ajutorul a crea declarație de declanșare. Ca și în Transact-SQL, această declarație definește numele trăgaciului, tabelul cu care este asociat, și acțiunile, ca răspuns la care este executat. Iată câteva exemple care ilustrează sintaxa:

Crearea declanșa noi sls

inserați pe salesreps.

crea declanșator del cuș CHK șterge pe clienți.

a crea actualizare UPD de declanșare ord la comenzi.

crearea de declanșare sls UPD

actualizarea cotei, vânzări pe salesreps

Ultima declanșare este activat numai ca răspuns la o actualizare dat salesreps coloane din tabel.

Informix vă permite să specificați când ar trebui să fie chemat să creeze declanșatori

înainte de a - de declanșare este invocat înainte de orice modificări, atunci când nici un rând din tabelul asociat nu a fost modificat;

după - declanșatorul este numit după toate schimbările, atunci când toate rândurile din tabel asociat a fost modificat;

pentru fiecare rând - de declanșare este numit pentru fiecare rând să fie modificate, și este disponibil atât versiune veche și nouă a liniei.

Pentru fiecare dintre aceste etape într-un declanșator separat, poate fi definită o secvență de acțiuni. De exemplu, declanșatorul poate provoca procedura stocată pentru a calcula valoarea totală a comenzilor înainte de actualizare ordinele de masă, și apoi să răspundă la actualizarea fiecărei linii, iar apoi se calculează valoarea totală a comenzilor după actualizare toate înregistrările necesare. Aici este definiția unui declanșator, care funcționează după cum urmează:

crearea de declanșare UPD ORD

actualizarea sumei pe ordinele de referențiere vechi ca pre noi ca post-

/ Se calculează costul total al ordinului lor înainte de a actualiza * / înainte (executa proceduri adăuga comenzi () în totalul vechi;)

/ * Urmăriți creșterea și scăderea comenzilor individuale * / pentru fiecare rând

când (post.amount

/ * Scrie într-un tabel separat

informații cu privire la ordonarea redusă * / insera în ORD mai puțin valori (pre.cust,

data pre.order, pre.amount, post.amount) atunci când (post.amount> pre.amount)

/ * Scrie într-un tabel separat

informații despre creșterea comenzilor * / insera în ORD mai multe valori (pre. cust,

data pre.order, pre.amount, post.amount)

/ * După tabelul de actualizare este recalculată

valoarea totală a comenzilor * / dupa (executa procedura de a adăuga comenzi () în noi totală;)

Propunerea înainte de declanșare indică faptul că, înainte de a începe actualizarea de execuție de instrucțiuni, procedura stocată sau adăugare sele ar trebui să fie numit, se presupune că această procedură calculează valoarea totală a comenzilor, iar rezultatul este stocat în total OLD variabilă. În mod similar, propunerea

după ce stabilește că aceeași procedură stocată este numit la sfârșitul vtolneniya de actualizare manuală, și l-am valoarea introdusă într-o altă variabilă locală a reveni - total nou. Suma licitată pentru fiecare rând determină acțiunea care trebuie făcută pentru fiecare rând actualizat al tabelului. Deci, în exemplul nostru este de a insera o linie într-una din cele două tabele, oricare dintre acestea a fost dacă ordinele de proces curent a scăzut sau a crescut Aceste tabele conțin coduri de client, data comenzii, precum și suma de vechi și noi. Pentru a obține aceste informații, trăgaciul au nevoie pentru a avea acces la vechiul (înainte de modificare) și nou (după schimbarea) valoarea referirii string Oferta stabilește numele care vor fi utilizate pentru a se referi la cele două versiuni ale rândului curent în acest exemplu, pentru a face referire la valorile coloanelor vechi folosind un alias pre, și să se facă referire la noile valori - un post pseudonim. Aceste nume nu sunt predefinite - puteți denumi masa ca tine sunt confortabile.

Spre deosebire de alte bază de date, Informix ofanichivaet set de acțiuni care pot fi executate de declanșare. Permis numai.

inserați instrucțiuni; m instruire șterge;

INSfuKTsIYa Procedura de executare.

Cu toate acestea, ultima opțiune oferă încă o anumită flexibilitate. Procedura figgerom Provocate poate vsholnyat practic orice acțiune care ar putea fi produs de figgerom.

Declanșează în Oracle PL / SQL dialect

Oracle posibilitatea de a crea figgerov mai larg decât Informix și de Transact-SQL în această bază de date pentru a crea figgerov, de asemenea, crea declarație de declanșare este folosit, dar structura sa este diferită. La fel ca Informix, permite să se asocieze pe trăgaci cu diferitele etape de prelucrare de interogare, dar la diferite niveluri Veh

instrucțiuni de nivel de declanșare (declarație) se numește o singură dată pentru fiecare instrucțiune SQL. Acesta poate fi cauzat înainte sau după executarea acesteia.

Nivelul de înregistrare de declanșare (rând) se numește o dată pentru fiecare înregistrare fiind modificate. Acesta poate fi, de asemenea, invocate înainte sau după modificare,

Înlocuire de declanșare (în loc de a) este realizată în loc de SQL insfuktsii. Cu un astfel de declanșare, puteți monitoriza aplicație sau utilizator încercările de a actualiza, adăuga sau șterge intrările, și în locul acestor acțiuni vsholnyat lor proprii. Puteți defini figger să fie efectuate în loc de sau în locul unor insfuktsii fiecare încercare de a schimba tabelul Coffs. Totalul se dovedește 14 tipuri diferite de declanșatori. Doisprezece dintre ei - această combinație de operații insera, actualiza și șterge cu opțiuni înainte sau după sau la nivel de declarație rând (3x2x2), plus două figgera tip, în loc de rând și declarația de nivel. Cu toate acestea, în practică, o bază de date Oracle relațională declanșează, în loc de tip sunt rar utilizate; Acestea au fost introduse în oracole pentru a susține unele dintre cele mai recente caracteristicile sale orientate spre obiect.

Acestea sunt figgerov comune definite în Oracle PL / SQL, care realizează același rol ca declanșator este dificil pentru Informix din parafafa anterioară. În Oracle, această problemă este rezolvată prin intermediul a trei declanșatoare: două dintre ele - declanșează etapa înainte și după, care acționează la nivel insfuktsii și Fethiye se efectuează pentru fiecare rând actualizat.