Crearea de declanșare

declanșatori SQL sunt un tip special de proceduri stocate lansate în mod automat de către server atunci când datele (DML) în tabel, cu care este asociat. Declanșatoare sunt conectate la o masa. Toate modificările efectuate de date de declanșare sunt tratate ca o singură tranzacție.







Spre deosebire de proceduri / funcțiile stocate convenționale, serverul de declanșare a invocat în mod implicit atunci când anumite evenimente de declanșare. În plus, SQL de declanșare nu are argumente. Cu ajutorul unui declanșator următoarele sarcini:

  • validare și complexe de validare a datelor constrângerilor de integritate a datelor variabile, care trebuie să fie menținute;
  • acumularea de informații statistice prin stabilirea informațiilor vnesimyh modificărilor;
  • suport de replicare.

Cu integritatea restricțiilor impuse de normele și valorile nu este întotdeauna posibil pentru a atinge nivelul dorit de integritate a datelor. Uneori trebuie să implementați algoritmi complecși de validare a datelor pentru a asigura autenticitatea și realitatea lor. În plus, este adesea necesar pentru a monitoriza schimbările în valorile din tabel la datele legate de schimbările dorite. SQL Declanșatorii poate fi privit ca un fel de filtru, care intră în vigoare după punerea în aplicare a tuturor operațiunilor, în conformitate cu normele, valorile implicite, etc.

SQL Application declanșează costuri suplimentare asociate cu resursele serverului pentru adăugarea de operare (insert de declanșare), actualizare (update de declanșare) sau șterge (declanșare) șterge datele din tabel.

În acest caz, atunci când aceleași rezultate pot fi obținute prin folosirea procedurilor memorate sau aplicații care utilizează declanșează inadecvate.

Pagina Link-uri:

CREATE TRIGGER

CREATE TRIGGER Formatul de bază al comenzii este prezentată mai jos:

Moment de pornire de declanșare este determinat cuvânt cheie înainte (de declanșare este declanșat înainte de a executa evenimentul asociat, de exemplu, pentru a adăuga o înregistrare) sau după (după eveniment). Dacă declanșatorul este invocat înainte de eveniment, se poate face modificări la evenimentul de intrare modificabil, în cazul în care evenimentul - nu eliminarea înregistrărilor. Unele SGBD impun restricții asupra operatorilor care pot fi utilizate într-un declanșator (de exemplu, poate să nu i se permită să facă schimbări într-un tabel cu care declanșatorul „conectat“, etc.).

Declanșatorii nu poate fi conectat la masă, și punctul de vedere de prezentare. În acest caz, cu ajutorul lor, mecanismul este pus în aplicare „prezentarea actualizată.“ La conectarea trăgaciul la reprezentarea cuvintelor cheie înainte și după afectează numai secvența de declanșare apel ca evenimentul real (șterge, se introduce sau actualizare) nu se produce.

Declanșatorul poate fi numit pentru fiecare rând (pentru fiecare rând), acoperite de eveniment, sau o singură dată pentru fiecare eveniment (pentru fiecare afirmație).

denumire <список_псевдонимов> Se referă la componente, cum ar fi rândul vechi sau nou (OLD / NEW) fie tabelul vechi sau noi (OLD TABLE / NEW TABLE). Valorile învechite nu se aplică pentru a insera evenimente și noi - pentru a elimina evenimente.

Avantajul principal al manete, este faptul că funcțiile standard sunt stocate într-o bază de date și sunt activate de fiecare dată când este reîmprospătată. Acest lucru poate simplifica foarte mult cererea.

Incorect declanșatori scrise poate duce la probleme grave asociate cu introducerea de încuietori. Declanșatoare poate bloca pentru o lungă perioadă de timp, resursele, astfel încât ar trebui să acorde o atenție deosebită reducerii la minimum a conflictelor de acces.

Sintaxa pentru crearea unui declanșator în MS SQL este după cum urmează:

