Announcement

Collapse
No announcement yet.

Position per Trigger updaten ?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Position per Trigger updaten ?

    Hallo,

    ich wollte in einer Tabelle ein Feld "position" einfügen, was mir eine beliebige Sortierung der Einträge ermöglicht.

    z.B.
    Table Tennismannschaft.

    tennis(pos, name, eintritt)

    Es gibt nun ein paar Szenarien, in der ein Spieler Positions-mäßig verschoben werden kann.

    Fall 1: Ein neuer Spieler kommt an Platz 3 dabei. Die existierende pos 3 inkl. aller nachfolgenden werden nun um 1 erhöht.

    Fall 2. Löschung eines Spielers
    Fall 3. Verschieben eines Spielers in der Liste

    Ich wollte nun ein Trigger dafür schreiben, der mir bei INSERT, UPDATE und DELETE die nötigen Verschiebeungen erledigt.

    Hier entsteht bei einem normalen Trigger zwangsläufig das "Mutating table" Problem, also ORA-4091.

    Hat hier jemand schon mal was ähnliches realisiert ?

  • #2
    "Mutating tabele" bekommt man nur in Row-Level-Triggern.
    Vermutlich kommst du aber in einem After-Statement-Trigger nicht mehr an die Informationen dran. (bei MS-SQL-Server ginge das)
    Das propblem kann man sich mit folgendem Trick lösen:
    Eine temporaray table mit ON COMMIT DELETE ROWS" anlegen mit Feld wie Primärschlüssel der Ursprungs-Tabelle und evtl. weitere Datenfelder-
    In einem Row-Level-Trigger rettet man sich die Informationen die man braucht in die temporaray table.
    In einem After-Statement-Trigger kann man diese Infos dann benutzen und trozdem die Orginal-Tabelle modifizieren

    Comment


    • #3
      hallo

      um infos von einem row-level-trigger in einen statement-level-trigger zu übertragen bietet sich auch ein pl/sql-package an. ähnlich den static variablen einer java klasse bleiben die werte der package variablen innerhalb einer session bestehen. der row-level-trigger kann also eine pl/sql-tabelle mit werten füllen, die im statement-level-trigger wieder ausgelesen (und gelöscht) und verarbeitet werden können.

      gruss volke

      Comment

      Working...
      X