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]。请教下原因。
展开
 我来答
sxdtgsh
推荐于2017-10-13 · TA获得超过2221个赞
知道小有建树答主
回答量:913
采纳率:75%
帮助的人:808万
展开全部
出现错误的原因是varchar2类型列中存储了非number型字符。
解决方法是将number类型使用to_char进行转换,如:
select * from 表名 where 列名 = to_char(number数值)
之所以出现这种错误,是由于oracle的隐式类型转换造成的,
也就是说,oracle在查询时,会根据等式右边的数据类型对
左边的进行类型转换,所以为了避免此类错误及提高查询效率,
在写语句的时候最好是保持数据类型一致。
清心之时
2012-07-13 · 超过37用户采纳过TA的回答
知道答主
回答量:126
采纳率:0%
帮助的人:85.4万
展开全部
因为你写是100 是个数字,oralce会自动 把 i 字段 转化成数字进行比较,那么,如果你 B库的 i 字段里如果有不能转化成数字的数据 就会报这个错了。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
huangshuan1
2012-07-13 · TA获得超过391个赞
知道小有建树答主
回答量:749
采纳率:0%
帮助的人:363万
展开全部
你是否是在2个库中定义的I的类型不一样?I为varchar的时候是可以判断是否为100的 这个时候的100是一个字符 不是数字。如果要使用数字来进行判断的话 应该使用 to_num(i) = 100
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
tianhxk
2012-07-13 · TA获得超过422个赞
知道小有建树答主
回答量:342
采纳率:0%
帮助的人:280万
展开全部
那是因为在 B表中存在字符导致的,你用如下语句就不会报错
select * from t where i ='100'
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
积德多者多书
2012-07-13
知道答主
回答量:18
采纳率:0%
帮助的人:8.9万
展开全部
建议写sql时候sql语句数据类型跟表中保持一致,这样执行效率会高一些的。select * from t where i =‘100 ’,虽然有时oracle会自动转换但会降低效率
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式