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 ?
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!