💡Programmierung - Aufgaben (optional)
Diese Aufgaben basieren auf der Datenbank, die für die Aufgaben zu Transaktionen aufgebaut wurde.
Basis: Datenbank "Kontoverwaltung" aus Transaktionen - Aufgaben
Erstelle eine Prozedur für Sofort-Buchungen (PROCEDURE & TRANSACTION)
Erstelle eine Prozedur
Account_Transfer
, welche als Parameter 2 Kontonummern (@FromAccount
,@ToAccount
), den Betrag, die Währung und eine Bemerkung akzeptiert. In einer Transaktion sollen 2 INSERTs und 2 UPDATEs ausgeführt werden: Je Konto ein INTERT auf die TabellePosting
und ein UPDATE auf die TabelleAccount
.Teste die Prozedur mit
EXEC Account_Transfer <Argumente...>
. und prüfe die Einträge in der TabellePosting
und Kontostände inAccount
vor und nachher.
Kontostände bei Buchungen automatisch aktualisieren (TRIGGER)
Erstelle einen
TRIGGER
Tr_Posting_Insert
für jedesINSERT
in die TabellePosting
, welcher automatisch den neuen Kontostand für das Konto ausINSERT
berechnet und aktualisiert. Die obigenUPDATE
-Befehle werden also in denTRIGGER
verschoben und in der Transaktion werden nur noch die zweiINSERT
s (Buchungs-Datensätze) ausgeführt.Teste wieder mit
EXEC Account_Transfer 1, 2, 10, 'CHF', 'Otto bezahlt für Noras Zeug';
Konto-Überziehung verhindern (FUNCTION & TRIGGER)
Erstelle eine Funktion
, welche als Argument eine Konto-ID und einen Betrag akzeptiert, wenn der Betrag < 0 ist prüft, ob der Kontostand das her gibt (max. 500.- darf man überziehen) und wenn jaIs_Posting_Allowedtrue
zurück gibt, sonstfalse
.Erstelle einen neuen TRIGGER, der mit einem
IF
die Funktion
nutzt und entsprechend die UPDATEs der Konten ausführt ODER einIs_Posting_AllowedROLLBACK
der ganzen Transaktion durchführt. Hier ist ein Beispiel, welches dich unterstützen kann. StattIF EXISTS (...)
erfolgt dann dein Funktionsaufruf.Teste nun wieder und vergleiche vor und nachher die Kontostände und die Tabelle
Posting
.Optional kannst du im TRIGGER noch eine Fehlermeldung ausgeben und / oder einen Log-Eintrag machen.
Ermögliche Buchungsaufträge mit Ausführungsdatum (PROCEDURE)
Erweitere die Prozedur mit einem Buchungsdatum. Die erstellten Buchungsdatensätze sollen nun das künftige Datum und dem Status "Pending" erhalten.
Erstelle eine neue Prozedur
Process_Pending_Postings
(ohne Argumente), welche alle Buchungen mit Status "Pending" prüft, ob das Buchungsdatum >= dem aktuelle Datum ist und für diese Buchungen den Kontostand anpasst und den Status auf "OK" setzt.Teste die neue Prozedur ebenfalls mit
EXEC Process_Pending_Postings
.
Last updated
Was this helpful?