今天同事告诉我加载程序报错:
ora-01841: (full) year must be between -4713 and 9999, and not be 0
确认是insert操作报错,后来转换为delete加载时候还存在这个报错。
本能的怀疑时间字段有问题,时间非法。
后来查到发现一个很有趣的事情:
说是oracle date类型不能储存时间字段0年,但他怎么就储存进去了呢?后来了解到通过sysdate运算得到的,详细见下面测试示例:
后来我用to_char()转换后这个数据既然后面月、时、分、 ... 全变成了,而且oracle还不报错。
是不是可以说:oracle数据库在实际写入数据前没有做合法性检查,或者检查的不严格,导致非法数据也可以储存到数据库里面,最后用起来就是各种奇怪的问题了。
阅读(166) | 评论(0) | 转发(0) |