2011-02-01 19 views
11

संग्रहीत प्रक्रिया में त्रुटि को फेंकने के लिए MySQL को मजबूर करने के लिए तंत्र क्या है?MySQL प्रक्रिया में कोई त्रुटि कैसे फेंकें?

PREPARE my_cmd FROM @jobcommand; 
EXECUTE my_cmd; 
DEALLOCATE PREPARE my_cmd; 

काम आदेश है:

jobq.exec("Select 1;wfdlk# to simulatte an error"); 

तो:

CREATE PROCEDURE jobq.`exec`(jobID VARCHAR(128),cmd TEXT) 
BEGIN 
DECLARE result INT DEFAULT 0; 
SELECT sys_exec(CONCAT('echo ',cmd,' | base64 -d > ', '/tmp/jobq.',jobID,'.sh ; bash /tmp/jobq.',jobID,'.sh &> /tmp/jobq.',jobID)) INTO result; 
IF result>0 THEN 
# call raise_mysql_error(result); 
END IF; 
END; 

मेरे jobq

मैं एक प्रक्रिया है जो एक और फ़ंक्शन को कॉल करते हैं। exec हमेशा सफल रहा है। क्या कोई त्रुटि उत्पन्न करने का कोई तरीका है? raise_mysql_error फ़ंक्शन को कैसे कार्यान्वित करें ??

BTW मैं MySQL 5.5.8

धन्यवाद अरमान उपयोग कर रहा हूँ।

+1

संबंधित: http://stackoverflow.com/questions/465727/raise-error-within -mysql-function –

+0

इस अध्याय को भी पढ़ें http://www.docstoc.com/docs/687360/Error- हैंडलिंग- इन- स्टोर- प्रसंस्करण –

उत्तर

9

हां, वहां है: SIGNAL कीवर्ड का उपयोग करें।

+2

धन्यवाद! स्क्लेक्सेप्शन सेट गलती के लिए डीलर जारी रखें हैंडल = 1 बिल्कुल वही है जो मुझे चाहिए !!! – Arman

7

आप हो सकता है निम्न संग्रहीत प्रक्रिया का उपयोग अनुकरण करने के लिए त्रुटि फेंकने:

CREATE PROCEDURE `raise`(`errno` BIGINT UNSIGNED, `message` VARCHAR(256)) 
BEGIN 
SIGNAL SQLSTATE 
    'ERR0R' 
SET 
    MESSAGE_TEXT = `message`, 
    MYSQL_ERRNO = `errno`; 
END 

उदाहरण:

CALL `raise`(1356, 'My Error Message'); 
संबंधित मुद्दे