Habe keine Ahnung von DB2, aber meiner Meinung nach machst du da gehörig was falsch, oder willst was erreichen was mir unverständlich ist....
Also ich gehe gleich aufs zweite Beispiel ein. Angenommen die Tabelle sieht mal gerade so aus (Inhaltlich):
Code:
.___________________________.
| id | stueckzahl | preis |
+----+------------+---------+
| 1 | 100 | 100.00 |
| 2 | 230 | 20.00 |
| 3 | 10 | 5000.00 |
'----+------------+---------'
Dann kommt ein Update auf die Stückzahlen sagen wir mal vom 2.:
Code:
UPDATE waren
SET stueckzahl = 600
WHERE id = 2;
Dann sieht das so aus:
Code:
.___________________________.
| id | stueckzahl | preis |
+----+------------+---------+
| 1 | 100 | 100.00 |
| 2 | 600 | 14.00 |
| 3 | 10 | 5000.00 |
'----+------------+---------'
So weit so gut, das wolltest du ja.
Aber jetzt kommt wieder eine Aktualisierung, z. B. auf den ersten:
Code:
UPDATE waren
SET stueckzahl = 600
WHERE id = 1;
Und deine Tabelle wird so aussehen:
Code:
.___________________________.
| id | stueckzahl | preis |
+----+------------+---------+
| 1 | 600 | 70.00 |
| 2 | 600 | 9.80 |
| 3 | 10 | 5000.00 |
'----+------------+---------'
Na, fällsts auf? der zweite hat genau so viele Stück wie der erste und wird natürlich auch billiger, weil du immer die ganze Tabelle in deinem Trigger UPDATEst.
Und wenn ich jetzt noch mal ein UPDATE auf den 2. mache:
Code:
UPDATE waren
SET stueckzahl = 601
WHERE id = 2;
Dann wird der gleich noch mal billiger (die anderen in dem Fall allerdings nicht weil die keine 601 Stück habe):
Code:
.___________________________.
| id | stueckzahl | preis |
+----+------------+---------+
| 1 | 600 | 70.00 |
| 2 | 601 | 6.86 |
| 3 | 10 | 5000.00 |
'----+------------+---------'
Und ich weiss ja nicht ob das alles so gewollt ist? Wenn ja dann sag mal welcher Laden das ist, vielleicht bestell ich demnächst recht viel bei euch...
Oder erklär mir den Sinn dahinter ich verstehs jeden Fall nicht.
Aber Spass bei Seite entweder du machst das UPDATE in deinem Trigger vom Primärschlüssel des geänderten Datensatzes abhängig (ich hab hier mal einfach `id` angenommen, weiss nicht wie das bei dir aussieht). Oder aber, ich hoffe das geht unter DB2 auch, mach das ganze über eine Zuweisung an die neue Spalte, ein zeilenweise Trigger ists ja eh schon...
Ich versuchs mal an Hand deines Beispiels zu erraten wie das aussehen könnte in DB2-Syntax:
Code:
CREATE TRIGGER waren_update
AFTER UPDATE OF stueckzahl ON waren
REFERENCING OLD AS alt
NEW AS neu
FOR EACH ROW
MODE DB2SQL
IF alt.stueckzahl <= 500
AND neu.stueckzahl > 500 THEN
neu.preis := alt.preis * .7;
END IF;
Die Bedingung des IFs kannste wenn dus schicker findest oder es vielleicht performancetechnisch was bringt auch noch ganz ins WHEN schreiben:
Code:
CREATE TRIGGER waren_update
AFTER UPDATE OF stueckzahl ON waren
REFERENCING OLD AS alt
NEW AS neu
FOR EACH ROW
MODE DB2SQL
WHEN (alt.stueckzahl <= 500
AND neu.stueckzahl > 500)
neu.preis := alt.preis * .7;
Aber auf jeden Fall sollte das ganze, wenn ich den Sinn richtig verstanden habe nur dann passieren wenn die Stückzahl zum ersten mal auf ein Zahl die grösser als 500 ist steigt und nicht dauernd wenn sie auf irgendwas grösser 500 geändert wird.
Ah ja, wie sieht das ganze eigentlich vice versa aus? Ich meine was wenn die Stückzahl von was grösser 500 wieder auf was kleiner gleich 500 geht, soll dann der Preis wieder mehr werden?
Lesezeichen