2013-06-06 5 views
7

हर जगह मुझे लगता है कि ऐसा लगता है कि MySQL संग्रहीत प्रक्रिया लेनदेन कर सकती है। 1422. स्पष्ट या अस्पष्ट प्रतिबद्ध संग्रहीत समारोह या ट्रिगर में अनुमति नहीं है: फिर भी जब मैं अपने संग्रहीत समारोहत्रुटि कोड: 1422. संग्रहित फ़ंक्शन में स्पष्टीकरण या निहित प्रतिबद्धता की अनुमति नहीं है या

create function test(a int) 
returns int 
MODIFIES SQL DATA 
BEGIN 
    START TRANSACTION ; 
    update t set col='some value' where id=a ; 
    COMMIT ; 
    return 0 ; 
END // 

घोषित मैं

त्रुटि कोड मिलता है।

उत्तर

10

दरअसल आपको संग्रहीत फ़ंक्शंस के अंदर लेनदेन की अनुमति नहीं है। आपको संग्रहीत प्रक्रियाओं के अंदर लेनदेन की अनुमति है।

create procedure test(a int) 
MODIFIES SQL DATA 
BEGIN 
    START TRANSACTION ; 
    update t set col='some value' where id=a ; 
    COMMIT ; 
END // 

एसपी से मूल्य वापस करने के लिए, आउटपुट पैरामीटर का उपयोग करें या एसपी में अंतिम चयन कथन से परिणाम सेट का उपयोग करें।

+6

यह भी ध्यान देने योग्य है कि यदि आप किसी ट्रिगर के भीतर से प्रक्रिया को कॉल करते हैं, तो आपको अभी भी '_Explicit या अंतर्निहित प्रतिबद्धता को संग्रहीत फ़ंक्शन या ट्रिगर_' त्रुटि के साथ पुरस्कृत नहीं किया जाएगा। निराशा होती। – aroth

+0

अरे, यह थोड़ा पुराना है, लेकिन मैं अभी इस समस्या में भाग रहा हूं। क्या इसके चारों ओर कोई रास्ता है? – user2223059

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

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