Rumah >pangkalan data >tutorial mysql >Mengapa Prosedur Tersimpan MySQL Saya Gagal Selepas Menambah Kawalan Transaksi?
Mengubah suai prosedur tersimpan menjadi transaksi haruslah mudah, tetapi teknikal sering menyebabkan sekatan jalan raya. Seorang pengguna menghadapi isu sedemikian apabila prosedur mereka bertindak secara tidak menentu selepas menambah kawalan transaksi.
Coretan kod bermasalah yang disediakan oleh pengguna diterbitkan semula di bawah:
<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>
Pengguna menyerlahkan bahawa prosedur itu berfungsi dengan sempurna sebelum kawalan transaksi diperkenalkan, tetapi selepas itu, ia menghalang walaupun tugas asas untuk menyimpan pengubahsuaian. Pengguna meninjau dokumentasi MySQL dan sumber dalam talian, tetapi tiada ralat yang jelas dapat dikesan.
Analisis kod yang disediakan mendedahkan dua kesilapan sintaksis:
Untuk menyelesaikan isu tersebut, pernyataan PENGISYTIHARAN PENGENDALI KELUAR hendaklah diubah suai seperti berikut:
<code class="sql">DECLARE EXIT HANDLER FOR SQLEXCEPTION, SQLWARNING BEGIN ROLLBACK; END;</code>
Dengan pembetulan ini, prosedur tersimpan harus berjaya melaksanakan transaksi.
Atas ialah kandungan terperinci Mengapa Prosedur Tersimpan MySQL Saya Gagal Selepas Menambah Kawalan Transaksi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!