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

Oracle triggery - problém s mutujícími tabulkami

Jak jste si všimli, bude obtížné odpovědět na vaše obchodní požadavky pomocí spouštěčů. Důvodem je, že Oracle může aktualizovat/vložit tabulky s více než jedním vláknem současně pro jeden dotaz (paralelní DML). To znamená, že vaše relace se nemůže dotazovat na tabulku, kterou aktualizuje během aktualizace .

Pokud to opravdu chcete udělat pomocí spouštěčů, budete muset postupovat podle názvu druh logiky zobrazený v tomto článku od Toma Kyte . Jak vidíte, není to nic jednoduchého.

Existuje ještě jedna, jednodušší, elegantnější, snadněji udržovatelná metoda:používat postupy. Zrušte právo na aktualizaci/vložení uživateli (uživatelům) aplikace a napište sadu procedur, které aplikaci umožní aktualizovat sloupce stavu.

Tyto postupy by uzamkly nadřazený řádek (aby se zabránilo více relacím upravujícím stejnou sadu řádků) a aplikovaly by vaši obchodní logiku účinným, čitelným a snadno udržovatelným způsobem.



  1. SQL:Vyberte název dynamického sloupce na základě proměnné

  2. Jak převedu tento přístupový dotaz na dotaz mySQL

  3. Vezmete předposlední řádek pouze jedním výběrem v SQL Server?

  4. postgresql - počet (žádné hodnoty null) každého sloupce v tabulce