Select * FROM Product_component_version  1 NLSRTL  10.2.0.1.0 Production
2 Oracle Database 10g Enterprise Edition  10.2.0.1.0 64bi
3 PL/SQL  10.2.0.1.0 Production
4 TNS for IBM/AIX RISC System/6000:  10.2.0.1.0 Productio
--2: 150|433199|001|ZX433199120814165311|1 
--pass
select nvl(max(SUBSTR(2,INSTR(2,'|', 1, 4))),0)+1 a_num
from cpabg1.tb_pay_commi_info
--ORA-01722: invaild number
select nvl(max(SUBSTR(2,INSTR(2,'|', 1, 4))),0) a_num
from cpabg1.tb_pay_commi_info--pass
select to_number(SUBSTR(2,INSTR(2,'|', 1, 4))) a_num
from cpabg1.tb_pay_commi_info
--ORA-01722: invaild number
select max(to_number(SUBSTR(2,INSTR(2,'|', 1, 4)))) a_num
from cpabg1.tb_pay_commi_infowho can tell me ,why?[

解决方案 »

  1.   

    select nvl(max(SUBSTR(2,INSTR(2,'|', 1, 4))),0)
    返回的是 |1,所以不能+1同理,
    SUBSTR(2,INSTR(2,'|', 1, 4))返回的是 |1,所以不能to_number().
      

  2.   

    猜测你想要的结果是:改成SUBSTR(2,INSTR(2,'|', 1, 4)+1)
      

  3.   

    猜测你想要的结果是:改成SUBSTR(2,INSTR(2,'|', 1, 4)+1)
      

  4.   

      刚测了下 你的 SUBSTR(2,INSTR(2,'|', 1, 4))  返回的是一个字符 ‘|1’不是数字 。你自己看清楚啊。
      

  5.   

    按照你的例子SELECT NVL(MAX(SUBSTR('150|433199|001|ZX433199120814165311|1', INSTR('150|433199|001|ZX433199120814165311|1', '|', 1, 4))), 0) FROM dual
    的值是‘|1’,自然是不能+1.
    同理,‘|1’也不能to_number!!!