sql >> Databasteknik >  >> RDS >> Oracle

pragma autonom_transaktion i en trigger

Att använda en autonom transaktion för allt annat än att logga som du vill ska bevaras när den överordnade transaktionen rullar tillbaka är nästan säkert ett fel. Detta är inte en bra användning av en autonom transaktion.

Vad händer till exempel om jag uppdaterar en rad i t1 men min transaktion går tillbaka. t2 ändringar har redan gjorts och genomförts så att de inte rullar tillbaka. Det betyder i allmänhet att t2 uppgifterna är nu felaktiga. Hela poängen med transaktioner är att säkerställa att en uppsättning förändringar är atomära och antingen är helt framgångsrika eller helt återställda. Att tillåta kod att vara delvis framgångsrik är nästan aldrig en bra idé.

Jag är hårt pressad att se vad en autonom transaktion köper dig här. Du kommer ofta att se människor som felaktigt använder autonoma transaktioner för att på ett felaktigt sätt komma runt muterande triggerfel. Men koden du postade skulle inte generera ett muterande triggerfel om det inte fanns en radnivåutlösare på t2 som också försökte uppdatera t1 eller någon liknande mekanism som introducerade en mutationstabell. Om så är fallet är det i allmänhet ännu värre att använda en autonom transaktion eftersom den autonoma transaktionen då inte kan se ändringarna som görs i modertransaktionen, vilket nästan säkert gör att koden beter sig annorlunda än du skulle önska.




  1. Syntaxfel vid användning av avgränsare med Aurora Serverless MySQL 5.6

  2. SET GLOBAL max_allowed_packet fungerar inte

  3. MySQL - två beroende viktade medelvärden i en enda fråga

  4. Släpp en kolumn med en främmande nyckel