2011-02-01 24 views
11

Cơ chế buộc MySQL phải ném một lỗi trong quy trình được lưu trữ là gì?Làm thế nào để ném một lỗi trong thủ tục MySql?

Tôi có một thủ tục mà gọi của chức năng khác:

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

lệnh công việc là:

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

thì:

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 My. exec luôn thành công. Có cách nào để tăng lỗi không? Cách triển khai hàm ups_mysql_error ??

BTW Tôi đang sử dụng MySQL 5.5.8

thanks Arman.

+1

liên quan: http://stackoverflow.com/questions/465727/raise-error-within -mysql-function –

+0

cũng đọc chương này http://www.docstoc.com/docs/687360/Error-Handling-In-Stored-Procedure –

Trả lời

9

Có, có: sử dụng từ khóa SIGNAL.

+2

Cảm ơn bạn! DECLARE TIẾP TỤC XỬ LÝ CHO SQLEXCEPTION SET err = 1 chính xác những gì tôi cần !!! – Arman

7

Bạn có thể sử dụng thủ tục lưu trữ sau đây để bắt chước lỗi ném:

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

Ví dụ:

CALL `raise`(1356, 'My Error Message'); 
Các vấn đề liên quan