在某个过程中
where .....
 and  Src_Entity_CODE = Finance_Main_Entity_Id
        (varchar2)          (number)
之前这个过程一直是job调用的,没有任何问题
但今天手工写一个语句调用这个过程,发现执行后错误,进行调试时就发现这里没有自动转换。错误信息:[出错信息:ORA-01722: invalid number]请达人指点一下,这中类型转换的oracle中是如何进行的,是否和外部调用这个过程有关系??

解决方案 »

  1.   

    类型转换应该是在sqlplus中或者其它的执行sql的工具中进行的。
    实际的oracle内部并不进行转换。
    建议通过to_char/to_number来进行显示的转换,代码编写就应该严谨。
      

  2.   

    ORACLE内部是有隐性转换的
    但不建议这样做,因为会降低效率的而你的问题是在于Src_Entity_CODE有不能转换成数字的比如你的字段
    Src_Entity_CODE
    A10
    假设Finance_Main_Entity_Id 是number=10

    Src_Entity_CODE = Finance_Main_Entity_Id
    就会出错

    Src_Entity_CODE =to_char(Finance_Main_Entity_Id)
    就不会出错
    这是因为,先检测到Finance_Main_Entity_Id
    是数字
    所以内部会做个
    to_number(Src_Entity_CODE)=Finance_Main_Entity_Id
    看情况应该是这样做转换的
    反正,你只要记住,不管你有没有做转换,ORACEL必定是两边变成同一类型比较的
    所以最好做显性转换
      

  3.   

    另外这个ORACLE的解析顺序有关的吧
    你把两个换下位置看看,估计转换顺序就不一样了吧,
      

  4.   


    请问这里为什么不是将Finance_Main_Entity_Id 转换成字符型的??难道oracle编译的时候也会有左右顺序?
      

  5.   

    ORACLE 分显示转换和隐示转换.呀.呀.呀
    to_char(),to_number();