【问题标题】:How to throw an error in MySql procedure?如何在 MySql 程序中抛出错误?
【发布时间】:2011-06-19 06:34:14
【问题描述】:

强制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函数如何实现??

顺便说一句,我使用的是 MySQL 5.5.8

感谢阿曼。

【问题讨论】:

标签: mysql stored-procedures throw stored-functions


【解决方案1】:

是的,有:使用 SIGNAL 关键字。

【讨论】:

  • 谢谢! DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET err= 1 正是我需要的!!!
【解决方案2】:

您可以使用以下存储过程来模拟错误抛出:

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');

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-11
    • 2019-01-01
    • 1970-01-01
    • 2014-12-05
    • 1970-01-01
    • 2013-07-10
    • 2021-07-29
    • 2014-09-23
    相关资源
    最近更新 更多