Mindent a vezérlőhöz a jóslat, savepearlharbor
Általános információk a kiváltó
Trigger - egy megnevezett PL / SQL blokk, amely az adatbázisban tárolt.
- Lehetetlen, hogy hatására a ravaszt, mindig csak akkor működik az adott esemény automatikusan (ha engedélyez)
- Nem szükséges, hogy hozzon létre egy rekurzív ravaszt. Ie például kiváltó frissítés után, amelyben a frissítés végrehajtása azonos táblázatban. Ebben az esetben a ravaszt majd tüzet rekurzív amíg végéig memóriát.
- DML ravaszt (a tábla vagy nézet)
- Rendszer ravaszt (az áramkör vagy adatbázis)
- Feltételes ravaszt (akik az állapot, amikor)
- Ahelyett ravaszt (DML ravaszt a rendszer teljesítményét, vagy hozzon létre egy aktiválási parancs)
Miért érdemes kiváltja:
- Az automatikus generációs virtuális mező értéke
- naplózás
- Statisztikák gyűjtésére
- Módosításához A táblázatok adatai, ha részt vesz a képviselete DML műveletek
- Annak megakadályozása érdekében DML műveletek néhány konkrét óra
- Megvalósítása komplex adatok integritását korlátok, amelyeket nem lehet végrehajtani a leíró határértékeknek létrehozásakor asztalok
- A szervezet különböző típusú ellenőrzés
- Figyelmeztetni más modulokat, amelyek megváltozása esetén az információt az adatbázisban
- Megvalósítása üzleti logika
- A szervezet a lépcsőzetes hatása az adatbázis tábla
- Ahhoz, hogy válaszoljon a rendszer eseményeket egy adatbázisban vagy sémában
ahol plsql_trigger_source. ez a design:
Tervezés simple_dml_trigger, instead_of_dml_trigger, compound_dml_trigger system_trigger és meg kell adni az érintett szakaszok a cikket.
DML triggerek
- DML kiváltó jönnek létre táblákat vagy nézeteket, akkor aktiválódnak, amikor behelyezi, frissítése vagy törlése rekordokat.
- A trigger lehet előállítani egy másik áramkörön van, ahol a meghatározott táblázat. Ebben az esetben az áramkört, ha a ravaszt a retesz kör tekinthető.
- Ha bekapcsol MERGE működését váltja ki a változás, beszúrás vagy törlés rekordok függően húr műveleteket.
- Trigger - egy tranzakció részeként, egy hiba a ravaszt tekercs vissza a tranzakció, a táblázatok a ravaszt változások tranzakció része.
- Ha a tranzakciót visszaállítják a ravaszt változások visszaszorítását is.
- A kiváltó tiltott DDL utasítások és a tranzakció-kezelő (kivéve - önálló ügylet).
simple_dml_trigger design:
Amennyiben dml_event_clause:
referencing_clause:
trigger_edition_clause:
trigger_body:
Szerint rögzített objektumok vannak osztva:
- az asztalon
- Bemutatása (helyett ravaszt)
A kiváltó események:
- Rekord beszúrása (insert)
- Frissítve bejegyzések (update)
- Rekordok törlésére (törlés)
A kör:
- A szint az egész csapat (kimutatások szintjén kiváltja)
- A felvételi szint (sor szint kiváltja)
- Vegyület triggereket (vegyület triggerek)
Szerint a válaszidő:
- A művelet megkezdése előtt (mielőtt)
- Miután a művelet végrehajtása (utána)
Feltételes predikátumok, hogy meghatározza a művelet, amely a ravaszt lép:
- A pseudorecords tiltott művelet szintjén teljes bejegyzés (: új = null;)
- Nem lehet megváltoztatni az értékét régi rekordmezők
- Ha a trigger tüzek törlés, nem tudja megváltoztatni az értékét új mezők a rekord
- A trigger nem lehet megváltoztatni, miután új értéket beviteli mezők
Ahelyett, DML triggerek
- Alkotó, hogy képviselje (nézet) és szolgálhat a helyettesítő DML műveletek a funkciót.
- Hagyjuk betét / frissítése vagy törlése ábrázolások nem megújuló.
- Mindig kiváltó felvétel szint (sor szint)
- Pseudorecords hozzáfér a régi és az új, de nem módosíthatja azokat
- Helyettesíti DML műveletet a reprezentáció (nézet)
Ahelyett, hogy a kiváltó beágyazott táblázat oszlopai megtekintés
Létrehozhat egy kiváltó befektetés egy táblanézet. Ez a trigger is jelen kiegészítő psevdozapis - szülő, arra utal, hogy az egész előadás felvétel (normál pseudorecords régi és új bejegyzés adatok kizárólag a mellékelt táblázatot)
Egy példa egy ilyen ravaszt
Vegyület DML ravaszt (vegyület DML kiváltja)
Bevezetett 11G Ezek kiváltói közé tartozik egy egységet feldolgozó minden típusú DML kiváltja.
compound_dml_trigger design:
- A munka egy ilyen kiváltó különböző események és különböző időpontokban (szinten az üzemeltető vagy egy string, amikor behelyezi / frissítése / törlése előtt vagy az esemény után).
- Lehet, hogy nem önálló tranzakciókat.
Főleg, hogy:
- Összegyűjtött egy gyűjtemény sor beillesztése egy másik tábla, hogy rendszeresen be őket egy csomagban
- Kerülje mutáló hibatáblázatban (mutáló-táblázat hiba)
A vegyület szerkezetét kiváltó
Tartalmazhat változókat él szerte a végrehajtás a nyilatkozatot, amely miatt a ravaszt a tüzet.
Ez a trigger az alábbi részekből áll:
- mielőtt nyilatkozat
- Miután nyilatkozat
- Mielőtt minden sorban
- Miután minden egyes sorban
Ezekben kiváltó Nem indul részben, de erre a célra lehet használni szakasz előtt nyilatkozatot.
Ha nincs kiváltó utasítás előtt szakasz vagy szakaszok után nyilatkozatot, és a nyilatkozat nem érinti egy rekordot, így a ravaszt nem villan.
- Nem lehet hozzáférni a pseudorecords régi, az új vagy a szülő a szakaszok expressziós szint (utasítás előtt és után kimutatás)
- Változás az érték az új mezők csak pseudorecords szakasz előtt minden sorban
- Kivételek generált egy szakaszon nem lehet feldolgozni a másik részben
- Ha az állítás goto, meg kell mutatni, hogy a kód ugyanazon szakasza
Alapvető szabályok meghatározására DML triggerek
Korlátai DML triggerek
- Nem végezhet DDL utasítások (csak az önálló ügylet)
- Nem lehet futtatni az alprogram a piaci szereplők a tranzakció-ellenőrző
- Nem férnek hozzá a csomagok SERIALLY_REUSABLE
- nem haladhatja meg a 32K
- Akkor nem nyilvánítja típusú változók hosszan, hosszan RAW
A hiba ORA-04091 mutáció asztal
Ha a trigger szintet, hogy próbálja meg egy sort, vagy módosítsa az adatokat a céltáblát, akkor az Oracle nem teszi lehetővé, hogy ezt és fog dobni egy hiba ORA-04091 TABLE TABLE_TEST változások, trigger / funkció nem látja azt.
Kerülő A probléma megoldásához használja az alábbi módszerek:
- felhasználási szint működését beindítja
- autonóm tranzakció a ravaszt
- indirekt szerkezete (csomag-szintű gyűjtemény)
- használhatja az összetett TRIGGER
- A változás az algoritmus az eltávolítása funkcionális flip-flop
Rendszer kiváltó (A rendszer kiváltja)
system_trigger design:
Ezek közé tartozik a kiváltó vagy rendszer, illetve a teljes adatbázis.
Számos lehetőség, a rendszer indító történik bizonyos időpontban:
- Mielőtt a művelet (amelyen a ravaszt aktiválódik)
- Miután a művelet (amelyen a ravaszt aktiválódik)
- Végrehajtása helyett létrehozása
Eseményindítók szintű kör (séma váltja)
- Ez jelenik meg, amikor a felhasználó-tulajdonos az áramkör elindítja az esemény (végez), amely ravaszt kell lőni.
- Ha bármely más felhasználó lefuttatja a procedúra / funkció, amely az úgynevezett a szerző jogait, és ebben az eljárásban / funkció, egy művelet, amely olyan rendszert létrehozni ravaszt - a ravaszt aktiválódik.
Triggerek olyan adatbázis szintjén (adatbázis triggerek)
- Ez a trigger akkor aktiválódik, ha bármely felhasználói adatbázis végrehajtja a parancsot, amikor a ravaszt jön létre.