Heim >Datenbank >MySQL-Tutorial >Wie aktualisiere ich vorherige und neue Zeilen in einer MySQL-Tabelle mithilfe gespeicherter Prozeduren?
Problem:
In einer Tabelle werden Gebühren für Artikel verfolgt möchten Sie neue Gebührendatensätze einfügen und gleichzeitig das Enddatum vorheriger Datensätze mit demselben procKey aktualisieren, um einen Tag vor dem Startdatum des neuen Datensatzes zu enden.
Erster Ansatz:
Sie haben versucht, einen Trigger mit dem folgenden Code zu erstellen:
CREATE DEFINER=`root`@`%` TRIGGER `im`.`splitBeforeIns` BEFORE INSERT ON `im`.`split` FOR EACH ROW BEGIN SET NEW.tcPercent = (NEW.tcOfficeFee / NEW.globalFee) * 100 , NEW.proPercent = 100 - NEW.tcPercent, NEW.endDate = 20501231; UPDATE im.split set endDate = ADDDATE(NEW.startDate, -1) where procKey = NEW.procKey AND endDate = 20501231; END$$
Dieser Trigger führte jedoch zu folgendem Fehler: „Die Tabelle ‚Split‘ in der gespeicherten Funktion/dem gespeicherten Trigger kann nicht aktualisiert werden, da dies bereits der Fall ist.“ Wird von der Anweisung verwendet, die diese gespeicherte Funktion/diesen gespeicherten Trigger aufgerufen hat >
Um die gewünschte Funktionalität zu erreichen, müssen Sie eine gespeicherte Prozedur anstelle eines Triggers verwenden. Eine gespeicherte Prozedur kann im Rahmen einer einzelnen Transaktion mehrere Vorgänge ausführen, einschließlich des Einfügens in oder Aktualisieren der Tabelle, die Sie ändern möchten.Beispiel für eine gespeicherte Prozedur:
Diese gespeicherte Prozedur kann verwendet werden, um die geteilte Tabelle nach Bedarf zu aktualisieren:
Das obige ist der detaillierte Inhalt vonWie aktualisiere ich vorherige und neue Zeilen in einer MySQL-Tabelle mithilfe gespeicherter Prozeduren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!