[SQL] Prozeduren erstellen

Gast #6801869
Lesenswert?

Ich habe hier eine MySQL Datenbank. In dieser Datenbank liegen meine 
Kunden- und Auftragsdaten.

Aktuell mache ich das erstellen des Versand- und Rechnungsdatums noch 
händisch, was aber ziemlich nervig ist. Da ich sowieso den Versand mit 
nur einem Klick bestätige, würde ich gerne das aktuelle Datum direkt mit 
in die DB schreiben sobald der boolesche Wert von "verschickt" auf wahr 
geht.

Da kam mir die Idee mit einer Prozedur in der Datenbank gerade recht.
Ist es damit möglich ein Trigger genau in diesem Fall zu setzen und das 
Datum automatisch eintragen zu lassen? Also: Datensatz aktualisiert -> 
wenn "verschickt" von false auf true wechselt -> aktuelles Datum in 
"VersandDatum" eintragen?

Vielen lieben Dank für eure Hilfe :-D
Gast #6801877
Lesenswert?

Da reicht ein Trigger...
1
db> delimiter //
2
db> CREATE TRIGGER trgSetVersanddatum BEFORE UPDATE ON bestellungen
3
    FOR EACH ROW
4
       BEGIN
5
           IF NEW.shipped = 1 THEN
6
               SET NEW.VersandDatum = now();
7
           END IF;
8
       END;//
9
db> delimiter ;
Gast #6801887
Lesenswert?

Warum wird vorher das Trennzeichen geändert?
Braucht man das wenn man auf der Konsole in mysql eingeloggt ist und
mehrzeilige Anweisungen eintippt oder braucht man das generell bei 
stproc oder triggern?
Gast #6801914
Lesenswert?

Vielen Dank das war genau das was ich brauchte :-D

vom Autopoliturverkäufer @ Kirmes zum Rekrutah schrieb im Beitrag 
#6801887:
> Warum wird vorher das Trennzeichen geändert?
> Braucht man das wenn man auf der Konsole in mysql eingeloggt ist und
> mehrzeilige Anweisungen eintippt oder braucht man das generell bei
> stproc oder triggern?

Weil der Trigger aus mehreren Statements besteht, die müssen gebunden 
werden. So das die normalen Statement-Begrenzer nicht mehr gelten. 
Welchen Begrenzer man da wählt ist relativ unerheblich, darf halt nur 
nicht im Statement selbst vorkommen.
Gast #6802353
Lesenswert?

Draco schrieb:
> Aktuell mache ich das erstellen des Versand- und Rechnungsdatums noch
> händisch, was aber ziemlich nervig ist. Da ich sowieso den Versand mit
> nur einem Klick bestätige, würde ich gerne das aktuelle Datum direkt mit
> in die DB schreiben sobald der boolesche Wert von "verschickt" auf wahr
> geht.

Kann man so machen, klingt aber nach Käse.

Bestimmt gibt es (mindestens) zwei Felder, einmal das Versand-Flag, und 
dann noch ein Versand-Datum, dass vorher NULL ist.

Solche Konstrukte ebnen den Weg zur Hölle, das fliegt irgendwann in die 
Luft.

Einfach eine zweite Tabelle, zwei Spalten. Die erste Spalte Foreign-Key 
auf die Bestellung, die zweite Spalte Versanddatum mit Default-Wert 
aktuelles Datum.

Dann anstatt ein Bool-Flag zu setzen für den Versand, einfach ein Insert 
in die Versand-Tabelle mit dem Key der Bestellung. Da aktuelle Datum 
kommt dann automatisch rein.

Keine NULLs, keine Trigger, ordentliches Datenmodell, etc.

Summa summarum: Keine grauen Haare.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren