科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网存储频道在DB2 v8中如何查找存储过程所对应的程序包的名称?

在DB2 v8中如何查找存储过程所对应的程序包的名称?

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

由于v8.2对于创建存储过程不再需要C编译器的修改,使得系统表的字段定义发生了相应的修改,从而导致在v8.1和v8.2中实现这一功能查询语句的不同。

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领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章