दिलचस्प पोस्ट
हस्ताक्षर किए कुंजीस्टोर का उपयोग करने के लिए एक्लिप्स कॉन्फ़िगर करें सूचकांक 'सी' में शून्य से क्यों शुरू होता है? टेलनेट क्लाइंट को चरित्र मोड में बल दें स्ट्रिंग एक आदिम प्रकार है? PHP कुछ $ _POST मान अनुपलब्ध हैं लेकिन php: // इनपुट में मौजूद हैं दबाने वाली "कभी भी प्रयोग नहीं किया जाता" और सी # में चेतावनियों को "असाइन नहीं किया जाता" N सॉर्ट किए गए एरे से सबसे छोटी संख्या खोजना एंड्रॉइड में वीडियो पर वॉटरमार्क बिटमैप जोड़ना: 4.3 मीडियामॉक्सर या एफएफपीएपी R: डेटा। फ्रेम कॉलम में असंतुलित सूची को विभाजित करें स्थिर वर्ग के सदस्य के लिए अनिर्धारित संदर्भ जेल तोड़ने पर आईओएस 6.x ओपन कमांड लाइन मैक ओएस एक्स में clock_gettime विकल्प कैसे एक फ़ाइल में 'सामान्य' linebreak के लिए ^ एम लाइनब्रेट को बदलने में vim में खोला? .vimrc फ़ाइल में <leader> क्या है? php – एक फाइल डाउनलोड करने के लिए मजबूर कैसे करें?

MySQL फ़ंक्शन के अंदर एक त्रुटि कैसे बढ़ाएं

मैंने एक MySQL फ़ंक्शन बना लिया है और यदि पैरामीटर के लिए मानों को पारित किया गया है, तो एक त्रुटि बढ़ाना अमान्य है। MySQL फ़ंक्शन के अंदर एक त्रुटि को बढ़ाने के लिए मेरे विकल्प क्या हैं?

Solutions Collecting From Web of "MySQL फ़ंक्शन के अंदर एक त्रुटि कैसे बढ़ाएं"

MySQL 5.5 संकेतों का परिचय देता है, जो अन्य भाषाओं में अपवादों के समान हैं:

http://dev.mysql.com/doc/refman/5.5/en/signal.html

उदाहरण के लिए, mysql कमांड लाइन क्लाइंट में:

 mysql> SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Custom error'; ERROR 1644 (45000): Custom error 

यह वास्तव में तीनों उत्तरों का संयोजन है आप त्रुटि बढ़ाने के लिए एक गैर-मौजूद प्रक्रिया को कॉल करते हैं, और फिर एक एक्सेप्टर हैंडलर को घोषित करें जो आपके द्वारा उत्पन्न त्रुटि को पकड़ता है। यहां एक उदाहरण है, हटाए जाने से पहले एक त्रुटि को फेंकने के लिए SQLSTATE 42000 (प्रक्रिया मौजूद नहीं है) यदि पंक्ति को हटा दिया गया है तो एक विदेशी कुंजी आईडी सेट है:

 DROP PROCEDURE IF EXISTS decount_test; DELIMITER // CREATE DEFINER = 'root'@'localhost' PROCEDURE decount_test ( p_id bigint ) DETERMINISTIC MODIFIES SQL DATA BEGIN DECLARE EXIT HANDLER FOR SQLSTATE '42000' SELECT 'Invoiced barcodes may not have accounting removed.'; IF (SELECT invoice_id FROM accounted_barcodes WHERE id = p_id ) THEN CALL raise_error; END IF; DELETE FROM accounted_barcodes WHERE id = p_id; END // DELIMITER ; 

आउटपुट:

 call decount_test(123456); +----------------------------------------------------+ | Invoiced barcodes may not have accounting removed. | +----------------------------------------------------+ | Invoiced barcodes may not have accounting removed. | +----------------------------------------------------+ 

क्यों एक घोषित INTEGER चर में एक VARCHAR स्टोर ही नहीं?

 DELIMITER $$ DROP FUNCTION IF EXISTS `raise_error` $$ CREATE FUNCTION `raise_error`(MESSAGE VARCHAR(255)) RETURNS INTEGER DETERMINISTIC BEGIN DECLARE ERROR INTEGER; set ERROR := MESSAGE; RETURN 0; END $$ DELIMITER ; -- set @foo := raise_error('something failed'); -- or within a query 

त्रुटि संदेश है:

गलत पूर्णांक मान: पंक्ति 1 पर कॉलम 'त्रुटि' के लिए 'कुछ विफल'

यह सही नहीं है, लेकिन यह एक बहुत ही वर्णनात्मक संदेश देता है और आपको कोई एक्सटेंशन DLL लिखना नहीं है।

MySQL 5 में आप किसी संग्रहीत कार्यविधि को कॉल करके एक त्रुटि बढ़ा सकते हैं (कॉल बढ़ाएं_अरेर) या एक क्वेरी के लिए एक अमान्य मूल्य (जैसे कि एक नल परिचित फ़ील्ड के लिए नल) को पास करना। एक MySQL फ़ंक्शन के भीतर त्रुटियों को उठाने पर रोलाण्ड Bouman द्वारा एक दिलचस्प पोस्ट है:

http://rpbouman.blogspot.com/2005/11/using-udf-to-raise-errors-from-inside.html

आप एक मौजूदा फ़ंक्शन को अमान्य संख्या में तर्क के साथ भी कॉल कर सकते हैं।

आपको अपवाद संचालकों को परिभाषित करना होगा http://dev.mysql.com/doc/refman/5.0/en/declare-handler.html पर एक नज़र डालें