Ich habe eine mysql Stored Procedure, die 1 zurückgibt, wenn sie zwei Updates erfolgreich ausführen kann und alles einfügt und zurückgibt und 0 zurückgibt, wenn nicht. Hier ist, wie es aussieht:Stored Procedure gibt manchmal keinen Wert in node.js zurück
CREATE DEFINER=`barrence`@`%` PROCEDURE `completed_procedure`(IN insubmissionid INT, OUT success INT)
BEGIN
DECLARE inbountyid INT;
DECLARE EXIT HANDLER FOR SQLEXCEPTION ROLLBACK;
DECLARE EXIT HANDLER FOR SQLWARNING ROLLBACK;
START TRANSACTION;
SET success = 0;
SET @inbountyid = (SELECT idbounty FROM submission WHERE idsubmission = insubmissionid);
UPDATE submission SET status='a' WHERE idsubmission = insubmissionid;
IF (SELECT ROW_COUNT() = 1)
THEN UPDATE bounty SET iscomplete=1 WHERE idbounty = @inbountyid;
END IF;
IF (SELECT ROW_COUNT() = 1)
THEN INSERT INTO completion (idperson, idbounty, datecompleted, idsubmission, mediaid, description,
privatestatus, contenttype, totalamount)
SELECT s.idperson, s.idbounty, s.datesubmitted, s.idsubmission,
COALESCE(s.youtubeid, s.contentid) AS mediaidid, b.description, b.privatestatus,
b.contenttype, COALESCE(SUM(amount),0) AS totalamount
FROM submission s
INNER JOIN bounty b on s.idbounty = b.idbounty
INNER JOIN contribution c on s.idbounty = c.idbounty
WHERE s.idsubmission = insubmissionid AND c.ispaid = 1;
END IF;
IF (SELECT ROW_COUNT() = 1)
THEN SET success = 1;
END IF;
IF (success = 0)
THEN ROLLBACK;
END IF;
SELECT success;
COMMIT;
END
Wenn ich diese gespeicherte Prozedur innerhalb von MySQL Workbench nenne es richtig zu funktionieren scheint, die Ausführung alle Updates/Insert und Rückkehr 1 oder 0, wenn nichts anderes. Wenn ich jedoch diese gespeicherte Prozedur auf meinem node.js-Server und console.log das Ergebnis aufrufen, gibt es nur die Erfolgsvariable zurück, wenn es 1 ist, aber gibt es nicht zurück, wenn 0. So rufe ich es auf:
db.acceptSubmission(submissionId, function(result) {
console.log(result);
}
exports.acceptSubmission = function(submissionId, callback) {
var sql = "CALL completed_procedure(?, @success)";
var inserts = [submissionId];
sql = mysql.format(sql, inserts);
console.log("Running Admin Accept Submission Procedure: " + sql);
dbcommon.executeStatement(pool, sql, callback);
};
Ergebnis sieht wie folgt aus, wenn erfolgreich:
[ [ { success: 1 } ],
{ fieldCount: 0,
affectedRows: 0,
insertId: 0,
serverStatus: 2,
warningCount: 0,
message: '',
protocol41: true,
changedRows: 0 } ]
Und wenn es nicht:
{ fieldCount: 0,
affectedRows: 0,
insertId: 0,
serverStatus: 2,
warningCount: 0,
message: '',
protocol41: true,
changedRows: 0 }
ich bin völlig ratlos. Was ist los?
Verwenden Sie einen Mysql-Treiber eines Drittanbieters? Wenn ja, welcher? – scottjustin5000
@ scottjustin5000 https://www.npmjs.com/package/mysql – Mitchell