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.
Eine Analyse des bereitgestellten Codes ergab zwei syntaktische Fehler:
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!