Heim >Datenbank >MySQL-Tutorial >Wie aktualisiere ich vorherige und neue Zeilen in einer MySQL-Tabelle mithilfe gespeicherter Prozeduren?

Wie aktualisiere ich vorherige und neue Zeilen in einer MySQL-Tabelle mithilfe gespeicherter Prozeduren?

Susan Sarandon
Susan SarandonOriginal
2024-10-29 13:51:29322Durchsuche

How to Update Previous and New Rows in a MySQL Table Using Stored Procedures?

Vorherige und neue Zeilen in einer MySQL-Tabelle mithilfe von Triggern ändern

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn