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