db2 C的存储过程老是出现时间戳问题?
现象:
sqlcode 报-818错误,存储过程不能运行
原因:
原因一:
一个C的过程在一个instance下的几个 database 下创建时,
由于db2 将全部的 C的过程的 dll 文件是按照 instance来管理, 而不是按照
database 来管理。这样如果将一个 C 的过程在多个 database 上创建时,如
果不换文件名,这时在一个 database 创建就会导致在其他 database 上的该
过程无效。
原因二:
据沈刚介绍,C的存储过程使用的表被 drop 后在重建,也会
造成这种现象。
原因三:
C 过程的名称要注意保证前 8 位是唯一的。是由于
syscat.packages 的系统表中的 pkgname 这个字段只有 8 位长,而 C 的
过程的名称就是作为 pkgname 的,所以 C 过程的前 8 位要保证是唯一
的,否则会互相覆盖,只有后建的过程才可以用。
其他原因还不知道
解决办法:
原因一:
在 function中按不同database来创建目录。
在写创建脚本时,注意将不同文件放在个database对应的目
录下。
原因二:
rebind该存储过程。
原因三:
保证前8 位是唯一