Denumirea sistemului de declanșare DML. LMD declanșează o acțiune este limitată la o masă sau o zonă de vizualizare diagramă pentru care au fost create. nume_schemă nu poate fi specificată pentru DDL declanșează sau declanșa de intrare.

Numele de declanșare. Argumentul TRIGGER_NAME trebuie să respecte regulile de dispozitive de identificare - cu excepția faptului că TRIGGER_NAME nu poate începe cu # sau ##.

Tabela sau vizualizarea la care este atașat pe trăgaci.

două tabele vor fi stabilite pentru punerea în aplicare a declanșatorului. test_table, test_log. Prin declanșare test_table tabel este conectat. Când actualizați înregistrările într-un tabel de declanșare test_table va înregistra rezultatele în modificările tabelului test_log. Ie Declanșare va fi numit de actualizarea evenimentului.







Model de test test_table:

Tabelul test_log logare:

actualizare de declanșare:

Verificați activitatea de actualizare rânduri de declanșare:

Verificați test_log tabelul de logare. Rezultatul ar trebui sa arate ca acest lucru, așa cum se arată în captura de ecran:

datele XML sunt vizualizate și arată că logare tabel include valori vechi și noi.

Sintaxa pentru crearea unui declanșator

Argumentul specifică numele de declanșare generat. Dacă este necesar, poate fi specificat numele de schemă.

ÎNAINTE de cuvinte cheie indică faptul că, înainte de declanșare și funcția trebuie să fie efectuată înainte de efectuarea evenimentului corespunzător. După cuvântul cheie, indică faptul că, după declanșare funcția este numit după terminarea operației, acționarea unui declanșator.

PostgreSQL suportă următoarele evenimente [INSERT | ȘTERGE | UPDATE]. La enumerarea mai multe evenimente ca delimitator, utilizați cuvântul cheie OR.

Tabelul Denumire, care modificarea conduce la acționarea declanșatorului.

cuvânt cheie următoarea structură pentru fiecare și determinarea numărului de funcții face apel la apariția unor evenimente specifice. Folosind ROW înseamnă că funcția este numit pentru fiecare înregistrare să fie modificate. Dacă funcția ar trebui să fie numit doar o singură dată pentru întreaga echipă, declarația de cuvinte cheie.

EXECUTE PROCEDURA FUNCTION_NAME

Numele numite argumentele funcției. În practică, argumentele în funcția de apel de declanșare nu este utilizat.

Sintaxa pentru definirea unei funcții de declanșare

Funcțiile de declanșare sunt variabile speciale care conțin informații despre declanșatorul de asteptare. Cu ajutorul funcției de declanșare funcționează cu date. Mai jos sunt listate câteva dintre variabilele disponibile în funcții de declanșare.

Înregistrarea individuală câmpurile noi și vechi, la rândul său declanșează procedurile după cum urmează: NEW.names, OLD.rg.

În exemplul pune în aplicare un sistem de autentificare simplu utilizator. Se ține evidența mesei de utilizator, precum și toate modificările sunt înregistrate în tabelul de logare. De exemplu, vom crea un tabel simplificat.

Funcția de declanșare fără parametri de intrare returnează un tip special de declanșatoare. Funcțiile din secțiunea DECLARE definește a treia variabilă. Corpul funcției verifică valoarea variabilei TG_OP (declanșare variabilă internă). În funcție de tranzacție și de a determina peremennayu v_user format șir retstr, care este înregistrată în jurnalele de masă.

Variabile noi și vechi - este de fapt o linie care se ocupă de trăgaci. În cazul INSERT nouă variabilă va conține o nouă linie, și vechi este gol. În cazul ambelor variabile vor UPDATE identificate (date asociate), iar în cazul în care variabila NEW ȘTERGE este gol, OLD cuprind un șir detașabil.

Ea însăși să declanșeze descris în PL / pgsql ca:

