Maison >base de données >tutoriel mysql >Comment mettre à jour les lignes précédentes et nouvelles dans une table MySQL à l'aide de procédures stockées ?

Comment mettre à jour les lignes précédentes et nouvelles dans une table MySQL à l'aide de procédures stockées ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-29 13:51:29376parcourir

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

Modification des lignes précédentes et nouvelles dans une table MySQL à l'aide de déclencheurs

Problème :

Dans une table, frais de suivi des articles , vous souhaitez insérer de nouveaux enregistrements de frais tout en mettant à jour simultanément la date de fin des enregistrements précédents avec la même procKey pour terminer un jour avant la date de début du nouvel enregistrement.

Approche initiale :

Vous avez tenté de créer un déclencheur avec le code suivant :

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$$

Cependant, ce déclencheur a généré l'erreur : "Impossible de mettre à jour la table 'split' dans la fonction/le déclencheur stocké car il est déjà utilisé par l'instruction qui a invoqué cette fonction/déclencheur stocké. >

Pour obtenir la fonctionnalité souhaitée, vous devez utiliser une procédure stockée au lieu d'un déclencheur. Une procédure stockée peut effectuer plusieurs opérations dans le cadre d'une seule transaction, notamment l'insertion ou la mise à jour de la table que vous souhaitez modifier.

Exemple de procédure stockée :

Cette procédure stockée peut être utilisée pour mettre à jour la table fractionnée comme vous le souhaitez :

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn