PaulMueller
Benutzer
- Beiträge
- 12
Hallo,
ich möchte nach Eingabe eines Datensatzes einen Trigger laufen lassen, der prüft ob ein bestimmter Wert in einer Spalte (Blockorderanzahl) höher als 1 ist, dann soll die entsprechende Zeile nochmal in die Tabelle hinzugefügt werden und zwar so oft wie der Wert in der Spalte.
Ich habe das mit dem Trigger siehe unten konfiguriert, aber er macht nicht das was er soll.
Wenn der entsprechende Wert 1 ist, dann passiert nicht, somit in Ordnung
Wenn der Wert 2 ist passiert auch nichts, und in diesem Fall müssten die Daten in einer neuen Zeile wieder stehen.
bei dem Wert 3 passiert im Prinzip auch nichts, außer dass der Primary Key zwei Werte auslässt. Es findet keine Duplizierung statt.
Ab einem Wert von 4 bekomme ich den Fehler:
Error Code: 1054. Unknown column 'blockorderanzahl' in 'field list'
Der normale Insert befehl, der funktioniert, wenn der Trigger gelöscht wird. Der Primary Key ist die Kauforder_ID, Fremdschlüssel sind kunde_id und produkt_id
INSERT INTO kauforder (order_ID, initial_ID, parent_ID, startzeitpunkt, endzeitpunkt, stornierzeitpunkt, kunde_id, produkt_id, lieferzeitpunkt, preis, menge, blockorder, blockorderanzahl)
VALUES (null,null,null,CURRENT_TIMESTAMP,'2020-01-02 15:00:00',null,(SELECT marktteilnehmer_ID from marktteilnehmer WHERE marktteilnehmername = 'TenneT'),(SELECT produkt_id from produkt WHERE produktname = 'Stunde'),'16:00','15','150','ja','4');
UPDATE kauforder SET order_id = kauforder_id, initial_id= kauforder_id WHERE kauforder_id = LAST_INSERT_id();
Hier der Trigger:
CREATE DEFINER=`root1`@`%` TRIGGER `orderbuch`.`kauforder_AFTER_INSERT` AFTER INSERT ON `kauforder` FOR EACH ROW
BEGIN
DECLARE anzahl integer;
SET anzahl=(SELECT blockorderanzahl FROM kauforder WHERE kauforder_id = LAST_INSERT_id());
IF anzahl>1 THEN
WHILE anzahl <= blockorderanzahl do
INSERT INTO kauforder
(order_ID, initial_ID, parent_ID, startzeitpunkt, endzeitpunkt, stornierzeitpunkt, kunde_id, produkt_id, lieferzeitpunkt, preis, menge, blockorder)
VALUES ((SELECT kauforder_id WHERE kauforder_id = LAST_INSERT_id()),(SELECT kauforder_id WHERE kauforder_id = LAST_INSERT_id()),null,(SELECT startzeitpunkt WHERE kauforder_id = LAST_INSERT_id()),'2020-01-02 15:00:00',null,(SELECT kunde_id from kunde WHERE kunde = 'Mueller'),(SELECT produkt_id from produkt WHERE produktname = 'Stunde'),'16:00','15','150','ja');
END while;
END IF;
END
Ich hoffe ihr könnt mir weiterhelfen.
Danke und Grüße
ich möchte nach Eingabe eines Datensatzes einen Trigger laufen lassen, der prüft ob ein bestimmter Wert in einer Spalte (Blockorderanzahl) höher als 1 ist, dann soll die entsprechende Zeile nochmal in die Tabelle hinzugefügt werden und zwar so oft wie der Wert in der Spalte.
Ich habe das mit dem Trigger siehe unten konfiguriert, aber er macht nicht das was er soll.
Wenn der entsprechende Wert 1 ist, dann passiert nicht, somit in Ordnung
Wenn der Wert 2 ist passiert auch nichts, und in diesem Fall müssten die Daten in einer neuen Zeile wieder stehen.
bei dem Wert 3 passiert im Prinzip auch nichts, außer dass der Primary Key zwei Werte auslässt. Es findet keine Duplizierung statt.
Ab einem Wert von 4 bekomme ich den Fehler:
Error Code: 1054. Unknown column 'blockorderanzahl' in 'field list'
Der normale Insert befehl, der funktioniert, wenn der Trigger gelöscht wird. Der Primary Key ist die Kauforder_ID, Fremdschlüssel sind kunde_id und produkt_id
INSERT INTO kauforder (order_ID, initial_ID, parent_ID, startzeitpunkt, endzeitpunkt, stornierzeitpunkt, kunde_id, produkt_id, lieferzeitpunkt, preis, menge, blockorder, blockorderanzahl)
VALUES (null,null,null,CURRENT_TIMESTAMP,'2020-01-02 15:00:00',null,(SELECT marktteilnehmer_ID from marktteilnehmer WHERE marktteilnehmername = 'TenneT'),(SELECT produkt_id from produkt WHERE produktname = 'Stunde'),'16:00','15','150','ja','4');
UPDATE kauforder SET order_id = kauforder_id, initial_id= kauforder_id WHERE kauforder_id = LAST_INSERT_id();
Hier der Trigger:
CREATE DEFINER=`root1`@`%` TRIGGER `orderbuch`.`kauforder_AFTER_INSERT` AFTER INSERT ON `kauforder` FOR EACH ROW
BEGIN
DECLARE anzahl integer;
SET anzahl=(SELECT blockorderanzahl FROM kauforder WHERE kauforder_id = LAST_INSERT_id());
IF anzahl>1 THEN
WHILE anzahl <= blockorderanzahl do
INSERT INTO kauforder
(order_ID, initial_ID, parent_ID, startzeitpunkt, endzeitpunkt, stornierzeitpunkt, kunde_id, produkt_id, lieferzeitpunkt, preis, menge, blockorder)
VALUES ((SELECT kauforder_id WHERE kauforder_id = LAST_INSERT_id()),(SELECT kauforder_id WHERE kauforder_id = LAST_INSERT_id()),null,(SELECT startzeitpunkt WHERE kauforder_id = LAST_INSERT_id()),'2020-01-02 15:00:00',null,(SELECT kunde_id from kunde WHERE kunde = 'Mueller'),(SELECT produkt_id from produkt WHERE produktname = 'Stunde'),'16:00','15','150','ja');
END while;
END IF;
END
Ich hoffe ihr könnt mir weiterhelfen.
Danke und Grüße