2013-06-04 103 views
1

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

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

+0

你为什么不花点时间指出什么地方错了这个问题,你downvote之前? – muhuk

回答

2

有吨的方式来进行查询失败,如拼写错误的字段,或者不存在的表中选择。例如:

SELECT some_fake_field FROM table_that_doesnt_exists 
1

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

更多的想法在这里: How to raise an error within a MySQL function

5

什么是“选择1/0”对于初学者?

+0

在MySQL中似乎不起作用:返回NULL。 – muhuk

+0

好吧,这是烦人的,恕我直言不行为我会认为正确的默认,但我不是MySQL的家伙:)请参阅下面有关sql_mode设置(当然,这不符合RDBMS独立的这个答案)@HeadofCatering评论。也是不同类型的例外情况,例如,您可能或很多不想测试的语法错误与引擎错误 - 不知道您正在测试的方式/内容,这些异常可能是否可能通过您的应用程序采用不同的路径? –

4

你可以把一个无效的令牌到查询

select doesnotexist.* from something_else 

当然还是,你应该做的是模拟出来的方法,并将它在测试期间抛出异常。

0

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

select 'bob 
0

要获得1/0,以提高在MySQL错误,你需要的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;