Baza de date declanșatoare
baza de date cu declanșare - este proiectat special numit bloc PL / SQL, stocate în baza de date. Fiecare declanșare este asociat cu o anumită tabelă și Oracle a început în mod automat atunci când unul dintre DML-operatori (INSERT, DELETE, UPDATE) sau o combinație a acestora pe acest tabel.
Atribuirea declanșatori. Triggerele pot fi utilizate:
1) să pună în aplicare constrângeri complexe de integritate a datelor, care nu pot fi puse în aplicare în modul standard, pentru a crea un tabel;
2) să prevină tranzacții incorecte;
3) efectuează procedurile de precauție a drepturilor de acces și confidențialitatea datelor;
4) generarea unor expresii bazate pe valorile disponibile în coloanele de masă;
5) de punere în aplicare a normelor complexe de afaceri de prelucrare a datelor (capacitatea de a urmări „ecou“, adică posibilitatea de a schimba atunci când tabelele de un tabel, datele de actualizare asociate).
Crearea și a comuta declanșatori. următoarea sintaxă generală utilizată pentru a crea și porni automat pe trăgaci:
CREATE [OR REPLACE] TRIGGER TRIGGER_NAME
ON nume_tabelă [pentru fiecare rând] [when condiție]
Dacă există cuvinte cheie sau REPLACE este re-creat de declanșare, în cazul în care acesta există deja.
Desene și modele industriale | DUPĂ indică ora de începere a declanșatorului. opțiune ÎNAINTE înseamnă că declanșatorul va fi rulat înainte de a efectua o activare LMD-operatorilor; DUPĂ opțiune înseamnă că declanșatorul va începe după activarea LMD-operator.
Proiectare INSERT | ȘTERGE | UPDATE [OF column_list] indică tipul activarea trigger DML-operator. Permise folosind operația logică SAU, specificați operatorii de ardere agregate, de exemplu: INSERT sau DELETE. Când se utilizează varianta UPDATE Set lista de coloane, declanșatorul va fi executat în modificarea unuia dintre coloane menționate; în cazul în care nu există o listă de coloane, declanșatorul va fi declanșat atunci când oricare dintre coloanele din tabel asociat cu trăgaci.
Proiectare pentru fiecare rând indică caracterul impactului declanșator: un șir de caractere sau de un operator. În cazul în care de proiectare pentru fiecare rând este prezent, de declanșare este un șir de caractere; în absența sa de declanșare este un operator. declanșare operator se execută o dată înainte sau după Wakeup de declanșare LMD-operatorul indiferent de cât de multe rânduri în tabel asociat cu declanșatorul este modificat. String de declanșare este rulat o dată pentru fiecare dintre liniile, care sunt supuse unor modificări DML operator activarea unui declanșator.
Cu CÂND cuvinte cheie poate fi setat pe restricția suplimentară asociată cu o linie de declanșare a tabelului, cu modificările care declanșare poate fi pornit.
Structura PL / SQL_blok reprezintă blocul PL / SQL care ORACLE pornește la activarea declanșatorului.
Clasificarea declanșează. Practic distinge declanșatoare dvenadtsattipov. Tipul de declanșare este determinată printr-o combinație a următoarelor trei parametri:
1) natura impactului pe masa linia de declanșare asociată (string sau un operator);
2) începe să punctul de declanșare: înainte de a (ÎNAINTE) sau după (după) activarea executării de declanșare DML operator;
3) tipul de activare de declanșare DML-operatorul (INSERT, DELETE, UPDATE);
Ordinea de activare declanșează. Dacă tabelul are mai multe tipuri de declanșatoare, acestea sunt activate după cum urmează:
1) deține pe trăgaci operatorul anterior (în cazul în care mai mult de unul, nu este nimic pe ordinea de execuție a acestora este imposibil de spus);
2) reține șirul de declanșare ÎNAINTE;
3) deține activare de declanșare LMD-operator, urmată de verificarea constrângerilor de integritate a datelor;
4) este un șir de declanșare după verificarea ulterioară a constrângerilor de integritate a datelor;
5) deține pe trăgaci operatorului după.
Trigger predicate. Dacă trăgaciul specifică un set de activare de declanșare DML-operatorilor (de exemplu, INSERT sau DELETE), recunoașterea a ceea ce în mod specific de la DML-operatorii se realizează pe masa asociată cu trăgaci, predicate de declanșare utilizat: INTRODUCEREA, ȘTERGEREA, ACTUALIZAREA. Acestea sunt funcții logice revenind TRUE, în cazul în care tipul de operator de activare coincide cu tipul de predicat, și fals - în caz contrar. Pentru a specifica aceeași acțiune, în cazul efectuării diferiților operatori din DML-declanșare predicate instrucțiune condițională combinate cu ajutorul operatorilor logici.
Pseudorecords. Pentru declanșatoare de coarde, există modele speciale care permit în performanța operatorilor DML-line pe masă, cum să se ocupe de vechile valori care au fost acolo înainte de modificarea și nou, care va apărea într-un rând după modificarea acesteia. Aceste structuri sunt numite pseudorecords și desemnate vechi și noi. Structura acestor pseudorecords structură identică tabel linie modificabil, dar poate funcționa numai pe pseudorecords câmpuri individuale. pseudorecords referință de câmp are loc după cum urmează: înainte de nou sau vechi este plasat simbolul „:“, care trece printr-un punct specificat nume de câmp. Valorile care iau câmp pseudorecords atunci când ardere DML-operatorii sunt definite după cum urmează.
Declarație INSERT - psevdozapis: echivalent nou pentru a insera rânduri și psevdozapis: vechi în toate domeniile este NULL.
Operatorul delete - psevdozapis: vechi este echivalent cu linia care urmează să fie șters și psevdozapis: noi în toate domeniile de activitate este NULL.
UPDATE Operator - psevdozapis: noua linie echivalentă, rezultat modificată și psevdozapis: vechi, în toate domeniile are o linie de plecare.
Pornirea și oprirea declanșează. Stocate în baza de date cu declanșare, puteți dezactiva temporar fără ao șterge din baza de date. Pentru a face acest lucru, utilizați următoarea comandă:
ALTER TRIGGER TRIGGER_NAME DISABLE;
Activare declanșare după o anumită perioadă de timp în care este posibil, folosind comanda
ALTER TRIGGER TRIGGER_NAME ENABLE;
Interzic sau de a permite executarea tuturor declanșatoare asociate cu o masă, puteți utiliza comanda
ALTER TABLE nume_tabelă ALL TRIGGERS;
în cazul în care opțiunea DEZACTIVAȚI este folosit pentru a opri și opțiunea ENABLE - pentru a permite tuturor declanșatoare din tabel.
Scoaterea trăgaciul în baza de date. .. Distrugerea trăgaciului, adică îndepărtarea trăgaciului din baza de date utilizând următoarea comandă:
DROP TRIGGER TRIGGER_NAME;
Obținerea de informații despre declanșatoare. Declanșatoare sunt stocate în baza de date, astfel încât informațiile despre acestea pot fi obținute din dictionarul de date USER_TRIGGERS de reprezentare, de exemplu, următoarea comandă:
SELECT * FROM USER_TRIGGERS;
1. Creați un declanșator care înainte de a introduce următorul rând din tabelul de controale KNIGA_POSTAVKA specificate în tabelul KNIGA kodaknigi. În lipsa cărților de cod menționat în tabelul KNIGA trebuie să fie generate cu un mesaj de excepție corespunzătoare.
Adăugarea de rânduri noi în tabelul KNIGA_POS-TAVKA executat instrucțiune INSERT. Deoarece declanșatorul trebuie rulat înainte de fiecare INSERT, prin urmare, acesta trebuie să fie un șir de caractere inainte de declanșare. Pentru a păstra integritatea datelor, trebuie să verificați dacă codurile introduse de cărți și de masă KNIGA. Pentru a face acest lucru prin intermediul unui singur operator de SELECT efectuat tabelul mostră de date KNIGA într-o stare în care proba este utilizat pseudorecords câmp KOD_KNIGI: nou. În cazul în care numărul de rânduri de date în tabelul de KNIGA carte de cod ar fi zero, și va arunca un mesaj de excepție este emis.
Crearea unui declanșator TR1 se realizează prin introducerea următoarea declarație:
CREATE OR REPLACE TRIGGER TR1
ÎNAINTE DE INSERT KNIGA_POSTAVKA
SELECT COUNT (*) ÎN KOL DE LA KNIGA
UNDE KOD_KNIGI =: NEW.KOD_KNIGI;
IF KOL = 0 ATUNCI RAISE_APPLICATION_ERROR
(-20212, „Tabelul de KNIGA nici o informație despre această carte“);
Acțiunea TR1 de declanșare poate fi testat efectuarea monitorizării operatorului prezent, care transportă inserția în linia tabelă KNIGA_POSTAVKA, determinând astfel activarea TR2 de declanșare:
VALORI INSERT INTO KNIGA_POSTAVKA (21,15, 'Ivanov', 15,
Deoarece cartea de cod 15 lipsește în tabelul KNIGA, excepția va fi aruncat și mesajul este emis.
2. Creați un declanșator care interzice luarea în domeniul valorii de masă KNIGA rând preț mai mult de 5.000 de ruble, precum și la o creștere a prețurilor de cărți despre care informațiile sunt stocate în tabelul KNIGA, mai mult de 20%. Dacă încalcă această cerință ar trebui să arunce o excepție cu mesaje adecvate.
De la introducerea de noi rânduri în tabelul KNIGA realizată prin efectuarea INSERT, și o valoare a unui tabel KNIGA câmp PRETUL conținând prețul cărții poate fi modificată ca urmare a operatorului UPDATE, declanșatorul este specificat pluralitate de declanșare DML-operatori. Deoarece declanșatorul trebuie să fie pornit înainte de a trimite fiecare dintre DML-operatori, prin urmare, acesta este un șir de caractere inainte de declanșare. Deoarece acțiunile realizate de declanșatori sunt diferite pentru fiecare dintre declanșatori DML-declarații de modificare KNIGA tabel, este de a recunoaște tipul de LMD-operator care utilizează predicatele de declanșare corespunzătoare INTRODUCEREA și UPDAITING. Datorită faptului că, atunci când introduce noi de verificare rândurile trebuie să fie supuse unui nou domeniu PRETUL valoare, la fel ca în valoare de modificare câmp PRICE valoarea nouă care urmează să fie comparată cu valoarea veche trebuie să fie utilizate pseudorecords: noi și: vechi.
Crearea TR2 de declanșare este făcută utilizând următoarea declarație:
CREATE OR REPLACE TRIGGER TR2
ÎNAINTE INSERT sau actualizare a prețurilor pe KNIGA
Așezată ATUNCI
DACĂ: NEW.TSENA> 5000 ATUNCI
DACĂ ACTUALIZAREA ATUNCI
IF: NEW.TSENA>: OLD.TSENA * 1.2 ATUNCI
Acțiunea TR2 de declanșare poate fi testat efectuarea următorilor operatori care, transportă inserția în linii și rânduri de masă KNIGA actualizare tabel KNIGA, determinând astfel activarea acestuia.
Liniile se introduce operatorul în tabelul KNIGA, provocând activarea TR2 de declanșare:
VALORI INSERT INTO kniga (21, 'Dune' 'Herbert', 5268 'Ast'
actualizări operator rânduri dintr-un tabel KNIGA care provoacă activarea TR2 de declanșare:
UPDATE KNIGA SET PRET = 6000;
Deoarece aceste declarații încalcă cerințele privind valoarea și modificarea prețului cărților, în toate cazurile, va fi aruncat și mesajul este emis.
3. Creați un declanșator care a creat în tabelul STAT, care conține coloane:
Numele editorului - IZD,
numărul de cărți în „romanul“ gen - KOL_ROM,
numărul de cărți în genul „Fiction» - KOL_FAN,
la fiecare modificare KNIGA generează și stochează tabel în coloanele tabel corespunzătoare STAT numărul total de cărți pentru fiecare dintre editorii sectioante subiecte: „Roman“ si „Fiction“.
Tabel de modificare a KNIGA efectuate LMD-efectuarea următorilor operatori: INSERT, DELETE sau UPDATE modificarea valorilor coloană GENRE KNIGA în tabel. Deoarece acțiunea privind formarea de tabel de date STAT efectuate după fiecare dintre operatorii kniga de masă de modificare, în funcție de tipul de operator este, după-declanșare. Deoarece acțiunile realizate de declanșatori sunt aceleași pentru toate tipurile de activare a operatorilor săi, predicatele de declanșare nu sunt utilizate. Înainte de a crea un tabel de declanșare trebuie să fie creat STAT.
Crearea tabelul STAT poate fi realizată prin introducerea următorul set de operatori:
STAT DROP TABLE;
CREATE TABLE STAT
Crearea TR3 de declanșare este făcută utilizând următoarea declarație:
CREATE OR REPLACE TRIGGER TR3
DUPĂ insereze sau să șteargă sau actualizarea GENRE
CURSOR V1 IS SELECT PUBLISHING,
DE LA KNIGA UNDE Gen = „Roman“
PUBLISHING GROUP BY;
CURSOR V2 IS SELECT PUBLISHING,
DE LA KNIGA UNDE Gen = „Fiction“
PUBLISHING GROUP BY;
DELETE DE LA STAT;
Pentru Z1 V1 LOOP
INSERT INTO VALORI STAT (Z1.IZDATELSTVO,
Pentru Z1 V2 LOOP
UPDATE SET STAT KOL_FAN = Z1.KOL2
UNDE IZD = Z1.IZDATELSTVO;
IF SQL% Not Found ATUNCI
VALORI INSERT INTO (STAT Z1.IZDATELSTVO, 0,
Acțiunea de declanșare poate fi verificată efectuarea următorilor operatori care transportă inserați rânduri KNIGA în tabel, actualizarea și șterge rânduri rânduri KNIGA în tabel, determinând astfel activarea TR3 de declanșare.
Operatorii se introduce rânduri în tabelul KNIGA care provoacă activarea TR3 de declanșare:
VALORI INSERT INTO kniga (46, 'ereticilor Dune', 'Herbert', 368,
VALORI INSERT INTO kniga (42, 'Ingvar si arin'
'Nikitin', 168 'Ast', 'roman');
Operatorii șterge rânduri dintr-un tabel KNIGA care provoacă activarea TR3 de declanșare:
ȘTERGE KNIGA WHERE NAME = 'Cossacks';
Operatorii modificabile rânduri KNIGA în tabel, provocând activarea TR3 de declanșare:
UPDATE KNIGA SET = GENRE 'Fiction' UNDE NAME =
SELECT * DE LA STAT;