扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
2007年9月7日
关键字:
产品:DB2 UDB
平台:跨平台
版本:v8.1,v8.2
在DB2中,可以通过查询系统表的视图来实现为对指定的存储过程查找其对应的程序包名称的任务。但由于v8.2对于创建存储过程不再需要C编译器的修改,使得系统表的字段定义发生了相应的修改,从而导致在v8.1和v8.2中实现这一功能查询语句的不同。
在DB2 v8.2之前的版本中,为得到程序包与存储过程名称的对照表,可通过如下SQL查询语句,借助SYSCAT.PACKAGES和SYSCAT.PROCEDURES两个系统视图来实现:
select char(procname,20) as procname, char(pkgname,20) as pkgname from syscat.packages a, syscat.procedures b where a.pkgname = substr(b.implementation,1,8)
例如当完成了 sqllib/samples/sqlproc/nestif.db2 中定义的存储过程BUMP_SALARY_IF的创建后,执行上述语句,可得到如下结果:
PROCNAME PKGNAME
-------------------- --------------------
BUMP_SALARY_IF P1121101
1 record(s) selected.
其中的PKGNAME返回的P1121101即为存储过程BUMP_SALARY_IF对应的程序包名称。
而在v8.2中,如果仍使用上述语句,则无法返回正确的程序包名,其输出结果为:
PROCNAME PKGNAME
-------------------- --------------------
0 record(s) selected.
这是由于从v8.2开始,DB2存储过程的创建不再需要C/C++编译器了,也就是说存储过程的创建将由DB2自身的解释器来完成,而无需C/C++ 编译器了。由于这一修改,存储过程对应的程序包的名称也相应地从SYSCAT.PROCEDURES系统视图中移出,因此导致上述查询语句未能正确地返回结果。要在 v8.2 中实现获取程序包与存储过程名称的对照表,可改用以下SQL查询语句:
select char(procname,20) as procname, char(b.bname,20) as pkgname from syscat.procedures a, syscat.routinedep b where a.specificname = b.routinename
对于上述的样本程序nestif.db2中存储过程在 v8.2 下的创建,其返回结果为:
PROCNAME PKGNAME
-------------------- --------------------
BUMP_SALARY_IF P1353951
1 record(s) selected.
即PKGNAME返回的P1353951为存储过程BUMP_SALARY_IF对应的程序包名称。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者