sql >> Databasteknik >  >> RDS >> Oracle

Hur man anropar en procedur som använder samma tabell i efter trigger

Du kan inte.

En normal utlösare på radnivå kan inte fråga tabellen som utlösaren är definierad på eftersom det skulle skapa ett muterande tabellundantag. Jag antar att det är därför du har deklarerat din trigger för att använda en autonom transaktion (en autonom transaktion för allt annat än beständig loggning är nästan säkert ett fel). Om du gör det kan dock din utlösare inte se de oengagerade ändringarna som gjorts av den utlösande transaktionen. Det är problemet du stöter på nu.

Ett alternativ skulle vara att använda en sammansatt trigger . Du skulle deklarera en samling av test_table.type_%type , skulle du lägga till värdena som ändras till den här samlingen i radnivådelen av din trigger, och sedan skulle du iterera över elementen i samlingen i eftersatsdelen av din trigger. En utlösare på uttalandenivå tillåts fråga tabellen där utlösaren är definierad så att du kan anropa din procedur från eftersatsdelen av din sammansatta utlösare.



  1. Långsam fråga i Java av JDBC men inte i andra system (TOAD)

  2. Är detta en säker metod för att infoga formulärdata i en MySQL-databas?

  3. Rails 3.1 - Pushing to Heroku - Fel vid installation av postgres-adapter?

  4. Varför commit orsakar inte dödläge