| 网站首页 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛 |
 
| 技术教程首页 | 开发语言 | WEB开发 | .NET技术 | 数据库 | 操作系统 | 网页制作 |
 
 
您现在的位置: 编程中国 >> 技术教程 >> 数据库 >> Oracle >> 正文
  ►  DB2 存储过程开发最佳实践
DB2 存储过程开发最佳实践
作者:changwei    阅读人次:……    文章来源:天极论坛整理    发布时间:2007-9-5    网友评论()条
 

 

  最佳实践 6:寻找并rebind 非法的存储过程

  存储过程会因为其涉及和引用的对象发生了改变而导致其非法(invalid),例如:修改了表结构,导致引用该表的存储过程非法,或者重新编译一个存储过程,会使调用这个存储过程的父存储过程非法。此时我们需要对非法的存储过程重新编译(rebind)。但是,对非法的存储过程进行rebind的时候,需要确定其引用的对象是合法的,否则非法的存储过程也不能rebind成功。

  这里我们介绍一下发现和rebind非法存储过程的方法。我们是通过判断SYSCAT.routines中VALID字段的值来查找非法存储过程的。下面是查找非法存储过程的一段代码:

  清单10:查找非法存储过程

  SELECT RTRIM(r.routineschema) || '.' || RTRIM(r.routinename) AS spname , ' ( '|| RTRIM(r.routineschema) || '.' || 'P'||SUBSTR(CHAR(r.lib_id+10000000),2)||' )' FROM SYSCAT.routines r WHERE r.routinetype = 'P' AND ((r.origin = 'Q' AND r.valid != 'Y') OR EXISTS ( SELECT 1 FROM syscat.packages WHERE pkgschema = r.routineschema AND pkgname = 'P'||SUBSTR(CHAR(r.lib_id+10000000),2) AND valid !='Y' ) ) ORDER BY spname;

  获得的结果如下:

  清单11:查找非法存储过程的结果

  SPNAME ---------------------------------- TEST.DEMO_INFO_8 (TEST. P3550884)

  可以使用下面的命令rebind它们

  清单12:Rebind 非法存储过程语法

  rebind package packagename resolve any@

  Packagename就是查询结果中括号里的值。例如,如果rebind上面查出来的存储过程。我们只需要执行下面语句

  清单13:Rebind 非法存储过程

  rebind package TEST.P3550884 resolve any@

  当然,如果此存储过程程序本身有问题,需要先修改存储过程代码后再进行编译。

  类似的,通过下面的代码可以获得非法的视图。

  清单14:获得非法的视图

  SELECT RTRIM(viewschema) || '.' || RTRIM(viewname) AS viewname FROM SYSCAT.views WHERE valid = 'X' ORDER BY viewname;

  结束语

  本文介绍了我们在 DB2 存储过程开发中经常用到的一些技巧。同时这些技巧也是编写优秀存储过程的基本要求。本文介绍的一些技巧只是揭开了高效使用 DB2 的冰山一角。DB2 为我们提供了丰富和强大的功能。在使用 DB2 的时候,我们应当深入理解其原理,找出更多的最佳实践与大家分享。

  参考资料

  Red book: IBM DB2 UDB Command Reference Version 8

  Red Book:IBM DB2 UDB Application Development Guide

上一页  [1] [2] [3] [4] [5] 

 

 
文章录入:编辑01    责任编辑:编辑01 
  • 上一篇文章:

  • 下一篇文章:

  •  
    相关文章
    原创地带
    24小时热门帖子