工作总结40 Oracle针对某一列字段自动类型失效

    今天我们的实施人员反馈一个问题,应收票证背书更新资金支付单报错,以前使用这个功能都是很正常,通过分析,看了下服务器的日志如下:

      从日志看到更新这个表的记录时,出现了无效数字,也就是 where条件后面cguid没有进行自动类型转换,cguid时varchar2类型的。

      开始的时候,我认为是Oracle的数据库的自动类型转换功能失效了,不起作用了,于是我焦急地在网上搜索着,始终没有找到答案,由于我对Oracle自动类型原理并不是很熟悉,网上找到的都是对这种问题,如何的进行处理,转换等。我也知道,程序上需要加上单引号,这样索引也会起作用,如果使用了自动类型转换,索引就会失效。于是我又问了我们的DBA,始终没有找到答案,也许他们在这种业务使用场景下,也很少碰到,因为系统都会避免自动类型转换。

      经过跟比较熟悉Oracle的同事沟通,给我一点启示,cguid字段值里可能存在字母,但是发现问题的时候,我已经给排除这种可能性,因为主键值得发号都是18位数字组成得,不可能出现字母。我又仔细想了想,突然想到最近更新了一个接口补丁,会有单据数据从别的系统同步过来,我赶紧问了接口开发的同事,搞清楚了原来同步过来的主键值可能带字母,这让我很快找到了问题的所在。

      经过认真分析和实验,我明白了,如果某一列原来都是数字组成,如果一条记录里,突然这一列存在字母后,针对这一列的where条件查询,自动类型转换会失效(数字类型转换成字符类型)。可是,出现这种问题的最根本原因是,程序上没有做好类型的转换,查询的时候使用了数据库的自动类型转换,以后要向开发人员强调下尽量避免数据库自动类型转换。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值