AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Trigger rekursiv

Ein Thema von stahli · begonnen am 19. Jul 2009 · letzter Beitrag vom 29. Jul 2009
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von stahli
stahli

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

Re: Trigger rekursiv

  Alt 29. Jul 2009, 12: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
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:57 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz