Informații generale despre declanșatoare
Trigger - este un bloc pl / sql numit, care este stocată în baza de date.
- Este imposibil de a provoca pe trăgaci, el lucrează întotdeauna numai în cazul specific automat (dacă activați)
- Nu este necesar pentru a crea un declanșator recursiv. Ie de exemplu, declanșează după actualizare, în care actualizarea se realizează în același tabel. În acest caz, declanșatorul va declanșa recursiv până la până la sfârșitul memoriei.
- DML de declanșare (pe masă sau vizualizare)
- trigger System (circuitul sau baza de date)
- declanșare condiționată (cei care au conditie atunci când)
- În loc de declanșare (declanșare DML asupra performanței sistemului sau pentru a crea o comandă de declanșare)
De ce utilizarea declanșează:
- Pentru generarea automată a valorilor de câmp virtuale
- pentru logare
- Pentru a colecta statistici
- Pentru a modifica datele în tabele, dacă este implicată în reprezentarea operațiunilor DML
- Pentru a preveni DML operațiuni în anumite ore specifice
- Pentru a pune în aplicare constrângeri complexe de integritate a datelor, care nu pot fi puse în aplicare prin limite descriptive stabilite la crearea tabelelor
- Pentru organizarea diferitelor tipuri de audit
- Pentru a alerta alte module care fac în caz de schimbare a informațiilor în baza de date
- Pentru a pune în aplicare logica de afaceri
- Pentru organizarea efectelor în cascadă pe masa bazei de date
- Pentru a răspunde la evenimente de sistem într-o bază de date sau schemă
în cazul în care plsql_trigger_source. este acest design:
simple_dml_trigger Proiectare, instead_of_dml_trigger, system_trigger compound_dml_trigger și vor fi prezentate în secțiunile relevante ale articolului.
DML declanșatori
- declanșatoare DML sunt create pentru tabele sau vizualizări, sunt declanșate la introducerea, actualizarea sau ștergerea înregistrărilor.
- Trăgaciul poate fi generat într-un alt circuit diferit de cel în care masa de definit. În acest caz, circuitul de curent atunci când este considerat de declanșare a circuitului de blocare.
- Când MERGE declanșat declanșează operarea o modificare, inserare sau ștergere a înregistrărilor, în funcție de operațiile de coarde.
- Trigger - o parte a unei tranzacții, o eroare în trăgaciul rostogolește înapoi tranzacției, tabelele unei modificări de declanșare fac parte dintr-o tranzacție.
- În cazul în care tranzacția este derulată înapoi, modificările de declanșare sunt rulate înapoi prea.
- În declanșatoare interzise DDL și gestionarea tranzacției (excepție - tranzacție independent).
Design simple_dml_trigger:
În cazul în care, dml_event_clause:
referencing_clause:
trigger_edition_clause:
trigger_body:
Conform obiectelor ancorate sunt împărțite în:
- pe masa
- La prezentarea (în loc de declanșare)
La evenimente de declanșare:
- Inserați o înregistrare (insert)
- înregistrări de actualizare (update)
- Ștergerea înregistrărilor (șterge)
În domeniul de aplicare:
- Nivelul întregii echipe (nivel de declarație declanșează)
- Nivelul de înregistrare (nivelul rândului declanșează)
- Compusul declanșatoare (compus declanșatori)
Conform timpului de răspuns:
- Înainte de utilizare (înainte)
- După efectuarea operației (după)
predicate condiționate pentru a determina operația la care este declanșat de declanșare:
- Nivel de operare Cu pseudorecords interzise întreaga intrare (: nou = null;)
- Nu se poate schimba valoarea câmpurilor de înregistrare vechi
- În cazul în care incendiile de declanșare de pe ștergere, nu puteți schimba valoarea de noi câmpuri în înregistrarea
- Declanșatorul nu poate fi modificat după câmpurile de intrare valoare nouă
În loc de declanșatoare DML
- Creat pentru a reprezenta (vizualizare) și va servi ca un înlocuitor pentru operațiunile DML funcționalității sale.
- Permite inserare / actualizare sau ștergere reprezentări pentru non-regenerabile.
- Se declanșează întotdeauna nivelul de înregistrare (la nivel de rând)
- Pseudorecords are acces la vechi și noi, dar nu le pot schimba
- Înlocuiesc DML operație cu reprezentare (vizualizare)
În loc de declanșatoare de pe imbricate Tabelul Coloane de Vizualizări
Puteți crea un declanșator pentru o investiție într-o vizualizare tabel. Acest declanșator, de asemenea, prezente psevdozapis suplimentare - mamă, care se referă la întreaga prezentare de înregistrare (pseudorecords standard, intrările vechi și noi se referă numai la tabelul alăturat)
Un exemplu de astfel de declanșare
Compusul DML de declanșare (compus DML declanșează)
Introdus în 11G Aceste declanșatoare includ o unitate de procesare toate tipurile de LMD declanșează.
Design compound_dml_trigger:
- Lucrați un astfel de declanșare pentru diferite evenimente și în diferite momente în timp (la nivelul operatorului sau un șir de caractere, atunci când inserați / actualizare / șterge, înainte sau după eveniment).
- Este posibil să nu fie tranzacții autonome.
În principal utilizat pentru:
- Colectate într-o linie de colectare pentru introducerea într-un alt tabel pentru a le insera periodic un pachet
- Evitați mutant tabelul de eroare (mutant-tabel de eroare)
Structura compusului declanșează
Poate conține variabile care trăiesc pe parcursul executării declarației care a cauzat declanșare a focului.
Acest declanșator are următoarele secțiuni:
- Înainte de declarația
- După declarația
- Înainte de fiecare rând
- După fiecare rând
În aceste declanșatoare nici o secțiune de inițializare, dar în acest scop, poate fi utilizat secțiune înainte de declarație.
Dacă nu există declanșare înainte de secțiunea declarație sau secțiuni după declarația, iar declarația nu afectează nici o înregistrare, astfel încât declanșatorul nu se declanșează.
- Nu puteți accesa pseudorecords vechi, noi sau mamă în nivelul de expresie secțiuni (înainte și după declarația declarație)
- Modificarea valorii de noi câmpuri pot pseudorecords doar secțiune înainte de fiecare rând
- Excepțiile generate într-o singură secțiune nu pot fi prelucrate în cealaltă secțiune
- În cazul în care declarația goto, aceasta ar trebui să indice codul din aceeași secțiune
Reguli de bază pentru determinarea DML declanșatori
Limitările DML declanșatori
- Nu puteți efectua DDL (numai în tranzacție independent)
- Nu puteți rula subrutina cu operatorii de control al operațiunii
- Nu au acces la pachetele SERIALLY_REUSABLE
- nu poate depăși 32K
- Nu puteți declara variabile de tip LONG si LONG RAW
Eroarea tabel de mutație-04091 ORA
Dacă nivelul de declanșare pentru a încerca să obțină o linie sau modifica datele din tabelul țintă, atunci Oracle nu permite să facă acest lucru și va arunca o eroare ORA-04091 modificări TABLE TABLE_TEST, declanșare / funcție să nu-l poate vedea.
Pentru a rezolva această problemă, utilizați următoarele tehnici:
- Nivelul de utilizare declanșează operarea
- tranzacție autonomă într-un declanșator
- folosi structura indirectă (colectarea de pachete de nivel)
- utilizați COMPUS TRIGGER
- schimbarea algoritmului cu îndepărtarea funcțional bistabilului
declanșatoare System (sistem declanșează)
Design system_trigger:
Aceste declanșatoare includ sau un sistem, sau pentru întreaga bază de date.
Există mai multe opțiuni, sistemul de declanșare are loc la un moment dat în timp:
- Înainte de efectuarea operației (pe care declanșatorul este activat)
- După efectuarea operației (pe care declanșatorul este activat)
- În loc de a efectua o Creare
Declanseaza circuit de nivel (schema declanșează)
- Acesta a declanșat ori de câte ori utilizator-proprietar al circuitului va declanșa evenimentul (semifabricate), care de declanșare trebuie să se declanșeze.
- În cazul în care orice alt utilizator se execută o procedură / funcție care se numește drepturile Creatorului, și în această procedură / funcție, o operație pe care să creeze un sistem de declanșare - declanșatorul este declanșat.
Declansatoarele sunt nivelul bazei de date (baza de date declanșatori)
- Acest declanșator este declanșat atunci când orice bază de date de utilizator execută comanda pe care se creează pe trăgaci.