2011-02-01 5 views
11

Qual è il meccanismo per forzare MySQL a generare un errore all'interno della stored procedure?Come lanciare un errore nella procedura MySql?

Ho un procedimento che chiamano s un'altra funzione:

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

il comando lavoro è:

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

poi:

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; 

mio jobq. exec ha sempre successo. C'è un modo per far salire un errore? Come implementare la funzione raise_mysql_error ??

BTW sto usando MySQL 5.5.8

grazie Arman.

+1

correlati: http://stackoverflow.com/questions/465727/raise-error-within -mysql funzione –

+0

anche leggere questo capitolo http://www.docstoc.com/docs/687360/Error-Handling-In-Stored-Procedure –

risposta

9

Sì, c'è: utilizzare la parola chiave SIGNAL.

+2

Grazie! DICHIARARE CONTINUARE HANDLER PER SET SQLEXCEPTION err = 1 esattamente quello di cui ho bisogno !!! – Arman

7

È possibile utilizzare seguente stored procedure per emulare l'errore-lancio:

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

Esempio:

CALL `raise`(1356, 'My Error Message');