İki tabloyu güncelleştiren ve sonra üçüncü bir tabloya bir satır ekleyen bir saklı yordamım var. (Ve benim anlayış için, üçü tamamlanamazsa güncellemeleri geri gönderir veya ekler.) Her neyse, bu iki prosedürü başarıyla tamamlayıp bitirip son vermediğine bakılmaksızın, bu prosedürü her çalıştırdığımda, her zaman "başarılı" olacak ve yanlış döndür. Sunucu tarafında doğru hata kontrolünü yapabilmem için eğer iki güncellemeyi başarıyla tamamlarsa ve bir ekleme ve yanlışsa, bir değer (muhtemelen doğru) döndürmek için ona ihtiyacım var.Mysql saklı yordamının başarıyla yürütüldüğü nasıl söylenir
CREATE DEFINER=`db1`@`%` PROCEDURE `completed_procedure`(IN insubmissionid INT)
BEGIN
DECLARE ingregid INT;
DECLARE EXIT HANDLER FOR SQLEXCEPTION ROLLBACK;
DECLARE EXIT HANDLER FOR SQLWARNING ROLLBACK;
START TRANSACTION;
SET @ingregid = (SELECT idgreg FROM submission WHERE idsubmission = insubmissionid);
UPDATE submission SET status='a' WHERE idsubmission = insubmissionid;
UPDATE greg SET iscomplete=1 WHERE idgreg = @ingregid;
INSERT INTO completion (idperson, idgreg, datecompleted, idsubmission, mediaid, description,
privatestatus, contenttype, totalamount)
SELECT s.idperson, s.idgreg, s.datesubmitted, s.idsubmission,
COALESCE(s.youtubeid, s.contentid) AS mediaidid, g.description, g.privatestatus,
g.contenttype, COALESCE(SUM(amount),0) AS totalamount
FROM submission s
INNER JOIN greg g on s.idgreg = g.idgreg
INNER JOIN contribution c on s.idgreg = c.idgreg
WHERE s.idsubmission = insubmissionid AND c.ispaid = 1;
COMMIT;
END
bu konuda gitmek için en iyi yolu nedir: İşte
işlemdir?
Herhangi bir değişiklik yapılıp yapılmadığını öğrenmek için bir veri değiştirme sorgusundan sonra 'SELECT ROW_COUNT()' kullanabilirsiniz. – Barmar
@Barmar Tüm güncellemeler ve ekleme başarılı olursa, bunun başarısı = 1 için nasıl çalışacağına dair bir örnek gösterebilir misiniz? – Mitchell
Bununla ne demek yanlış döndürür? Prosedürler hiçbir şey döndürmez, yalnızca işlevlerin dönüş değeri vardır. – Barmar