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:

Mindent a vezérlőhöz a jóslat, savepearlharbor

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:

Mindent a vezérlőhöz a jóslat, savepearlharbor

Amennyiben dml_event_clause:
Mindent a vezérlőhöz a jóslat, savepearlharbor

referencing_clause:
Mindent a vezérlőhöz a jóslat, savepearlharbor

trigger_edition_clause:
Mindent a vezérlőhöz a jóslat, savepearlharbor

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:

Mindent a vezérlőhöz a jóslat, savepearlharbor

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.