日期:2014-05-16  浏览次数:21009 次

【疑问】查询的to_number问题。
RT

SELECT to_number(TA.abc) FROM TA
这样的一个查询语句。

我的理解 :将表TA的abc字段转为number型

实际plsql操作 :
在 TA.abc中 ,有汉字也有数字,按我的理解,plsql应该会报错。。因为有汉字存在。。
但实际却并没有报错,而是正常的执行,并查询出来了。。查询出的结果中没有汉字。全部都是数字。。

但是,更让我疑惑的事情是 -- plsql有一个展开所有查询结果的按钮。当我展开时才报错。我硬生生的理解是plsql查询时查出的几条信息都是number型的所以不报错,但是展开所有查询结果时,就会发生异常。。。。-_-b

可是在db中,汉字和number型的数据是无规则混合的。。。

疑问 :是不是当plsql执行时先执行对的,再执行错的呢??

------解决方案--------------------
显示数据 我已经拉的很小了 显示5条 按正常查询 带字母的应该在20多行 但是我点击查询 还是会报这个错误

SQL code

select col1 from tb1

--select to_number(col1,'999999') from tb1

col1
-----
1423
3077
6345
2453
2457
3333
3581
3377
4444
2222
6234
6666
1020
0175
0451
0614
3333
1011
1019
1023
2223
8888
al02
9977

------解决方案--------------------
以下说法可以参考,不一定准确:
1、对于非分区表、无索引、无并行的情况下oracle默认是按照extent_id和rowid来联合排序,即order by extent_id,rowid
2、对于分区表、无索引、无并行的情况下oracle默认是按照partition_position、extent_id和rowid来联合排序,即order by partition_position,extent_id,rowid