Chinaunix首页 | 论坛 | 博客
  • 博客访问: 573807
  • 博文数量: 493
  • 博客积分: 2891
  • 博客等级: 少校
  • 技术积分: 4960
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-17 17:11
文章分类

全部博文(493)

文章存档

2010年(493)

分类:

2010-05-12 18:13:56

1 现象:问题描述
话单入库时,会给话单的一个字段分配一个ID,根据业务场景有些话单会分配,有些不需要分配。但入库程序运行后发现所有的话单都分配了ID,不需要为数据分配ID的话单也分配了ID。
2 关键过程:根本原因分析
话单入库时,一些话单需要为每条记录分配一个唯一的ID,于是采用Oracle的sequence的方式,同时另一些数据入库时是不需要分配ID的。在获取Oracle序列号名称时,使用了全局变量:
Char szSequnceName[50];
对代码走读后发现,在多个函数里对sequence名称变量这个全局变量进行了操作,在数据入库不需要分配ID时,会判断szSequnceName是否为空,为空就不填写ID字段。但是因为当处理需要分配ID的数据入库后,没有对该全局变量进行相应的置空处理。因此当不需要ID的数据入库时,szSequnceName依然不为空,因此也分配了ID。这样就导致了入库时的错误。
3 结论:解决方案及效果
修改几个对全局变量操作的函数,使之在使用完某一个sequence后,进行如下的操作:szSequnceName[0]='\0';
4 经验总结:预防措施和规范建议
全局变量,节省系统开销;但是因为全局变量是共享的,往往存在同时在多处对全局变量进行操作,因此如果处理不当,经常会出现意想不到的情况,导致相互影响。同时因为对全局变量的操作可能是多入口的,导致维护也比较困难,提高了耦合度,建议谨慎使用全局变量。
5 备注
6 考核点
全局变量的使用
7 试题
对全局变量的使用最好:(C)
A. 因为能够节省系统开销,因此需要多使用
B. 因为全局变量的可维护性较差,因此不能使用
C. 对全局变量的使用要谨慎,特别是注意对全局变量操作的相互影响性
阅读(429) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~