MySQL 5.5+ में SIGNAL स्टेटमेंट का उपयोग करके कस्टम त्रुटि उत्पन्न कर सकते हैं, जैसे अन्य भाषाओं में अपवाद (exception)।
सिंटैक्स
SIGNAL SQLSTATE 'sqlstate_value'
SET MESSAGE_TEXT = 'custom_error_message',
MYSQL_ERRNO = error_number; -- वैकल्पिक
उदाहरण: कस्टम त्रुटि उत्पन्न करना
mysql> SIGNAL SQLSTATE '42927' SET MESSAGE_TEXT = 'Error Generated';
ERROR 1644 (42927): Error Generated
ट्रिगर में उपयोग (व्यावहारिक उदाहरण)
CREATE TRIGGER validate_age_before_insert
BEFORE INSERT ON users
FOR EACH ROW
BEGIN
IF NEW.age < 0 OR NEW.age > 150 THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'Invalid age: must be between 0 and 150',
MYSQL_ERRNO = 1001;
END IF;
END;
सामान्य SQLSTATE कोड
| SQLSTATE | अर्थ |
|---|---|
| 45000 | अनहैंडल्ड यूजर-डिफाइंड एक्सेप्शन (सामान्य) |
| 42927 | सिंटैक्स/एक्सेस नियम उल्लंघन |
| 23000 | इंटीग्रिटी कंस्ट्रेंट उल्लंघन |
| 22003 | संख्यात्मक मान सीमा से बाहर |
हैंडलर के साथ त्रुटि पकड़ना
DECLARE CONTINUE HANDLER FOR SQLSTATE '45000'
BEGIN
-- त्रुटि लॉग करें या वैकल्पिक कार्रवाई करें
INSERT INTO error_log (msg) VALUES ('Custom error caught');
END;
नोट
SIGNALकेवल स्टोर्ड प्रोग्राम (प्रोसीजर, फंक्शन, ट्रिगर, इवेंट) के अंदर उपयोग हो सकता है।- स्टैंडअलोन क्वेरी में भी काम करता है (जैसा ऊपर दिखाया)।
RESIGNALमौजूदा त्रुटि को पुनः फेंकने के लिए उपयोग करें।