adatbázis Eseményindítók

Trigger adatbázis - úgy tervezték, speciálisan elnevezett blokk PL / SQL, az adatbázisban tárolt. Minden trigger társul egy adott asztal és az Oracle automatikusan elindul, amikor az egyik DML-üzemeltetők (INSERT, DELETE, UPDATE), vagy ezek kombinációja ezen az asztalon.

Hozzárendelése ravaszt. A triggerek lehet használni:

1), hogy végre komplex adatok integritását korlátok, amelyeket nem lehet végrehajtani a szabványos módon, hogy hozzon létre egy táblázatot;

2) megakadályozzák hibás tranzakció

3) elvégzik átvilágítási eljárások a hozzáférési jogok és adatvédelem;

4) generál néhány kifejezést értékek alapján áll rendelkezésre a táblázat oszlopait;

5) végrehajtási összetett üzleti szabályok adatfeldolgozás (képes nyomon követni „echo”, vagyis azt a lehetőséget, ha változik az egy asztal, frissítés kapcsolatos adatokat táblázatok).

Létrehozása és kapcsoló ravaszt. Az alábbi általános szintaxis létrehozásához használt, és automatikusan bekapcsolja a ravaszt:

CREATE [VAGY HELYETTESÍTSE] TRIGGER trigger_name

ON táblanév [mindegyik sor] [WHEN feltétel]

Ha vannak olyan kulcsszavak vagy CSERE trigger újra létrehozni, ha már létezik.

Tervezés ELŐTT | UTÁN kezdetét jelzi időben a ravaszt. ELŐTT opció azt jelenti, hogy a ravaszt fog futni elvégzése előtt egy aktiváló DML-üzemeltető; UTÁN lehetőség azt jelenti, hogy a trigger után indul az aktiváló DML-operátor.

Tervezés INSERT | Törlés | UPDATE [OF column_list] típusát jelzi aktiválja a ravaszt DML-operátor. Megengedett a logikai művelet vagy adja meg az aggregált tüzelési szereplők, például: beszúrni vagy törölni. Amikor a kiviteli alaknál UPDATE Set listáját oszlopok, a ravaszt kerül végrehajtásra a módosítását egy említett oszlopok; ha nincs lista oszlopainak, a trigger akkor aktiválódik, ha bármelyik oszlop a táblázat társított a ravaszt.

Tervezés egyes sorokhoz karakterét jelzi a hatását a ravaszt: egy karakterlánc vagy egy operátor. Ha a tervezés minden egyes sorában jelen van, a ravaszt egy string; hiányában a ravaszt egy olyan üzemben. Operator ravaszt egyszer fut előtt vagy után az ébresztési ravaszt DML-üzemeltető nem számít, hány sort a táblázatba kapcsolódó kiváltó módosítjuk. Karakterlánc ravaszt ismételt futtatása az egyes vonalak, amelyet alávetnek a módosítás DML-operátor aktiválásával ravaszt.

A HA kulcsszóval lehet állítani a további kapcsolódó korlátozás kiváltó sorban az asztalra, módosításokat tartalmaznak, amelyek kiváltó indítható.

Szerkezet PL / SQL_blok képviseli a PL / SQL blokk, amely Oracle indul aktiváláskor a ravaszt.

Besorolás kiváltja. Alapvetően különbséget dvenadtsattipov ravaszt. Trigger típusát a kombinációja határozza meg a következő három paraméter:

1) a természet a hatása a ravaszt vonal táblázat társított (string vagy üzemeltetője);

2) start trigger pont: előtt (mielőtt) vagy után (utána) aktiváló ravaszt végrehajtása DML-operátor;

3) a típusa az aktiváló ravaszt DML-operátor (INSERT, DELETE, UPDATE);

Az, hogy a aktiválás vált ki. Ha a tábla többféle kiváltó, azok aktiválásához az alábbiak szerint:

1) tartja a kezelő előtt jelennek meg (ha egynél több, semmi sem a végrehajtásuk sorrendjének lehetetlen megmondani);

2) az indító húr ELŐTT;

3) tartja az aktiváló ravaszt DML-operátor, majd ellenőrzését adatok integritását korlátok;

4) a ravaszt sztring a későbbi ellenőrzése adatok integritását korlátok;

5) tartja a kezelő ravaszt UTÁN.

Trigger predikátumok. Ha a trigger meghatározza egy sor aktiválja a ravaszt DML-operátorok (például, beszúrni vagy törölni), a felismerés, hogy mi konkrétan a DML-üzemeltetők végezzük az asztalon társított a ravaszt, ravaszt predikátumok használt: beillesztjük, töröljük, frissítése. Ezek a logikai funkciók visszatérnek TRUE, ha a típus az aktiváló üzemeltető egybeesik típusú állítmány, és FALSE - egyébként. Megadásához ugyanazt a műveletet abban az esetben teljesít a különböző szereplőket DML-kiváltó feltételes állítás predikátumok egyesített használ logikai operátorokat.

