Thema: Delphi Trigger rekursiv

Einzelnen Beitrag anzeigen

Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#11

Re: Trigger rekursiv

  Alt 29. Jul 2009, 11:42
Hallo nochmal,

das Problem mit einem rekursiven Aufruf von Triggern habe ich jetzt noch einmal in einem anderen Zusammenhang erhalten.
Das Problem: Bei allen Änderungen in bestimmten Tabellen müssen nachträglich diverse Anpassungen in diesen und anderen Tabellen vorgenommen werden.

Die Kontrolle über die notwendigen Änderungen möchte ich aber nicht allein der Anwendung übertragen, da dies sehr aufwändig wäre und evtl. auch mal Änderungen "unbemekt durchrutschen" könnten...

Ich möchte daher innerhalb der Trigger erkennen, welche "Korrekturen ggf. erforderlich" sind, diese aber nicht innerhalb der Trigger (durch Prozedur-Aufrufe) direkt ausführen.

Daher habe ich jetzt folgende Lösung eingesetzt, die auch sehr gut funktioniert.

Es gibt eine neue
- Tabelle "CallProcedures" mit den Feldern Id(autoinc), Name(varchar), Value1(integer)
und
- Procedure "MemberCallProcedure(N, V).

Die Procedure MemberCallProcedure kann von Triggern benutzt werden, um in der o.g. Tabelle "Aufträge" einzutragen, die bei nächster Gelegenheit abgearbeitet werden müssen.
Diese "Aufträge" bestehen aus dem Prozedurnamen und einem ID-Wert.
Für die Eintragung des "Auftrages" wird "update or insert into" genutzt, so dass ein Auftrag nicht mehrfach in der Tabelle steht.

Der Aufruf ein einem Trigger sieht dann etwa so aus:
execute procedure MEMBERCALLPROCEDURE('CALCGROUP', old.ID);
execute procedure MEMBERCALLPROCEDURE('CALCGROUP', new.ID);

Die Anwendung sieht dann regelmäßig nach, ob entsprechende Aufträge vorliegen und ruft dann die gleichnamigen Prozeduren mit dem dazugehörigen Parameter auf.
Dass sich jetzt evtl. verschiedene Trigger wieder gegenseitig aufrufen ist unerheblich, da schon entsprechende Einträge in der "Auftragstabelle" existieren und somit nicht nocheinmal eingetragen werden.

Nach Erledigung der Aufträge wird die Tabelle geleert und die Trigger können neue Aufträge eintragen.


Das funktioniert soweit ganz gut. Vielleicht nützt es ja mal jemandem...

Gruß
Stahli
  Mit Zitat antworten Zitat