这与以下内容有关: 如何编写一个语法正确的简短查询,在运行时会产生错误?
但是,不是一个完整的查询,而是有一个简单的语法正确的表达式来在评估时生成运行时错误?
就像是:
SELECT IF(1=1, 1, <runtime_error_expression>); // successfully run
SELECT IF(1=2, 1, <runtime_error_expression>); // runtime error
这与以下内容有关: 如何编写一个语法正确的简短查询,在运行时会产生错误?
但是,不是一个完整的查询,而是有一个简单的语法正确的表达式来在评估时生成运行时错误?
就像是:
SELECT IF(1=1, 1, <runtime_error_expression>); // successfully run
SELECT IF(1=2, 1, <runtime_error_expression>); // runtime error
更新
SELECT IF(1=1, 1, 9223372036854775807 + 1);
SELECT IF(1=2, 1, 9223372036854775807 + 1);
输出:
mysql> 选择 IF(1=1, 1, 9223372036854775807 + 1); +--------------------------------------------------+ | IF(1=1, 1, 9223372036854775807 + 1) | +--------------------------------------------------+ | 1 | +--------------------------------------------------+ 一组中的 1 行(0.00 秒) mysql> 选择 IF(1=2, 1, 9223372036854775807 + 1); 错误 1690 (22003):BIGINT 值超出“(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 行(0.00 秒) mysql> SELECT IF(1=2, 1, GEN_ERROR()); 错误 1146 (42S02):表 'test.non_table' 不存在
您可以使用引发错误的过程和SIGNAL语句(MySQL 5.5)。例如 -
CREATE PROCEDURE procedure1()
BEGIN
IF @var = 1 THEN
SELECT * FROM DUAL;
ELSE
SIGNAL SQLSTATE '02001'; -- Error
END IF;
END