Pseudorecords. Karakterlánc kiváltó, vannak speciális minták, amelyek lehetővé teszik a teljesítménye DML-line szolgáltatók az asztalra, hogyan kell kezelni a régi értékeket, hogy ott voltak a módosítás előtt és az új, ami megjelenik egymás után annak módosítását. Ezeket a szerkezeteket nevezzük pseudorecords és a kijelölt régi és az új. Ezek szerkezete azonos felépítésű pseudorecords vonal módosítható táblázatban, de csak akkor működik, az egyes mezők pseudorecords. Mezőhivatkozás pseudorecords az alábbiak szerint történik: mielőtt a régi vagy az új kerül a jel „:” ponton átmenő adott mező nevét. Az értékek, amelyek figyelembe pseudorecords területen, amikor az égetés DML-üzemeltetők a következőképpen definiáljuk.

INSERT utasítás - psevdozapis: új egyenértékű beszúrni sorok és psevdozapis: régi minden területen NULL.

Az üzemeltető DELETE - psevdozapis: régi egyenértékű a tételt törölni kell, és psevdozapis: új minden területen NULL.

UPDATE Operator - psevdozapis: új vonal egyenértékű, a kapott módosított és psevdozapis: régi minden területen van egy kezdőcsapatban.

Be- és kikapcsolás ravaszt. Az adatbázisban tárolt ravaszt, akkor ideiglenesen tiltsa törlése nélkül az adatbázisból. Ehhez használja az alábbi parancsot:

ALTER TRIGGER trigger_name tiltani az;

Engedélyezze ravaszt egy bizonyos ideig lehetséges, a parancs

ALTER TRIGGER trigger_name bekapcsolja;

Megtilthatja vagy lehetővé teszi a végrehajtását összes vezérlőhöz társított asztal, akkor használja a következő parancsot

ALTER TABLE táblanév összes vezérlőhöz;

ahol letiltási lehetőség van, hogy kikapcsolja, és engedélyezése beállítást -, hogy valamennyi kiváltó asztalra.

Eltávolítása a ravaszt az adatbázisban. .. megsemmisítése a ravaszt, vagyis megszűnik a ravaszt az adatbázis segítségével a következő parancsot:

DROP TRIGGER trigger_name;

Első információt ravaszt. Triggerek vannak tárolva az adatbázisban, így a velük kapcsolatos információk nyerhetők az ábrázolás USER_TRIGGERS adatszótárhoz, például a következő parancsot:

SELECT * FROM USER_TRIGGERS;

1. Hozzon létre egy ravaszt, hogy mielőtt behelyezi a következő sort a táblázatban KNIGA_POSTAVKA meghatározott ellenőrzések kodaknigi KNIGA táblázatban. Ennek hiányában az említett kód szakkönyvek KNIGA asztal kell generálni a megfelelő kivétel üzenetet.

Ha új sort a táblázatba KNIGA_POS-TAVKA végrehajtott INSERT utasítással. Mivel a ravaszt kell futtatni, mielőtt minden INSERT utasítás, ezért kell, hogy legyen egy string ELŐTT-ravaszt. Adatok épségének megóvása érdekében, meg kell vizsgálni, hogy a kódok által bevezetett könyvek és KNIGA asztalra. Ehhez keresztül egyetlen szereplő SELECT végzett KNIGA adatok mintaasztal olyan helyzetben, amelyben a mintát használják KOD_KNIGI területén pseudorecords: új. Ha a sorok számát az adatok a kód könyv táblázat KNIGA nulla lenne, és fog dobni egy kivételt üzenet kerül kiadásra.

Létrehozása ravaszt TR1 végezzük megadásával a következő nyilatkozatot:

CREATE OR CSERE TRIGGER TR1

ELŐTT INSERT ON KNIGA_POSTAVKA

SELECT COUNT (*) FROM INTO KOL KNIGA

AHOL KOD_KNIGI =: NEW.KOD_KNIGI;

IF KOL = 0, akkor RAISE_APPLICATION_ERROR

(-20.212, „A táblázat KNIGA nincs információ a könyv”);

Az akció a ravaszt TR1 lehet tesztelni teljesítő nyomon üzemben jelen, amelyek az inszertumot sorban KNIGA_POSTAVKA táblázatban, és ezáltal aktiválja a ravaszt TR2:

INSERT INTO KNIGA_POSTAVKA VALUES (21,15 'Ivanov', 15,

Mivel a kód könyv 15 hiányzik KNIGA asztal, kivéve fog dobni, és az üzenetet küldi.

2. Hozzon létre egy trigger, amely tiltja, hogy a területén érték KNIGA táblázatsor ára több mint 5000 rubelt, valamint az árak emelkedése a könyveket, amelyek az információt tárolja KNIGA asztal, több mint 20%. Ha megsértik ezt a követelményt kell dobni egy kivételt a megfelelő üzeneteket.

Mivel az új sorok táblázatban KNIGA végzett végző INSERT nyilatkozatot, és a mező értéke ÁR KNIGA tartalmazó táblázat árát a könyv lehet változtatni eredményeként UPDATE üzemeltető a ravaszt meghatározott számú kiváltó DML-üzemeltetők. Mivel a ravaszt kell indítani, mielőtt elküldi az említett DML-üzemeltetők, ezért egy string ELŐTT-ravaszt. Ahogy által végrehajtott műveleteket kiváltó különböző az egyes kiváltó DML-kimutatások módosító asztal KNIGA, hogy felismerjük a típusú DML-operátor a megfelelő ravaszt predikátumok behelyezéséhez és UPDAITING. Annak a ténynek köszönhetően, hogy a behelyezésekor új sorok ellenőrzés alá kell vetni egy új értéket mező ÁR, mint a módosítás értékmezőben ÁR új értéket kell összehasonlítani a régi értéket kell használni pseudorecords: új és: old.

Létrehozása ravaszt TR2 készül a következő nyilatkozatot teszi:

CREATE OR CSERE TRIGGER TR2

ELŐTT INSERT vagy aktualizálása ÁR ON KNIGA

Behelyezésekor AKKOR

IF: NEW.TSENA> 5000 THEN

Ha a frissítés AKKOR

Az IF: NEW.TSENA>: ​​OLD.TSENA * 1,2 AKKOR

Az akció a ravaszt TR2 lehet tesztelni végre a következő gazdasági szereplők, amelyek az inszertumot vonalak és sorok KNIGA tábla frissítése KNIGA asztal, ezáltal az aktiválás.

vonalak, illessze be a táblázatban szereplő KNIGA, ami aktiválja a ravaszt TR2:

INSERT INTO KNIGA ÉRTÉKEK (21, 'Dune' 'Herbert', 5268 'Ast'

Operator frissítéseket a táblázat sorai a KNIGA okozó aktiválását a ravaszt TR2:

UPDATE KNIGA SET ÁR = 6000;

Mivel ezek a kijelentések sértik a követelmények érték és módosítja az ár a könyvek, minden esetben azt kell dobni, és az üzenet ki.

3. Hozzon létre egy ravaszt, amely megteremtette a STAT táblázat tartalmazza oszlopok:

kiadó nevét - IZD,

a könyvek száma a „novel” műfaj - KOL_ROM,

könyvek száma a műfaj „Irodalom» - KOL_FAN,

minden módosítás KNIGA generálja és tárolja a táblázat megfelelő táblázat oszlopait STAT száma könyv mindegyik publikált szekcionált téma: „római” és „fikció”.

Módosítása KNIGA asztal végzett DML-végre a következő műveletek: INSERT, DELETE vagy UPDATE utasítás értékek módosítására MŰFAJ KNIGA oszlop a táblázatban. Mivel fellépés kialakulását STAT adattáblázat után végzett minden egyes módosító táblázat KNIGA üzemeltetők, típusa szerint operátor UTÁN-ravaszt. Ahogy által végrehajtott műveleteket kiváltó ugyanazok mindenféle aktiváló az üzemeltetők, a ravaszt predikátumok nem használják. Mielőtt egy ravaszt táblázatot kell létrehozni STAT.

Létrehozása STAT asztal végezhetjük megadásával a következő sor szereplők:

DROP TABLE STAT;

CREATE TABLE STAT

Létrehozása ravaszt TR3 készül a következő nyilatkozatot teszi:

CREATE OR CSERE TRIGGER TR3

UTÁN beszúrni vagy törölni vagy frissíteni műfaj

KURZOR V1 SELECT LAPKIADÁS,

FROM WHERE KNIGA Műfaj = 'római'

KIADÓI GROUP BY;

KURZOR V2 SELECT LAPKIADÁS,

FROM WHERE KNIGA Műfaj = 'Fiction'

KIADÓI GROUP BY;

DELETE FROM STAT;

A Z1 V1 LOOP

INSERT INTO STAT VALUES (Z1.IZDATELSTVO,

A Z1 V2 LOOP

UPDATE STAT SET KOL_FAN = Z1.KOL2

AHOL IZD = Z1.IZDATELSTVO;

Ha az SQL% NOTFOUND AKKOR

INSERT INTO STAT VALUES (Z1.IZDATELSTVO, 0,

Trigger Action lehet ellenőrizni végre a következő szereplők helyezze hordozó KNIGA sort a táblázatban, frissítése és törlése sorok KNIGA sorok a táblázatban, és ezáltal aktiválja a ravaszt TR3.

Az üzemeltetők helyezze a táblázat sorai a KNIGA okozó aktiválását a ravaszt TR3:

INSERT INTO KNIGA ÉRTÉKEK (46, 'A Dűne eretnekei', 'Herbert', 368,

INSERT INTO KNIGA ÉRTÉKEK (42, 'Ingvar és Alder'

'Nikitin', 168 'Ast', 'újszerű');

Az üzemeltetők sorokat törölni asztal KNIGA okozó aktiválását a ravaszt TR3:

DELETE KNIGA ha name = 'kozákok';

Az üzemeltetők módosítás KNIGA a táblázat sorai a, ami aktiválja a ravaszt TR3:

UPDATE KNIGA SET MŰFAJONKÉNT = 'Fi', ahol NAME =

SELECT * FROM STAT;