declanșare trg_user va fi efectuată după tranzacția INSERT, UPDATE, DELETE pentru fiecare rând și cauza add_to_log funcția (). Acum, orice acțiuni cu masă de utilizatori vor fi autentificat.

Următorul script vă permite să testați pe trăgaci:

Sintaxa CREATE TRIGGER în Oracle este după cum urmează:

De-a lungul crearea trăgaciului poate fi inclus constrângere de declanșare opțional prin determinarea unei expresii SQL Boolean în fraza CÂND. Expresia în fraza Când se verifică pentru fiecare rând afectat de declanșare. Dacă rezultatul expresiei este adevărată, atunci corpul de declanșare este executat. În cazul în care expresia este FALSE sau NULL, organismul de declanșare nu este executat. Expresia din clauza WHEN trebuie sa fie o expresie a SQL, dar nu și expresia PL / SQL și nu poate include o subinterogare.

Opțiunea de referențiere pe poate fi utilizat pentru a declanșa organismului pentru a se evita conflictele între numele de corelație și numele de tabele, în cazul în care tabelul are numele de „vechi“ sau „NOU“. Această situație este rară, iar această opțiune este aproape niciodată folosit.

Ca un exemplu, ia în considerare o masă pe nume nou. Următoarea definiție CREATE TRIGGER prezintă un declanșator asociat cu tabelul nou. care utilizează opțiunea REFERENCING. pentru a evita conflictele dintre numele de corelare și numele tabelului:

Noul operator este redenumit la cele mai noi folosind opțiunea REFERENCING. și apoi utilizate în corpul de declanșare.

Dacă declanșatorul poate fi invocată pentru a executa mai mult de un tip de ofertă DML (de exemplu, „INSERT șterge sau UPDATE“), atunci organismul de declanșare poate utiliza INTRODUCEREA operatori. DELETING și ACTUALIZARE. pentru diferite secțiuni de cod, în funcție de condițiile. Codul din interiorul corpului de declanșare, puteți utiliza următoarele condiții:

Prima condiție este îndeplinită atunci când declanșatorul a fost început atunci când un rând este inserată în tabel. A doua condiție este îndeplinită atunci când actualizarea unui rând de tabel.

Operatorul poate folosi, opțional, condiție ACTUALIZARE verifica numele coloanei actualizate. Ca un exemplu, luați în considerare următorul cod, în care corpul va fi executat în cazul în care UPDATE declarație de declanșare actualizează coloana SAL:

În Oracle, puteți dezactiva temporar un declanșator, dacă există oricare dintre următoarele condiții:

  • obiectul la care se referă declanșatorul nu este disponibil;
  • trebuie să efectuați de încărcare masivă de date fără a pune flip-flops;
  • date de sarcină nobhodimosti într-o masă fără un declanșator apel.

Declanșatorul implicit este activat în momentul creării sale. Pentru a dezactiva un declanșator, trebuie să utilizați comanda TRIGGER ALTER cu opțiunea DISABLE. Pentru a activa un declanșator, utilizați comanda TRIGGER ALTER cu opțiunea ENABLE. Este posibil să dezactivați simultan toate declanșatoare asociate cu tabelul, folosind comanda ALTER TABLE cu opțiunea DISABLE ALL declanșatori.

Pentru a activa sau dezactiva un declanșator folosind comanda ALTER TABLE, trebuie să fie proprietarul mesei sau dreptul corespunzător.

Următorul exemplu trgDepartmentst_del_cascade declanșator efectuează o cascadă șterge TRIGGER șterge înregistrări CASCADE. Declanșatorul este conectat la masa de departamente pune în aplicare acțiunea referențial ȘTERGE cheie primară CASCADE deptID a tabelului:

Notă: de obicei, codul pentru DELETE CASCADE este combinat cu codul UPDATE SET NULL sau UPDATE SET DEFAULT, să ia în considerare modul de actualizare și de eliminare într-o singură declanșare.