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

pragma autonomous_transaction in trigger

Použití autonomní transakce pro cokoli jiného než protokolování, které chcete zachovat, když se nadřazená transakce vrátí zpět, je téměř jistě chyba. Toto není dobré využití autonomní transakce.

Co se například stane, když aktualizuji řádek v t1 ale moje transakce se vrátí zpět. t2 změny již byly provedeny a potvrzeny, aby se nevrátily zpět. To obecně znamená, že t2 údaje jsou nyní nesprávné. Celým smyslem transakcí je zajistit, aby sada změn byla atomická a byla buď zcela úspěšná, nebo zcela vrácena. Povolit, aby byl kód částečně úspěšný, není téměř nikdy dobrý nápad.

Těžko vidím, co si zde pomocí autonomní transakce koupíte. Často uvidíte, že lidé nesprávně používají autonomní transakce, aby nesprávně obcházeli mutující spouštěcí chyby. Kód, který jste zveřejnili, by však nevygeneroval chybu mutujícího spouštěče, pokud by na t2 nebylo spouštěč na úrovni řádku který se také pokoušel aktualizovat t1 nebo nějaký podobný mechanismus, který zaváděl mutující tabulku. Pokud je to však tento případ, použití autonomní transakce je obecně ještě horší, protože autonomní transakce pak nevidí změny prováděné v nadřazené transakci, což téměř jistě způsobí, že se kód chová jinak, než byste si přáli.




  1. manipulační kolejnice + postgres a časová pásma

  2. Jak mohu importovat oddíl z jedné tabulky do druhé v Oracle?

  3. MySQL Pomalé připojení – ale ne vždy a ne na všech stolech

  4. Vytváření objektu ActionScript Date z řetězce časového razítka MySQL UTC