2011-02-01 16 views
11

MySQL'in saklı yordamda hata atmasını zorlayan mekanizma nedir?MySql prosedüründe nasıl hata atılır?

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

iş komut: o zaman

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; 

Benim jobq

ben s a başka işlevi çağırmak bir prosedür var. exec her zaman başarılı olur. Bir hatayı artırma yolu var mı? raise_mysql_error işlevi nasıl oluşturulur ?? BTW MySQL 'i 5.5.8

sayesinde Arman kullanıyorum

.

+1

ilgili: http://stackoverflow.com/questions/465727/raise-error-within -mysql-işlevi –

+0

da bu bölümü okuyunuz http://www.docstoc.com/docs/687360/Error-Handling-In-Stored-Prosedür –

cevap

9

Evet, var: SIGNAL anahtar sözcüğünü kullanın.

+2

Teşekkür ederim! SQLEXCEPTION SET İÇİN AYARLA DEVAM EDECEK HANDERS err = 1 tam olarak ihtiyacım olan şey! – Arman

7

Şunları hata atma taklit etmek için aşağıdaki saklı prosedürü kullanarak:

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

Örnek:

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