ORACLE中查询条件为varchar2类型字段=number类型时异常
有两个库A和B,有同一张表t,t有个类型为varchar2的字段i。在A中select*fromtwherei=100能正常查询数据,在B中抛异常[invalidnumb...
有两个库A和B,有同一张表t,t有个类型为varchar2的字段i。
在A中 select * from t where i =100 能正常查询数据,在B中抛异常[invalid number]。请教下原因。 展开
在A中 select * from t where i =100 能正常查询数据,在B中抛异常[invalid number]。请教下原因。 展开
7个回答
展开全部
因为你写是100 是个数字,oralce会自动 把 i 字段 转化成数字进行比较,那么,如果你 B库的 i 字段里如果有不能转化成数字的数据 就会报这个错了。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你是否是在2个库中定义的I的类型不一样?I为varchar的时候是可以判断是否为100的 这个时候的100是一个字符 不是数字。如果要使用数字来进行判断的话 应该使用 to_num(i) = 100
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
那是因为在 B表中存在字符导致的,你用如下语句就不会报错
select * from t where i ='100'
select * from t where i ='100'
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
建议写sql时候sql语句数据类型跟表中保持一致,这样执行效率会高一些的。select * from t where i =‘100 ’,虽然有时oracle会自动转换但会降低效率
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询