解决方案 »

  1.   

    着实怪异,把完整的max贴出来吧,这么看看不出来问题
      

  2.   

    应该是to_number的时候出了问题,max可以用于非数字
      

  3.   

    select nvl(max(to_number(substr(a.code,5)))+1,1) from A a
      

  4.   

    应该是to_number的时候出了问题,max可以用于非数字
    不清楚,但是光是to_number没有问题的
      

  5.   

    select nvl(max(to_number(substr(a.code,5)))+1,1) from A a
    这个是最原始的了?是不是被简化过了,
    我去数据执行了下没啥问题
    介绍一个我遇到过的比较怪异的这个错误,注意加减乘除符号和||连接符
    如’asdfasf‘||2-1||’asdfafsadf‘这样写就会报错,因为先执行||连接操作,然后才执行的减号
      

  6.   

    你 
    你的表有多少行记录?  你 select to_number(substr(...))  from xxx ;没有问题  有可能是因为 只是前面几十行没问题而已。 
    使用max后,他是所有的都要先to_number. 你如果有用plsqldev的话, 先试试 所有的都to_number 显示出来看看
      

  7.   

    LZ 你这张表 xxx 的数据量是不是很大,并且你这些语句是在 plsql 中执行的,
    其实这个时候,并不是对所有数据进行了 to_number ,只是对第一页进行了 to_number .  
    select to_number(substr(...))  from xxx ;
    而执行下面的语句时,会把所有数据行都 to_number 一下,这样,前50 行没有问题,后面的数据就 to_number 失败了。 
    select max(to_number(substr(...))) :无效数字
      

  8.   

    解决了,是因为substr(...))  时候截的 数字,有的开头是0