两个number类型的之比较出现 invalid number错误

[复制链接]
查看11 | 回复7 | 2011-11-1 16:24:51 | 显示全部楼层 |阅读模式
select parition_name,to_number(substr(partition_name,6)) NUM from user_tab_partitions;
-----------------------
PARTITION_NAMENUM
PART_20120320 20120320
PART_20120321 20120321
-----------------------------
SELECT parition_name,to_number(substr(partition_name,6)) NUM from user_tab_partitions WHERE to_number(substr(partition_name,6)) = 20120320;
出现ORA-01722: invalid number
回复

使用道具 举报

千问 | 2011-11-1 16:24:51 | 显示全部楼层
会是遇到oraclebug么?

回复

使用道具 举报

千问 | 2011-11-1 16:24:51 | 显示全部楼层
user_tab_partitions 是不是还有其他的不是 “PART_XXXXXX” 的数据
回复

使用道具 举报

千问 | 2011-11-1 16:24:51 | 显示全部楼层
user_tab_partitions 这个表里肯定有其它的名称和这不一样的。。
回复

使用道具 举报

千问 | 2011-11-1 16:24:51 | 显示全部楼层
user_tab_partitions是个视图,你的WHERE条件被推到底层表去了,碰到了其他格式的分区名。
加个ROWNUM看看行不行。
SELECT parition_name,to_number(substr(partition_name,6)) NUM
from (SELECT t.*,ROWNUM FROM user_tab_partitions t)
WHERE to_number(substr(partition_name,6)) = 20120320;
回复

使用道具 举报

千问 | 2011-11-1 16:24:51 | 显示全部楼层
user_tab_partitions是个视图,你的WHERE条件被推到底层表去了,碰到了其他格式的分区名。
加个ROWNUM看看行不行。
SELECT parition_name,to_number(substr(partition_name,6)) NUM
from (SELECT t.*,ROWNUM FROM user_tab_partitions t)
WHERE to_number(substr(partition_name,6)) = 20120320;
回复

使用道具 举报

千问 | 2011-11-1 16:24:51 | 显示全部楼层
首先感谢大家的热情帮助,3#和4#说对了其实,表里有无用的数据,但是我清空回收站后,重新建分区表,还是出现一样的错误;然后我按照newid大师的方法去做,就可以了。
但还是有一点不理解,为什么“where 条件被推倒底层表去了”?
回复

使用道具 举报

千问 | 2011-11-1 16:24:51 | 显示全部楼层
oracle谓词推进了,rownum>0可以阻止谓词推进
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行