Ich habe eine gespeicherte Prozedur, die zwei Tabellen aktualisiert und fügt dann eine Zeile in eine dritte Tabelle ein. (Und nach meinem Verständnis, rollt die Updates oder einfügen, wenn alle drei nicht getan werden können) Immer, wenn ich diese Prozedur ausführen, unabhängig davon, ob es erfolgreich ausgeführt wird die beiden Updates und einfügen oder nicht, wird es immer "erfolgreich" und falsch zurückgeben. Ich brauche es, um einen Wert (wahrscheinlich wahr) zurückzugeben, wenn es alle zwei Aktualisierungen erfolgreich durchführt, und eins fügt ein und falsch, wenn es nicht tut, kann ich die korrekte Fehlerüberprüfung auf der Serverseite tun. HierWie kann ich feststellen, ob mysql gespeicherte Prozedur erfolgreich ausgeführt wurde
ist das Verfahren:
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
Was ist der beste Weg, um dies zu realisieren?
Sie können 'SELECT ROW_COUNT()' nach einer Datenmodifikationsabfrage verwenden, um herauszufinden, ob Änderungen vorgenommen wurden. – Barmar
@Barmar Können Sie mir bitte ein Beispiel zeigen, wie dies funktionieren würde, um Erfolg = 1 zurückzugeben, wenn alle Updates und Einfügen erfolgreich sind? – Mitchell
Was meinst du damit false zurück? Prozeduren geben nichts zurück, nur Funktionen haben einen Rückgabewert. – Barmar