2012-02-02 18 views
5
DECLARE EXIT HANDLER FOR SQLEXCEPTION, SQLWARNING, NOT FOUND 
BEGIN 
    ROLLBACK; 
END; 
START TRANSACTION;  

    UPDATE tbl_order SET TransactionID="abc" WHERE OrderID=1; 
    UPDATE tbl_order SET TransactionID="xyz" WHERE OrderID=; 
    UPDATE tbl_order SET TransactionID="zzz" WHERE OrderID=13; 


COMMIT; 
किसी कारण आदेश 1 के लिए

और 13 त्रुटि रोलबैक के बिना भर रहे हैं और मैं बाहर निकलने के Hadler के लिए वाक्यविन्यास त्रुटि मिलती है।mysql लेन-देन से निपटने

Query: DECLARE EXIT HANDLER FOR SQLEXCEPTION, SQLWARNING, NOT FOUND BEGIN ROLLBACK 

Error Code: 1064 
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DECLARE EXIT HANDLER FOR SQLEXCEPTION, SQLWARNING, NOT FOUND 
BEGIN 
    ROLLBACK' at line 1 

कोई मुझे यह पता लगाने की मैं गलत क्या कर रहा मदद कर सकते हैं?

अग्रिम धन्यवाद

संपादित

अद्यतन सेट transactionId tbl_order = "xyz" कहां OrderID =;

जानबूझकर है

+0

शॉट के दौरान उत्पन्न हो सकती है: 'रोलबैक के बाद अर्धविराम है 'समय से बाहर निकलने वाले हैंडलर को समाप्त कर रहे हैं? – sarnold

+0

नहीं .. यह – robert

+0

की मदद नहीं करता है, इसलिए वैसे भी मैं आगे बढ़ गया और त्रुटियों को संभालने के लिए mysql क्वेरी का उपयोग करने के बजाय कोड के साथ किया। एक खुला कनेक्शन मानना ​​ MySqlCommand cmd = conn.CreateCommand(); cmd.CommandType = CommandType.Text; cmd.Transaction = conn.BeginTransaction(); कोशिश करें { cmd.CommandText = strSQL; cmd.ExecuteNonQuery(); cmd.Transaction.Commit(); } पकड़ो (अपवाद पूर्व) { cmd.Transaction.Rollback(); dbLog.ErrorFormat ("*** लेनदेन रोलबैक: {0} \ n पैराम्स: {1} \ n पूर्व: {2} \ n", strSQL, ex.InnerException); } – robert

उत्तर

0

मेरा मानना ​​है कि बाहर निकलने के संचालकों केवल संग्रहित प्रक्रियाओं में इस्तेमाल किया जा सकता है। प्रलेखन स्पष्ट रूप से यह नहीं बताता है, लेकिन

स्थितियां की तरफ इशारा करता संग्रहित प्रोग्राम निष्पादन की आवश्यकता होती है विशेष हैंडलिंग अंधेरे में

http://dev.mysql.com/doc/refman/5.1/en/condition-handling.html

संबंधित मुद्दे