一天,有一个Table的需要用到时间来确定数据是否有效,而不是用Delete Flag来明确指定。
这样,这个Table就多了两个栏位,分别为”生效时间“和”失效时间“。
那么,我们就要对原来的数据做Data Correction,于是
”生效时间“就是"2009/04/01 00:00:00"再加相应的时区,
”失效时间“理所当然地成了"9999/12/31 23:59:59"再加相应的时区
当然,修改了Table和数据后,我们相应的基础数据的维护程式也要做相应的修改了。
由于系统需要兼容多时区,”失效时间“的数据就有如下这样的数据了:
数据修正完了后,我们当然要把数据给显示出来了,
查询数据的时候,当然会以一个时区为基准点来看那些“生效时间”,
那我们还是”PRC“来看吧,
啊!!!!出现问题了(ORA-01877: 内部缓冲区的字符串太长):
日期没错啊,平时转时区,to_char都好好的,现在怎么了呢,”ORA-01877: 内部缓冲区的字符串太长“,神马情况啊,Oracle bug?
一步一步,慢慢来,从错误信息来看,最先操作的是"时区转换",屁股想,都会觉得没有问题,可是毕竟屁股没脑袋,还是看下吧:
转换出来的日期是空的?神了:
原因肯定在这了,把日期数据转换为”PRC“时区后,年份会跨到10000年,但Oracle最大的年只能为9999,一万年太久,长长久久就好:
ORA-01841: (全)年度值必须介于 -4713 和 +9999 之间,且不为 0
所以,至此,只有把那个最大的”失效时间“调整为前一年的最后一个时刻,也就是”9998/12/31 23:59:59“+相应时区。
这样,一切都正常了,一切都如常平淡了.........................(此处省略好多字)........