Heim  >  Artikel  >  Datenbank  >  Warum schlägt meine gespeicherte MySQL-Prozedur nach dem Hinzufügen von Transaktionssteuerelementen fehl?

Warum schlägt meine gespeicherte MySQL-Prozedur nach dem Hinzufügen von Transaktionssteuerelementen fehl?

Linda Hamilton
Linda HamiltonOriginal
2024-10-24 18:45:24550Durchsuche

Why is My MySQL Stored Procedure Failing After Adding Transaction Controls?

Fehlerbehebung bei Transaktionen in gespeicherten MySQL-Prozeduren

Das Ändern einer gespeicherten Prozedur in eine transaktionale Prozedur sollte unkompliziert sein, aber technische Probleme verursachen oft Hindernisse. Ein Benutzer stieß auf ein solches Problem, als sich seine Prozedur nach dem Hinzufügen von Transaktionskontrollen fehlerhaft verhielt.

Der vom Benutzer bereitgestellte problematische Codeausschnitt ist unten wiedergegeben:

<code class="sql">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</code>

Der Benutzer betonte, dass die Prozedur funktionierte vor der Einführung der Transaktionskontrollen einwandfrei funktionierte, aber danach verhinderte es sogar die grundlegende Aufgabe, Änderungen zu speichern. Der Benutzer durchsuchte die MySQL-Dokumentation und Online-Ressourcen, konnte jedoch keine offensichtlichen Fehler entdecken.

Behebung des Problems

Eine Analyse des bereitgestellten Codes ergab zwei syntaktische Fehler:

  1. Die DECLARE EXIT HANDLER-Anweisung muss Kommas zwischen den angegebenen SQL-Ausnahmen enthalten. In der MySQL-Dokumentation wird diese Anforderung ausdrücklich erwähnt.
  2. Der BEGIN...END-Block des EXIT HANDLERs muss mit einem Semikolon enden, da es sich um eine separate Anweisung handelt und eine ordnungsgemäße Beendigung erfordert.

Um das Problem zu beheben, sollte die DECLARE EXIT HANDLER-Anweisung wie folgt geändert werden:

<code class="sql">DECLARE EXIT HANDLER FOR SQLEXCEPTION, SQLWARNING
BEGIN
    ROLLBACK;
END;</code>

Mit diesen Korrekturen sollte die gespeicherte Prozedur die Transaktionalität erfolgreich implementieren.

Das obige ist der detaillierte Inhalt vonWarum schlägt meine gespeicherte MySQL-Prozedur nach dem Hinzufügen von Transaktionssteuerelementen fehl?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn