Skip site navigation (1) Skip section navigation (2)

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 (view raw or flat)
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

pgsql-de-allgemein by date

Next:From: Thomas MarkusDate: 2007-03-08 06:53:49
Subject: Re: Trigger und Funktion
Previous:From: A. KretschmerDate: 2007-03-08 06:17:27
Subject: Re: Trigger und Funktion

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group