我有一个网站为其中一个后端数据库查询创建此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中有一些转换逻辑的人是根本原因,但我在这里没有任何转换逻辑。
答案 0 :(得分:3)
我怀疑 GroupId 不是数字列。根据您的其他条件,在其他条件之前或之后评估条件GroupId = 103403
。如果评估了GroupId
列中包含无效数字的行,则查询失败。
如果我的假设是正确的,则将条件更改为:
GroupId = '10340'
BTW:请发布真实的SQL代码,您在自己的测试中运行的代码。您当前的代码包含双引号,几乎无效。