sql >> Databáze >  >> RDS >> Oracle

Jak definovat trigger ON COMMIT v Oracle?

V Oracle neexistuje žádný spouštěcí mechanismus ON COMMIT. Existují však zástupná řešení:

  1. Můžete použít materializované zobrazení s ON COMMIT REFRESH a přidat spouštěče k tomuto MV. To by vám umožnilo spustit logiku, když byla základní tabulka upravena v době odevzdání . Pokud spouštěč vyvolá chybu, transakce bude vrácena zpět (přijdete o všechny nepotvrzené změny).

  2. Pomocí DBMS_JOB můžete odložit akci na dobu po potvrzení. Jednalo by se o asynchronní akci a v některých případech může být žádoucí (například když chcete odeslat e-mail poté, co byla transakce úspěšná). Pokud primární transakci vrátíte zpět, úloha bude zrušena. Úloha a primární relace jsou nezávislé:pokud úloha selže, hlavní transakce nebude vrácena zpět.

Ve vašem případě byste pravděpodobně mohli použít možnost (1). Osobně nerad kóduji obchodní logiku v triggerech, protože to přidává spoustu složitosti, ale technicky si myslím, že by to bylo proveditelné.



  1. Jak mohu vytvořit uživatele v databázi SQL Server Express, kterou jsem přidal do svého projektu?

  2. Oracle sql pro počítání instancí různých hodnot v jednom sloupci

  3. Složené závorky v T-SQL

  4. Jak formátovat výsledky dotazů SQLite v režimu TCL