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;