Készítsen ravaszt
Sql kiváltó okok egy speciális típusa a tárolt eljárások automatikusan elindul a szerver, ha az adatok (DML) a táblázat, amellyel társítva van. Triggerek vannak kötve egy külön táblázat. Minden készült kioldó adatváltozásokkal kezelni egyetlen tranzakciót.
Ellentétben a hagyományos tárolt eljárások / függvények, trigger szerver hallgatólagosan folyamodni, ha bizonyos kiváltó események. Ezen túlmenően, az SQL ravaszt nincsenek érvek. Segítségével a ravaszt a következő feladatokat látja el:
- érvényesítési és a változó adatok validálási komplex adatok integritását korlátok, amelyek fenn kell tartani;
- felhalmozódása statisztikai adatok rögzítésével információt vnesimyh változásokat;
- replikáció támogatást.
A integritását által előírt korlátozások szabályainak és értékeinek nem mindig lehet elérni a kívánt szintet az adatok integritását. Néha meg kell végrehajtani komplex algoritmusok az adatok érvényesítését, hogy biztosítsák a hitelesség és a valóság. Ezen kívül gyakran van szükség a változások nyomon követése az értékeket a táblázatban a kívánt változás kapcsolatos adatokat. SQL Eseményindítók lehet tekinteni, mint egyfajta szűrő, amely hatályba végrehajtása után valamennyi tevékenység szabályainak megfelelően, az alapértelmezett értékek, stb
SQL alkalmazás váltja kapcsolódó többletköltségek szerver erőforrások hozzátéve művelet (ravaszt betét) frissítés (ravaszt update) vagy törölni (ravaszt törli) az adatokat a táblázatban.
Ebben az esetben, ha ugyanezt az eredményt lehet kapunk a tárolt eljárást vagy alkalmazást használó kiváltja a nem megfelelő.
Linkek az oldalon:
CREATE TRIGGER
CREATE kiválthatja a alapformátuma a parancs az alábbiak szerint:
Moment start trigger határozza kulcsszó ELŐTT (trigger váltja végrehajtása előtt a kapcsolódó esemény, például, hogy adjunk egy rekord) vagy után (az esemény után). Ha a vezérlő hivatkoztak az esemény előtt, akkor lehet, hogy változik a módosítható bejegyzés esetén, ha az esemény - nem eltávolítása rekordokat. Néhány DBMS korlátozásokat a szolgáltatók, amelyek felhasználhatók a ravaszt (például előfordulhat, hogy nem szabad megengedni, hogy a változások egy táblázatot, amely a „kapcsolt” trigger, stb.)
A triggerek nem lehet csatlakoztatni az asztalra, és a bemutató nézetet. Ebben az esetben, ezek segítségével a mechanizmust vezetnek „a frissített előadás.” Amikor csatlakoztatja a ravaszt, hogy a képviselet kulcsszavak ELŐTT és UTÁN befolyásolja csak a sorrend a hívást indító, mint a tényleges esemény (törlés, helyezze vagy frissítés) nem fordul elő.
A trigger lehet nevezni minden sorban (mindegyik sor) hatálya alá tartozó, az esemény, vagy csak egyszer minden esemény (minden egyes állítással).
kijelölés <список_псевдонимов> Arra utal, hogy alkatrészek, mint a régi vagy új sor (régi / új) vagy a régi vagy új tábla (OLD TÁBLÁZAT / új tábla). Elavult értékek nem vonatkoznak beszúrni események és új -, hogy távolítsa eseményeket.
A fő előnye a kiváltó, hogy szabványos funkciók egy adatbázisban tároljuk, és aktiválódnak minden egyes alkalommal frissül. Ez nagyban egyszerűsíti az alkalmazást.
Helytelenül írt kiváltó vezethet súlyos problémákat bevezetésével járó zárak. A triggerek elzárhatják sokáig, az erőforrásokat, így különös figyelmet kell fordítaniuk, hogy minimalizálják a hozzáférési konfliktusokat.
A szintaxis létrehozására egy kioldó MS SQL a következő:
Neve rendszer ravaszt DML. DML kiváltja fellépés korlátozódik egy táblázat vagy egy diagram nézet terület, amelyre létrehozták őket. sémanév nem lehet megadni DDL triggerek vagy kiváltó bemenet.
Trigger nevét. trigger_name érv követnie kell a szabályokat azonosítókat - kivéve, hogy trigger_name nem kezdődhet # vagy ##.
A tábla vagy nézet, amely a ravaszt kapcsolódik.
két táblázatot hoznak létre a végrehajtásához a ravaszt. test_table, test_log. Azáltal test_table ravaszt asztal van csatlakoztatva. Ha frissíti rekordok egy táblázat test_table ravaszt rögzíti az eredményeket a táblázatban test_log változásokat. Ie Trigger fogják hívni az esemény frissítés.
Test Pattern test_table:
Táblázat fakitermelés test_log:
Trigger frissítés:
Ellenőrizze a munka a ravaszt sorok frissítés:
Ellenőrizze a táblázat fakitermelés test_log. Az eredmény így kell kinéznie, ahogy az a képen:
Az XML-adatok megtekinthetők és azt mutatják, hogy bejelentkezik táblázat tartalmazza a régi és az új értékeket.
A szintaxis létrehozása a ravaszt
Az argumentum megadja a nevét, a keletkező ravaszt. Ha szükséges, lehet megadott séma nevét.
ELŐTT kulcsszó jelzi, hogy a ravaszt előtt és funkciót kell végezni, mielőtt végrehajtja a megfelelő esemény. UTÁN kulcsszó jelzi a ravaszt, miután a funkciót úgy hívjuk a művelet befejeződött, a működtető ravaszt.
PostgreSQL támogatja a következő események [INSERT | Törlés | UPDATE]. Ha több eseményt felsoroló Elválasztóként, a kulcsszó vagy.
Táblázat Név, amely módosítás vezet működtetése a ravaszt.
Kulcs szó a következő szerkezetet a és számának meghatározása funkció felhívja előfordulása meghatározott eseményeket. Használata ROW azt jelenti, hogy a függvényt az egyes rekordot módosítani kell. Ha a funkciót csak egyszer hívja az egész csapatnak, a kulcsszó NYILATKOZAT.
EXECUTE ELJÁRÁS function_name
Neve az úgynevezett függvényargumentum. A gyakorlatban azok az érvek, a hívás trigger funkció nem használható.
A szintaxis definiálására trigger funkció
A trigger funkciók speciális változó, amely információkat tartalmaz a hívó ravaszt. Segítségével a trigger funkció működik adatokat. Az alábbiakban felsorolunk néhány, a változók a trigger funkciók.
Az egyes rekordmezők új és a régi viszont kiváltó eljárásokat az alábbiak szerint: NEW.names, OLD.rg.
A példában egy egyszerû rendszer felhasználói bejelentkezést. Nyomon követi a felhasználói tábla, és minden változás rögzítik a naplózási táblázatban. Például, akkor hozzon létre egy egyszerűsített táblázatban.
Trigger funkció nélkül bemeneti paraméterek visszatér egy speciális típusú ravaszt. A funkciókat a DECLARE szakasz meghatározza a harmadik változót. A test a funkció ellenőrzi a változó értékét TG_OP (belső változó ravaszt). Attól függően, hogy az ügylet, és meghatározza peremennayu v_user kialakítva retstr húr, amely rögzíti a táblázatban naplók.
Változók új és a régi - ez valójában egy sor, amely kezeli a ravaszt. Abban az esetben, helyezzen be új változót tartalmaz egy új sort, és a régi üres. Abban az esetben, mindkét változó frissíti azonosított (kapcsolódó adatok), és ha a változó NEW TÖRLÉS üres, régi tartalmazhat eltávolítható húr.
Maga ravasz leírt PL / pgSQL, mint:
trg_user ravaszt fogják elvégezni az ügylet után INSERT, UPDATE, DELETE minden egyes sorban, és okozhat add_to_log () függvény. Most minden akciók felhasználók tábla rögzítve lesz.
A következő script lehetővé teszi, hogy teszteljék a ravaszt:
Syntax CREATE TRIGGER az Oracle a következő:
Az egész teremtés a ravaszt lehet benne opcionális ravaszt korlát meghatározásával logikai SQL kifejezést a mondat, mikor. A kifejezést a HA mondat ellenőrizni minden egyes sorban által érintett a ravaszt. Ha az eredmény a kifejezés igaz, akkor a ravaszt test fut. Ha a kifejezés hamis vagy NULL, a ravaszt test nem kerül végrehajtásra. A kifejezést a HA kikötés kifejezés kell álljon az SQL, de nem a kifejezés a PL / SQL, és nem tartalmazhat segédlekérdezésként.
HIVATKOZÁSOK opció lehet kiváltani a szervezet annak érdekében, hogy ne ütközzenek a korrelációs nevek és táblaneveket, ha a tábla neve „régi” vagy „új”. Ez a helyzet ritka, és ezt a lehetőséget szinte soha nem használt.
Példaként vegyünk egy táblát új. A következő meghatározást CREATE TRIGGER mutat ravaszt társított asztal új. amely felhasználja a hivatkozó opciót. közötti konfliktusok elkerülése korrelációs nevek és a tábla nevét:
Az új üzemeltető átnevezésre legújabb alkalmazásával a hivatkozó opciót. és ezután a ravaszt szervezetben.
Ha a trigger lehet hivatkozni, hogy végre több mint egy típusú ajánlat DML (például „beszúrni vagy törölni, vagy frissíteni”), akkor a ravaszt szervezet használhatja BEHELYEZÉSEKOR szereplők. Törlése és frissítése. különböző szakaszai kódot, a körülményektől függően. A kód belsejében a ravaszt testet, akkor a következő feltételeket:
Az első feltétel akkor teljesül, ha a ravaszt akkor kezdődött, amikor a sorban helyezünk az asztalra. A második feltétel akkor teljesül, ha frissíti a sort a táblázatban.
Az üzemeltető is használhat FRISSÍTÉS állapotban ellenőrizze a nevét a frissített oszlopot. Példaként tekintsük a következő kódot, amelyben a test kerül végrehajtásra, ha UPDATE kiváltó nyilatkozatot frissíti a SAL oszlop:
Az Oracle, akkor ideiglenesen tiltsa a ravaszt, ha van az alábbi feltételek:
- a tárgy, amelyre utal a ravaszt nem áll rendelkezésre;
- végre kell hajtania tömeges adatbetöltési anélkül hogy a flip-flop;
- nobhodimosti terhelési adatokat egy táblázatban felhívás nélkül ravaszt.
Az alapértelmezett indító aktiválva idején annak létrehozását. Letiltásához a ravaszt, akkor használja az ALTER TRIGGER parancs a letiltási lehetőség. Annak érdekében, hogy a ravaszt használja az ALTER TRIGGER parancs az engedélyező beállítást. Lehetőség van egyszerre tilthatja le az összes kiváltó társított táblázat segítségével az ALTER TABLE parancs a lehetőséget tiltsa le az összes kiváltja.
Ahhoz, hogy engedélyezze vagy tiltsa le a ravaszt a ALTER TABLE parancs, akkor vagy a tulajdonos az asztal vagy a megfelelő jogosultság birtokában.
Az alábbi példa trgDepartmentst_del_cascade ravaszt végez egy lépcsőzetes törölni ravaszt DELETE CASCADE rekordokat. A trigger van kötve osztályok asztal végrehajtja referenciális cselekvés DELETE CASCADE deptID elsődleges kulcs a táblázat:
Megjegyzés: általában kódot DELETE CASCADE kombináljuk a kódot UPDATE SET NULL vagy UPDATE SET DEFAULT, hogy fontolja meg, hogyan frissítheti és eltávolítás egyetlen ravaszt.