如何在MySQL中的存储过程中生成异常?例如:
CREATE PROCEDURE SALES()
BEGIN
STATEMENT...
STATEMENT...
STATEMENT...
IF (PRICE >= 500) THEN
/** THROWS AN EXCEPTION....
WHAT DO TO STOP THE PROCEDURE. **/
END IF;
STATEMENT...
STATEMENT...
STATEMENT...
END;
Run Code Online (Sandbox Code Playgroud)
在MySQL中我认为没有办法在存储过程中抛出异常,但我可以通过从不存在的表中选择来强制错误.例如:
IF (PRICE > 500) THEN
/*throw the error here*/
SELECT * FROM price_greater_than_500_in_throw_exception;
END IF;
Run Code Online (Sandbox Code Playgroud)
有更优雅的方式吗?
谢谢.
什么是强制MySQL在存储过程中抛出错误的机制?
我有一个调用另一个函数的过程:
PREPARE my_cmd FROM @jobcommand;
EXECUTE my_cmd;
DEALLOCATE PREPARE my_cmd;
Run Code Online (Sandbox Code Playgroud)
job命令是:
jobq.exec("Select 1;wfdlk# to simulatte an error");
Run Code Online (Sandbox Code Playgroud)
然后:
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;
Run Code Online (Sandbox Code Playgroud)
我的职业.exec总是成功的.有没有办法引发错误?如何实现raise_mysql_error函数?
顺便说一下,我使用的是MySQL 5.5.8
谢谢阿曼.
我想在MySQL中使用CHECK约束,但它不受支持.(与其他RDBMS不同,它会理解但不强制执行CHECK.)
我看过一些触发器的解决方法.但他们倾向于为相关字段设置默认值,而不是返回错误.
如果不满足条件,是否可以构造一个返回错误的触发器?
最终我想要一个复制CHECK约束的触发器.