这与以下内容有关: How to write a short grammatically correct query that generates an error when run?
但是,在评估时,是否有一个简单的语法正确的表达式来生成运行时错误,而不是整个查询?
类似的东西:
SELECT IF(1=1, 1, <runtime_error_expression>); // successfully run
SELECT IF(1=2, 1, <runtime_error_expression>); // runtime error
答案 0 :(得分:1)
<强>已更新强>
SELECT IF(1=1, 1, 9223372036854775807 + 1);
SELECT IF(1=2, 1, 9223372036854775807 + 1);
输出:
mysql> SELECT IF(1=1, 1, 9223372036854775807 + 1); +-------------------------------------+ | IF(1=1, 1, 9223372036854775807 + 1) | +-------------------------------------+ | 1 | +-------------------------------------+ 1 row in set (0.00 sec) mysql> SELECT IF(1=2, 1, 9223372036854775807 + 1); ERROR 1690 (22003): BIGINT value is out of range in '(9223372036854775807 + 1)'
如果经常使用它,那么您可以考虑创建一个生成错误的函数
CREATE FUNCTION GEN_ERROR() RETURNS INT
RETURN (SELECT a FROM non_table);
如果使用MySql 5.5及更高版本,则可以在函数中包含SIGNAL
DELIMITER $$
CREATE FUNCTION GEN_ERROR() RETURNS INT
BEGIN
SIGNAL SQLSTATE '02000';
RETURN 1;
END$$
DELIMITER ;
然后使用它
SELECT IF(1=1, 1, GEN_ERROR());
SELECT IF(1=2, 1, GEN_ERROR());
输出:
mysql> SELECT IF(1=1, 1, GEN_ERROR()); +-------------------------+ | IF(1=1, 1, GEN_ERROR()) | +-------------------------+ | 1 | +-------------------------+ 1 row in set (0.00 sec) mysql> SELECT IF(1=2, 1, GEN_ERROR()); ERROR 1146 (42S02): Table 'test.non_table' doesn't exist
答案 1 :(得分:0)
您可以使用引发错误的过程和SIGNAL语句(MySQL 5.5)。例如 -
CREATE PROCEDURE procedure1()
BEGIN
IF @var = 1 THEN
SELECT * FROM DUAL;
ELSE
SIGNAL SQLSTATE '02001'; -- Error
END IF;
END