sql >> Database teknologi >  >> RDS >> Oracle

pragma autonom_transaktion i en trigger

At bruge en autonom transaktion til alt andet end logning, som du ønsker skal bevares, når den overordnede transaktion ruller tilbage, er næsten helt sikkert en fejl. Dette er ikke en god brug af en autonom transaktion.

Hvad sker der for eksempel, hvis jeg opdaterer en række i t1 men min transaktion ruller tilbage. t2 ændringer er allerede foretaget og forpligtet, så de ikke ruller tilbage. Det betyder generelt, at t2 data er nu forkerte. Hele pointen med transaktioner er at sikre, at et sæt ændringer er atomare og enten er fuldstændigt succesfulde eller helt vendt tilbage. Det er næsten aldrig en god idé at tillade kode at være delvist vellykket.

Jeg er hårdt presset for at se, hvad du køber her ved at bruge en autonom transaktion. Du vil ofte se folk forkert bruge autonome transaktioner til ukorrekt at omgå muterende triggerfejl. Men den kode, du sendte, ville ikke generere en muterende triggerfejl, medmindre der var en trigger på rækkeniveau på t2 som også prøvede at opdatere t1 eller en lignende mekanisme, der introducerede en mutationstabel. Hvis det er tilfældet, er det dog generelt endnu værre at bruge en autonom transaktion, fordi den autonome transaktion så ikke kan se ændringerne, der foretages i modertransaktionen, hvilket næsten helt sikkert får koden til at opføre sig anderledes, end du ville ønske.




  1. sammenligne kommaseparerede værdier i sql

  2. MySQL5.6 sidder fast i processen, der forsøger at starte tjenesten

  3. sqlalchemy, filtrer en json-kolonne, der indeholder et array

  4. MySQL INSERT-sætning i to tabeller ved hjælp af AI-værdi fra den ene i den anden