2011-02-01 2 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-Handling-In-Stored-Procedure –

답변

9

예, 있습니다 : SIGNAL 키워드를 사용하십시오.

+2

감사합니다! SQLEXCEPTION SET에 대해 CONTINUE HANDLER를 계속 선언하십시오. – 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'); 
관련 문제