Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi idee für trigger gesucht (https://www.delphipraxis.net/20741-idee-fuer-trigger-gesucht.html)

Nightfly 22. Apr 2004 12:20


idee für trigger gesucht
 
Es geht um Firebird 1.5, und folgende Tabelle

[sql]CREATE TABLE PLANUNG (
BEREICH INTEGER NOT NULL,
JAN NUMERIC(9,2),
FEB NUMERIC(9,2));

wenn jetzt ein wert geändert wird, soll wiefolgt aufaddiert werden:
Für jeden Bereich lässt sich mit hilfe einer zweiten tabelle eine Zielzeile nachschlagen, und alle Zeilen sollen dann in diese Zielzeile aufaddiert werden.

Beispiel:

Bereich|jan|feb
100 |10 |10
101 |5 |5
102 |5 |5

101 und 102 haben also die zielspalte 100

wenn jetzt der wert in zeile 102 für februar auf 10 geändert wird, soll der wert für februar in zeile 100 demzufolge auf 15 geändert werden (alle zeilen die als zielzeile die 100 haben aufaddiert)

Bin nicht so sicher in SQL Language und finde keinen richtigen ansatz :(

Robert_G 22. Apr 2004 13:22

Re: idee für trigger gesucht
 
Das wäre nicht sehr gut :?

Nach 2 mal speichern wäre es dann 25, obwohl das in keinem Zusamhang mit den Daten stehen würde
Berechnete Felder werden niemals (gar nicht, nüscht, nada, niente,...) in der DB gespeichert, sondern immer nur beim Abfragen errechnet!
Willst du also wissen wieviele XYZ zur der ID vorhanden sind, brauchst du eine Abfrage, die das ganze aufsummiert.

Nightfly 22. Apr 2004 13:29

Re: idee für trigger gesucht
 
Hmmm..eigentlich hast du ja recht....aber ich hätt'S trotzdem gern so ;-)
Ich könnte ja die Summenzeile jedesmal löschen und als neu berechneten Datensatz einfügen,dann wär das mit der 25 geklärt.

Der trigger soll auch nich after insert laufen,sondern after update,denn wenn ein datensatz eingefügt wird sind jan..dez IMMER 0

Ne generelle Frage: wie kann ich mit einem Trigger,wenn sich eine Zeile ändert,eine andere in der gleichen Tabelle manipulieren...

Lemmy 22. Apr 2004 15:33

Re: idee für trigger gesucht
 
Hi,

Zitat:

Zitat von Nightfly
Hmmm..eigentlich hast du ja recht....aber ich hätt'S trotzdem gern so ;-)

schön für Dich: Dennoch lege ich noch einen drauf: Sobald mehrere leute auf die Datenbank zugreifen und zufällig gleichzeitig einen Datensatz für die 100er Reihe einfügen oder bearbeiten wird nur einer gespeichert werden - alle anderen werden einen Deadlock-Fehler auf dem Bildschirm sehen, weil alle auf einen bestimmten Datensatz zugreifen und ändern wollen! Man kann das zwar über eine Hilfstabelle regeln, d.h. wenn der eigentlich zu ändernder Datensatz gesperrt ist, dann wird in die Hilfstabelle ein temporärer Eintrag gemacht, bringt aber wieder nen erhöhten Aufwand bei der Abfrage mit sich. Da muss dann nämlich nachgeschaut werden, ob in dieser Hilfstabelle Einträge drin stehen.

Es macht also schlicht keinen Sinn (wie schon gesagt wurde) berechnete WErte in einer Datenbank zu speichern.

Zudem fällt mir gerade ein: Ich denke Dein Wunsch alles in einer Tabelle zu regeln wird nicht gehen, wenn Du auch nen Update-Trigger dafür verwenden willst. Denn sobald Du den Wert für 100 per Update ändern willst, wird der feuern und einen Wert ändern wollen, was dazu führt, dass der Update-Trigger wieder feuert...., d.h. Du wirst innerhalb kürzester Zeit Deinen Server lahmlegen.... Wäre aber mal interessant zu testen, was dann passiert....

Grüße
Lemmy

P.S.: Noch was: Wenn Du den Datensazt jedesmal löschen willst kannst Du doch gleich hergehen und die Abfrage, die Du für die Aktualisierung der Spalte benötigst auch gleich zur Abfrage verwenden. Vorteil: Der Wert wird nur noch dann berechnet, sobald er benötigt wird und Du brauchst nicht unbedingt eine Konstruktion die (zumindest aus meiner Sicht) keinen Sinn ergibt! Von der Tatsache mal abgesehen, dass bei umfangreichen Arbeiten deine Datenbankdatei sehr schnell sehr groß werden wird (dauerndes delete und insert)

Grüße
Lemmy


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:50 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