0

我有一个为后端数据库查询之一创建此 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 中有一些转换逻辑作为根本原因,但我这里没有任何转换逻辑。

4

1 回答 1

3

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

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

GroupId = '10340'

顺便说一句:请发布真正的 SQL 代码,即您在自己的测试中运行的代码。您当前的代码包含双引号,这几乎不起作用。

于 2013-09-21T12:29:50.833 回答