| From: | udono <udono(at)gmx(dot)net> | 
|---|---|
| To: | "pgsql-de-allgemein(at)postgresql(dot)org" <pgsql-de-allgemein(at)postgresql(dot)org> | 
| Subject: | Trigger und Funktion | 
| Date: | 2007-03-07 22:05:24 | 
| Message-ID: | 45EF3724.1030303@gmx.net | 
| Views: | Whole Thread | Raw Message | Download mbox | Resend email | 
| Thread: | |
| Lists: | pgsql-de-allgemein | 
Hallo Liste,
hab mal wieder ein Problem, das meinen Horizont etwas überschreitet.
In einer OS Buchhaltung mit Postgresanbindung würde ich gerne etwas 
mehr Verantwortung für die Datenintegrität auf die Datenbank übertragen.
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.
Wie aber weiss ich vor der Transaktion, das die Summe der 
Teilbuchungen 0 ergibt?
Mit bspw. SELECT sum(amount) WHERE trans_id = 13 kann ich ja noch 
nicht arbeiten, weil die Transaktion noch nicht commitet wurde und 
ja auch vorher geprüft werden soll.
(Es stehen PL/pgSQL und PL/Perl zur Verfügung)
Vielleicht hat jemand von euch einen Tip?!
Viele Grüße
Udo Spallek
| From | Date | Subject | |
|---|---|---|---|
| Next Message | A. Kretschmer | 2007-03-08 06:17:27 | Re: Trigger und Funktion | 
| Previous Message | A. Kretschmer | 2007-03-06 09:11:58 | Re: Trenner |