Nemůžeme COMMIT/ROLLBACK ve spouštěch DML, protože transakce je zpracována ručně po příkazu DML. Spouštěče databáze se však zdají být výjimkou. Předpokládejme například, že existuje spouštěč databáze:
CREATE OR REPLACE TRIGGER user_login_as
AFTER LOGON
ON SCHEMA
BEGIN
INSERT INTO user_login_log(username, log_date, action) VALUES (user, sysdate, 'User has logged in');
END user_login_as;
Spoušť neobsahuje autonomní transakční proceduru s potvrzením uvnitř, takže kdo zavazuje vložení? Tento spouštěč funguje jako kouzlo a po přihlášení uživatele vloží nový záznam do tabulky protokolu. Voní to jako skrytá funkce Oracle a v dokumentech Oracle o tom nemůžu najít žádný odkaz. Používám Oracle11g.
Automaticky získáte autonomní transakční kontext pro tyto spouštěče.
Z CREATE TRIGGER
dokumenty:
Jeden nebo více konkrétních stavů databáze, které mohou způsobit spuštění spouště. Spouštěče pro tyto události můžete vytvořit na DATABASE nebo SCHEMA, pokud není uvedeno jinak. Pro každou z těchto spouštěcích událostí otevře databáze autonomní rozsah transakcí , spustí aktivační událost a provede každou samostatnou transakci (bez ohledu na existující transakci uživatele) .
Co se stane, když spoušť selže, závisí na přesné spoušti/události. Viz Zpracování výjimek v aktivačním modul . Zejména přihlašovací spoušť, která selže s výjimkou, může velmi dobře uzamknout uživatele, kteří nejsou dba - výjimka způsobí selhání přihlášení, pokud uživatel nemá určitá oprávnění.