缘由: 以前没有学过INFORMIX 数据库,可现在项目的数据 ETL过程中必须要写informix的SP。于是照葫芦画瓢的写了一个SP。前几天运行还相当正常~ 。今天调用时发现报错信息:-1267: The result of a datetime computation is out of range. BAIDU/GOOLE了一些网站,发现是由于时间的边界问题,而我的SP中正好有多处使用到日期的处理函数。
找到出错的地方:LET v_time = v_day -1 UNITS MONTH ; --月份减一
分析原因:
原来informix里 v_day -1 UNITS MONTH 只是将v_day的对应月份减一、却不能把对应的日期减到合适日期。而今天又是20090331,结果就是20090231,不出错才怪呢~~
解决办法: 网上好多例子都是写单独函数处理。其实只要将informix的“不能把对应的日期减到合适日期”的问题处理掉即可。而解决这个问题方法就是将当前日期(v_day)依次往前减一天,直到此日期对应到上一月中也存在此日期即可。根据这个思路,用一小循环语句OK大吉~~
WHILE 1 = 1
ON EXCEPTION SET v_esql (--v_esql : define v_esql integer; 做为接受异常号)
IF v_esql <> 0 THEN (由于informix环境设置的不同,异常号可能为正、也可能为负)
LET v_day = v_day -1 UNITS day;
ELSE
RAISE EXCEPTION v_esql;
END IF;<
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交