当我没有进行类型转换时,为什么我在查询中得到Oracle“无效数字”?

时间:2013-09-21 12:07:06

标签: sql oracle

我有一个网站为其中一个后端数据库查询创建此SQL(简化问题)

 Select * 
   from People 
   where Status = 'Active'
     and GroupId = 103403 
     and  (TeamName in ('TEAM1', 'TEAM2')) 
     and DELETED is NULL

这很好用。我现在需要添加一些新的团队名称,类似这样的

Select * 
  from People 
   where Status = 'Active'
   and GroupId = 103403 
   and  (TeamName in ('TEAM1', 'TEAM2','TEAM3', 'TEAM4')) 
   and DELETED is NULL

我收到此错误:

  

ORA-01722:无效号码

奇怪的是,“TEAM3”或“TEAM4”似乎没有任何问题,就好像我这样做

Select * 
  from People 
   where Status = 'Active'
   and GroupId = 103403 
   and  (TeamName in ('TEAM3', 'TEAM4')) 
   and DELETED is NULL

它也可以正常工作。因此,只有当我在“IN”状态下拥有一定数量的球队时才会打破。

有关问题的任何建议。当我谷歌那个Oracle错误时,我发现,如果由于数据类型不匹配而在SQL中有一些转换逻辑的人是根本原因,但我在这里没有任何转换逻辑。

1 个答案:

答案 0 :(得分:3)

我怀疑 GroupId 不是数字列。根据您的其他条件,在其他条件之前或之后评估条件GroupId = 103403。如果评估了GroupId列中包含无效数字的行,则查询失败。

如果我的假设是正确的,则将条件更改为:

GroupId = '10340'

BTW:请发布真实的SQL代码,您在自己的测试中运行的代码。您当前的代码包含双引号,几乎无效。