„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Warum können meine gespeicherten MySQL-Prozeduren keine Transaktionen erfolgreich ausführen?

Warum können meine gespeicherten MySQL-Prozeduren keine Transaktionen erfolgreich ausführen?

Veröffentlicht am 18.11.2024
Durchsuche:792

Why Do My MySQL Stored Procedures Fail to Execute Transactions Successfully?

Lösen von Transaktionsproblemen in gespeicherten MySQL-Prozeduren

Beim Versuch, Transaktionen innerhalb einer gespeicherten MySQL-Prozedur zu implementieren, können Entwickler auf unerwartete Fehler stoßen. In diesem Artikel werden die Syntax- und logischen Fehler untersucht, die die erfolgreiche Ausführung transaktionaler gespeicherter Prozeduren verhindern können.

Der Fall: Eine erfolglose Transaktion

Ein Entwickler stößt auf ein Problem, wenn Versuch, Transaktionen in einer gespeicherten Prozedur zu implementieren. Obwohl die MySQL-Dokumentation befolgt wird, schlägt die erfolgreiche Ausführung des Verfahrens fehl und führt dazu, dass die Änderungen nicht gespeichert werden können. Bei näherer Betrachtung scheint der Code syntaktisch korrekt zu sein.

Analyse des Codes

Der bereitgestellte Codeausschnitt lautet wie folgt:

BEGIN

DECLARE poid INT;

DECLARE EXIT HANDLER FOR SQLEXCEPTION SQLWARNING
BEGIN
    ROLLBACK;
END

START TRANSACTION;

    -- ADD option 5
    INSERT INTO product_option(product_id,option_id,required) VALUES(insertedProductID,5,0);
    SET poid = (SELECT LAST_INSERT_ID());
    INSERT INTO product_option_value(product_option_id,product_id,option_id,option_value_id,quantity,subtract,price,price_prefix,points,points_prefix,weight,weight_prefix) VALUES(poid,insertedProductID,5,50,0,0,4.99,' ',0,' ',0,' ');

    -- ADD option 12
    INSERT INTO product_option(product_id,option_id,required) VALUES(insertedProductID,12,1);

    -- ADD option 13
    INSERT INTO product_option(product_id,option_id,required) VALUES(insertedProductID,13,0);

COMMIT;

END

Identifizieren der Fehler

Bei genauer Betrachtung werden zwei Syntaxfehler identifiziert:

  1. Fehlende Kommas in Exit-Handler:

    • In der EXIT HANDLER-Deklaration sollten die Bedingungen durch Kommas getrennt werden.
  2. Fehlendes Semikolon:

    • Der END-Anweisung des EXIT HANDLER fehlt ein abschließendes Semikolon.

Der korrigierte Code

Der korrigierte Code lautet wie folgt:

BEGIN

DECLARE poid INT;

DECLARE EXIT HANDLER FOR SQLEXCEPTION, SQLWARNING
BEGIN
    ROLLBACK;
END;

START TRANSACTION;

    -- ADD option 5
    INSERT INTO product_option(product_id,option_id,required) VALUES(insertedProductID,5,0);
    SET poid = (SELECT LAST_INSERT_ID());
    INSERT INTO product_option_value(product_option_id,product_id,option_id,option_value_id,quantity,subtract,price,price_prefix,points,points_prefix,weight,weight_prefix) VALUES(poid,insertedProductID,5,50,0,0,4.99,' ',0,' ',0,' ');

    -- ADD option 12
    INSERT INTO product_option(product_id,option_id,required) VALUES(insertedProductID,12,1);

    -- ADD option 13
    INSERT INTO product_option(product_id,option_id,required) VALUES(insertedProductID,13,0);

COMMIT;

END;
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3