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

Oracle-triggere - problem med muterende tabeller

Som du har bemærket, vil det være svært at besvare dine forretningskrav med triggere. Årsagen er, at Oracle kan opdater/indsæt tabellerne med mere end én tråd på samme tid for en enkelt forespørgsel (parallel DML). Dette indebærer, at din session ikke kan forespørge i den tabel, den opdaterer mens opdateringen finder sted .

Hvis du virkelig vil gøre dette med triggere, skal du følge en slags logik vist i denne artikel af Tom Kyte . Som du kan se, er det ikke noget simpelt.

Der er en anden, enklere, mere elegant, lettere at vedligeholde metode:brug procedurer. Tilbagekald retten til at opdatere/indsætte til brugeren/brugerne af applikationen, og skriv et sæt procedurer, der tillader applikationen at opdatere statuskolonnerne.

Disse procedurer ville holde en lås på den overordnede række (for at forhindre flere sessioner for at ændre det samme sæt rækker) og ville anvende din forretningslogik på en effektiv, læsbar og let vedligeholdelig måde.



  1. Hvordan skriver man en MYSQL-forespørgsel, der returnerer børn indlejret under forældre?

  2. Hvordan returnerer jeg en jsonb-array og en række objekter fra mine data?

  3. Ændring af MySQL-tidszone?

  4. Tabelnavnmønster kan ikke være NULL eller tomt i java