2

我需要这个查询来测试异常处理,所以我希望查询不依赖于模式。我正在寻找类似的东西,SELECT 1;但当然不会失败。

我正在使用 Java 和 MySQL,但我希望找到不依赖于编程语言和/或 RDBMS 的答案。

4

6 回答 6

6

对于初学者来说,“SELECT 1/0”怎么样?

于 2013-06-04T04:18:49.657 回答
5

您可以将无效令牌放入查询中

select doesnotexist.* from something_else

或者,当然,您应该做的是模拟该方法并让它在您的测试期间抛出异常。

于 2013-06-04T04:19:28.750 回答
3

有很多方法可以使查询失败,例如拼写错误的字段或从不存在的表中进行选择。例如:

SELECT some_fake_field FROM table_that_doesnt_exists
于 2013-06-04T04:20:58.747 回答
1

触发失败的一种方法是使用错误数量的参数调用存储过程。另一个类似的想法是使用错误数量的参数编写更新/插入语句......

更多想法在这里: 如何在 MySQL 函数中引发错误

于 2013-06-04T04:18:45.573 回答
0

任何旧的语法错误都会......就像一个未终止的字符串

select 'bob
于 2013-06-04T04:20:36.530 回答
0

要在 MySQL 中获得 1/0 引发错误,您需要将 sql_mode 设置为 ERROR_FOR_DIVISION_BY_ZERO。

尝试这个:

SET sql_mode = 'ERROR_FOR_DIVISION_BY_ZERO';
SELECT 1/0;

如果未设置此 sql_mode,MySQL 将返回 NULL 而不是错误。

您可以使用以下内容检查当前设置:

SELECT @@GLOBAL.sql_mode;
SELECT @@SESSION.sql_mode;
于 2013-06-04T05:04:43.460 回答