首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > oracle >

Oracle 数据查询的有关问题!

2012-01-05 
Oracle 数据查询的问题!急!急!本人的SQL命令如下:select * from table_name r where r.NVCSTATE 6--nvcs

Oracle 数据查询的问题!急!急!
本人的SQL命令如下:  
select * from table_name r
where r.NVCSTATE < 6 --nvcstate,状态,varchar2(6)
and r.id = 2437 --id,编号,number

查询时提示ORA-01722:无效数字
如果条件加上分号 r.NVCSTATE < ‘6’ ,则查询成功!!

谢谢!

[解决办法]

SQL code
-- 因为 NVCSTATE 字段是字符类型,-- 当用 where r.NVCSTATE < 6 这样的条件的时候,-- 会发生隐式类型转换(先将NVCSTATE转换成数值类型,再与数值6比较),-- 所以:当NVCSTATE字段存在不能转换成数值类型的值时(例如:字符值'A5'就不能转换成数值),-- 此时就会报错!-- 而当用 where r.NVCSTATE < '6' 时,两边都是字符类型,不会产生隐式类型转换,所以不报错!-- 提示:写SQL语句,尽量避免隐式类型转换!-- 即此处最好的写法:where r.NVCSTATE < '6'
[解决办法]
探讨

SQL code
-- 因为 NVCSTATE 字段是字符类型,
-- 当用 where r.NVCSTATE < 6 这样的条件的时候,
-- 会发生隐式类型转换(先将NVCSTATE转换成数值类型,再与数值6比较),
-- 所以:当NVCSTATE字段存在不能转换成数值类型的值时(例如:字符值'A5'就不能转换成数值),
-- 此时就会报错!

-- 而当用 where r.NVCSTAT……

[解决办法]
SQL code
--如果nvcstate里面存的是数字的话,还是用number比较好--如果不仅是数字 还包含字符的话 --你要和数字6进行比较肯定会报错的  --但是如果是nvcstate<'6'的话是跟字符6进行ascii码比较了
[解决办法]
探讨
引用:
SQL code

--如果nvcstate里面存的是数字的话,还是用number比较好

--如果不仅是数字 还包含字符的话
--你要和数字6进行比较肯定会报错的
--但是如果是nvcstate<'6'的话是跟字符6进行ascii码比较了

但是如果是nvcstate<'6'的话是跟字符6进行ascii码比较了
这个,能不能麻……

热点排行
Bad Request.