Az Oracle a triggert lefordítva, p-kódban tárolja az adatszótárban. A triggerekkel kapcsolatos információk az adatszótárnézetekben érhetők el. A USER_TRIGGERS nézet tartalmazza a törzs és a WHEN feltétel kódját, a táblát és a trigger típusát. Az ALL_TRIGGERS az aktuális felhasználó triggereiről, a DBA_TRIGGERS minden triggerről tartatalmaz információkat.
A trigger és más objektumok közötti függőségekre is igazak a 10. fejezetben leírtak. Egy érvénytelen trigger explicit módon fordítható újra, vagy pedig a következő aktivizálása során automatikusan újrafordítódik.
1. példa
/* Emlékezzünk vissza a tr_ugyfel_kolcsonzes_del
trigger legutóbbi definíciójára;
CREATE OR REPLACE TRIGGER tr_ugyfel_kolcsonzes_del
INSTEAD OF DELETE ON NESTED TABLE konyvek OF ugyfel_kolcsonzes
FOR EACH ROW
CALL konyvtar_csomag.visszahoz(:PARENT.id, :OLD.konyv_id)
/
*/
/* Fordítsuk újra a csomagot, amiben az eljárás, a trigger törzse van. */
ALTER PACKAGE konyvtar_csomag COMPILE;
/* A következő DELETE hatására újra lefordul a trigger. */
DELETE FROM TABLE(SELECT konyvek FROM ugyfel_kolcsonzes WHERE id = 15)
WHERE konyv_id = 15;
Mint az adatbázis-objektumokra általában, a triggerre is alkalmazható az ALTER és DROP utasítás. Az ALTER alakja:
ALTER TRIGGER [séma.]triggernév
{ENABLE | DISABLE | RENAME TO új_név|
COMPILE [DEBUG] [REUSE SETTINGS]];
A séma megadja azt a sémát, ahol a trigger van (ha nincs megadva, akkor feltételezi a saját sémát). A triggernév a trigger nevét határozza meg.
Az ENABLE engedélyezi, a DISABLE letiltja a triggert. A RENAME átnevezi azt új_név-re.
A COMPILE újrafordítja a triggert, függetlenül attól, hogy érvénytelen-e vagy sem.
A DEBUG arra utasítja a PL/SQL fordítót, hogy kódgenerálás közben használja a PL/SQL nyomkövetőjét.
Az Oracle először újrafordít minden olyan objektumot, amelytől a trigger függ, ha azok érvénytelenek. Ezután fordítja újra a triggert. Az újrafordítás közben töröl minden fordítási kapcsolót, ezeket újraszármaztatja a munkamenetből, majd tárolja őket a fordítás végén. Ezt elkerülendő adjuk meg a REUSE SETTINGS utasításrészt.
Egy trigger törlése az adatszótárból a következő utasításal történik:
DROP TRIGGER triggernév;
2. példa
/* Letiltjuk azt a triggert, amelyik lehetővé teszi
az ugyfel_kolcsonzes nézet konyvek oszlopának módosítását. */
ALTER TRIGGER tr_ugyfel_kolcsonzes_del DISABLE;
DELETE FROM TABLE(SELECT konyvek FROM ugyfel_kolcsonzes WHERE id = 15)
WHERE konyv_id = 45;
/*
Hiba a(z) 1. sorban:
DELETE FROM TABLE(SELECT konyvek FROM ugyfel_kolcsonzes
*
ORA-25015: ezen a beágyazott táblanézet oszlopon nem hajtható végre DML
*/
-- Újra engedélyezzük a triggert.
ALTER TRIGGER tr_ugyfel_kolcsonzes_del ENABLE;
-- Explicit módon újrafordítjuk a régi beállításokkal
ALTER TRIGGER tr_ugyfel_kolcsonzes_del COMPILE REUSE SETTINGS;
-- Át is nevezhetjük:
ALTER TRIGGER tr_ugyfel_kolcsonzes_del RENAME TO tr_ugyf_kolcs_del;