Re: Trigger und Funktion

From: Jürgen E(dot) Fischer <fischer(at)linux-buechse(dot)de>
To: pgsql-de-allgemein(at)postgresql(dot)org
Subject: Re: Trigger und Funktion
Date: 2007-03-08 06:46:05
Message-ID: 20070308064605.GA19181@linux-buechse.de
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-de-allgemein

Moin Udo,

On Wed, Mar 07, 2007 at 23:05:24 +0100, udono wrote:
> Ich habe eine Tabelle acc_trans, die alle im System gebuchten
> Beträge beinhaltet. Jeder Buchungssatz besteht aus verschiedenen
> Buchungen mit identischer id und verschiedenen Beträgen.
>
> Tabelle acc_trans:
>
> trans_id | amount | ...
> ----------+------------+----
> 13 | 100.00000 | ...
> 13 | -107.00000 | ...
> 13 | 7.00000 | ...
> 13 | 107.00000 | ...
> 13 | -107.00000 | ...
> 14 | 100.00000 | ...
> 14 | 7.00000 | ...
> 14 | -107.00000 | ...
> 14 | 107.00000 | ...
> 14 | -107.00000 | ...
> ... | ... | ...
>
> Die Buchungssätze werden mittels Transaktionen in die Tabelle
> acc_trans gebracht.
>
> Es soll die Regel gelten, dass nur Buchungssätze in die Tabelle
> acc_trans dürfen (UPDATE, INSERT), deren Summe der Einzelbeträge
> (amount) aller Teilbuchungen (trans_id) 0 ergibt.

Dazu gibt es doch bestimmt auch eine überordnete Tabelle trans in der
trans_id primary key ist. Da würde ich ansetzen.

Du könntest dort ein Feld hinzufügen, dass aussagt, ob der Buchungssatz
abgeschlossen/gültig ist oder nicht.

Du legst also den Buchungssatz in trans initial mit false in dem Feld
an, fügst dann Deine Sätze in acc_trans ein und setzt das Feld danach
per UPDATE auf true.

trans hat einen Trigger ON UPDATE, der bei der Transition von
false auf true überprüft, ob die Summe 0 ist und bei <>0 das Update
abbricht.

Außerdem hat acc_trans noch einen Trigger, der UPDATE und DELETE nur
zuläßt, wenn in trans false steht. Vor Änderungen muss dann also trans
immer false gesetzt werden.

In der Applikation dürftest Du dann nur noch die gültigen Buchungssätze
betrachten.

Nicht wirklich elegant, sollte aber funktionieren.

Jürgen

In response to

Responses

Browse pgsql-de-allgemein by date

  From Date Subject
Next Message Thomas Markus 2007-03-08 06:53:49 Re: Trigger und Funktion
Previous Message A. Kretschmer 2007-03-08 06:17:27 Re: Trigger und Funktion