sql >> Database >  >> RDS >> PostgreSQL

Hoe schrijf je een verwijderregel voor een weergave?

Wat je ziet met het regelprobleem is dat het regelsysteem de gegevens niet atomair verwerkt. De eerste verwijdering wordt uitgevoerd ongeacht de volgorde van de twee instructies in de DO INSTEAD-regel. Het tweede statement wordt nooit uitgevoerd, omdat de rij waar OLD.id naar verwijst uit de view is verwijderd. Je zou een LEFT JOIN kunnen gebruiken, maar dat zal je niet helpen vanwege het voorbeeldtabelontwerp (het kan werken op je eigenlijke databaseschema).

Het fundamentele probleem, zoals ik het zie, is dat je het regelsysteem behandelt alsof het een trigger was.

Uw beste optie is om externe sleutels te gebruiken en ON DELETE CASCADE in plaats van regels. Met hen zou je voorbeeldschema ook werken:je hoeft alleen maar te verwijderen voor de bovenliggende tabel om alle kinderen te verwijderen.



  1. Oracle In-Memory kosten

  2. SQL, hoe gegevens bij te werken

  3. Meerdere waarden retourneren vanuit Oracle Function

  4. FORALL-instructie met VALUES-OF Bound-clausule in Oracle Database