Chinaunix首页 | 论坛 | 博客
  • 博客访问: 793420
  • 博文数量: 133
  • 博客积分: 3477
  • 博客等级: 中校
  • 技术积分: 1369
  • 用 户 组: 普通用户
  • 注册时间: 2006-11-30 21:53
文章分类

全部博文(133)

文章存档

2024年(4)

2023年(10)

2022年(4)

2021年(10)

2020年(9)

2018年(1)

2017年(1)

2014年(4)

2013年(3)

2012年(12)

2011年(24)

2010年(2)

2009年(8)

2008年(6)

2007年(34)

2006年(1)

分类:

2009-08-10 12:34:05

在程序重新编译执行时报818错。经反复检查,确认bind文件已坐绑定。更怪的现象如下:
假定将所有的bind文件、.o文件删除后重新编译,新生成的bind文件有tipsp9100.bnd、tipsp9106.bnd、 tipsp9102.bnd等。我当前要测试的代码模块涉及的bind文件为tipsp9100.bnd,该文件的bind时间早于其它的几个文件。在执 行时,数据库报818错。然后,重新绑定tipsp9100.bnd,在执行程序测试,一切OK。测试通过后,再随便绑定一个bind文件(例如 tipsp9106.bnd),再次执行程序测试,又报818错。再此测试过程中均未重新编译代码,仅是对bind文件按不同次序重新绑定。

原因是由于文件名称过长了!

考虑到便于代码管理,程序名都以tipsp打头、后面带4位的业务代码,合计9位。而DB2在进行预编译产生bind文件时自动将package的名称截为8位。下面是DB2帮助里对于package名称的说明:
By default, each package is given a name that is the same as the name of the source module from which the .bnd file originated, but truncated to 8 characters. To explicitly specify a different package name, you must use the PACKAGE USING option on the PREP command.
 
实际上,只要源程序文件名称长度大于8位,无论是否显示地指定包的名称都不会有什么用处,因为在DB2数据库已限定了内部存储的packege名称最长 只能是8位!(见 SQL Limits,Longest unqualified package name)。因此,所有前8位相同的源程序进行预编译后只有最后产生的package文件是有效的,其它的都会在执行的时候产生818错。
DB2的这种实现机制,给源代码命名带来了很大的限制。在开发过程中务必要注意!


阅读(3155) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~