2009-07-09 21 views
5

Güncelleme tetik sonra başlayacak mı?ORACLE Geri Alma ve Tetik

Senaryo: Biz bir tablo A ve A başladı ve ayrıntıları ile başka tablo B günceller masaya tetiği güncellemek düşünelim. Bazı işlem hataları nedeniyle A tablosunda bir geri alma varsa, tetikleyici B tablosunun değişikliği geri almasına neden olur mu?

cevap

9

Evet, olacak.

Tetikleyiciler bu işlem geri alınır

(açıkça veya DML açıklamada örtülü kendisi tarafından tarafından başlatılmış) DML ifadesinin işlem kapsamında çalışmak, tetikleyiciler tarafından yapılan tüm değişiklikler de geri alınır. Eğer tetik tanımının içine

PRAGMA autonomous_transaction 

koyarsanız

Ancak, tetik tetik tamamlar önce taahhüt etmelidir kendi işlem başlayacaktır.

+1

Yani özerk işlem size (onlar başarısız veya geri bile) bir güncelleme gerçekleştirmek için tüm girişimler oturum açmak istiyorsanız iyidir, ama kötü. Dikkat! –

+1

Özerk işlemler için açık COMMIT'e ihtiyacınız var. "ORA-06519: Aktif özerk işlem tespit edilir ve geri alındı" Eğer yoksa, bu başarısız olur – jva

+0

@jva: Eğer sabitleme, haklısın. – Quassnoi

3

Sadece bir not - Eğer (HER SATIR fıkra İÇİN olmadan) UPDATE deyimi seviyesi tetikleyicisi SONRA tanımlarsanız tablodaki DML deyimi başarısız olur ve geri alınıyor eğer patlamaz. tetikleme güncellemeler başarılı ve kararlı olduğunda yalnızca tetiklenen eylem gerçekleştirilemez istiyorsanız