RTSELECT to_number(TA.abc) FROM TA
这样的一个查询语句。我的理解 :将表TA的abc字段转为number型实际plsql操作 :
在 TA.abc中 ,有汉字也有数字,按我的理解,plsql应该会报错。。因为有汉字存在。。
但实际却并没有报错,而是正常的执行,并查询出来了。。查询出的结果中没有汉字。全部都是数字。。但是,更让我疑惑的事情是 -- plsql有一个展开所有查询结果的按钮。当我展开时才报错。我硬生生的理解是plsql查询时查出的几条信息都是number型的所以不报错,但是展开所有查询结果时,就会发生异常。-_-b可是在db中,汉字和number型的数据是无规则混合的疑问 :是不是当plsql执行时先执行对的,再执行错的呢??

解决方案 »

  1.   

    在 TA.abc中 ,有汉字也有数字,按我的理解,plsql应该会报错。。因为有汉字存在。。
    --------------中要有非数据,你进行to_number的时候都会报错,
      

  2.   

    是啊。。可是没有报错啊。。而且执行了,也查询出来了。。所以我才疑问的说我实际的例子吧。总共1k左右的数据。。这个字段num和非num的都有,按道理应该报错吧。
    可实际却查询出来了30多条信息,这30多条信息都是num型的。。当我点展开所有查询时,才报的错误。。
    而且执行 select * from TA 的时候,前30条有很多非num型的难道plsql是先将对的查出来??然后再差不对的??!!
      

  3.   

    显示数据 我已经拉的很小了 显示5条  按正常查询 带字母的应该在20多行  但是我点击查询 还是会报这个错误
    select col1 from tb1--select to_number(col1,'999999') from tb1col1
    -----
    1423
    3077
    6345
    2453
    2457
    3333
    3581
    3377
    4444
    2222
    6234
    6666
    1020
    0175
    0451
    0614
    3333
    1011
    1019
    1023
    2223
    8888
    al02
    9977
      

  4.   

    查询数据时,ORACLE不会一次把所有数据都取出来,刚好前面取出来的数据是数字,所以用to_number没有问题,当取到后面不是数字的记录时就报错了,你要是把它当做查询条件会马上报错的。
    SELECT * FROM TA WHERE to_number(TA.abc)>0
      

  5.   

    【不会一次把所有数据都取出来,刚好前面取出来的数据是数字】-- 这个次序是怎样看的呢??按照select * from ta查询出来的行顺序吗??
    但7L的例子不是这样啊。【显示5条 按正常查询 带字母的应该在20多行】--按这里论应该能正常执行,但是他报错。
    我实际的例子也不是这样。第一行就是汉字。。--按理论应该直接就报错,但是没报
      

  6.   


     这个应该不行吧  where会判断每一行 然后都会转换成number比较0  还是会有不能转换的 应该还会报错 “无效数字” 
      

  7.   

    【ORACLE不会一次把所有数据都取出来,刚好前面取出来的数据是数字】 -- 按照什么顺序呢?select * from ta 查出来的顺序??
    如果这样,那么7L的例子【 显示5条 按正常查询 带字母的应该在20多行】就不会报错,但他报了。。、
    我看了下我的例子,第一行的数据就是汉字,但没报错
      

  8.   

    ORACLE缺省的排序是与内部数据存放位置相关,与你的数据内容无关,除非你加上ORDER BY子句
    你可以加上ORDER BY排序和ROWNUM限制记录数测试。
      

  9.   

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