首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DB2 syscat.routines与sysibm.routines

DB2 syscat.routines与sysibm.routines
EN

Database Administration用户
提问于 2017-02-22 07:25:34
回答 1查看 1.5K关注 0票数 2

我需要从DB2 luw中选择所有例程名称。我看到了以下目录表:

  • sysibm.routines
  • syscat.routines

如果我运行以下查询:

代码语言:javascript
复制
select count(*) from sysibm.routines;
select count(*) from syscat.routines;

结果有很大的差别。有人能说出这些视图之间的区别吗?在选择所有例程名称的任务中应该使用哪一个视图?

EN

回答 1

Database Administration用户

回答已采纳

发布于 2017-02-22 13:18:09

SYSIBM.ROUTINES和SYSCAT.ROUTINES实际上都是“真实”目录表SYSIBM.SYSROUTINES上的视图。

代码语言:javascript
复制
SELECT TEXT
FROM SYSCAT.VIEWS
WHERE VIEWSCHEMA = 'SYSIBM' AND VIEWNAME = 'ROUTINES';

SELECT TEXT
FROM SYSCAT.VIEWS
WHERE VIEWSCHEMA = 'SYSCAT' AND VIEWNAME = 'ROUTINES';

我不会在这里发布结果,因为我不知道IBM是否认为它是专有的(从技术上讲,它是来自DB2本身的)。无论如何,如果您查看视图源代码(首先要用一些SQL lint-like工具重新格式化它!)你会注意到几件事:

  • SYSIBM.ROUTINES排除了类型为"T“和"R”的函数(即表函数和行函数,因此它只包含标量函数、聚合函数和过程)。这可能解释了很多不同之处。
  • SYSIBM.ROUTINES排除了模式SYSFUN中的例程。这可能解释了其余的区别,因为在SYSFUN中有100+例程。
  • SYSCAT.ROUTINES只从SYSIBMINTERNAL模式中排除例程(其中只有少数例程--考虑到上面的限制,不确定所有/部分/没有在SYSIBM.ROUTINES中出现)。
  • 每个视图中都有大量的联接,但我很确定它们都是1比1的,并且不会影响结果的基数,这是由SYSIBM.SYSROUTINES决定的(这些联接大多用于提取结果类型或排序规则的细节)。

一些背景:

  • SYSIBM模式中以SYS开头的表是一切都基于的真正的目录表。一般来说,我不会去理会这些东西,因为它们是没有文档的,而且使用起来也有点麻烦(但是,在像DB2 for z/OS这样的东西中,我上次使用它时缺少SYSCAT,它们是您仅有的表)。
  • SYSIBM模式中不以SYS开头的视图的结构与标准信息_图式非常相似。某些东西可能会这样使用它们(可能是一些JDBC方法,或者是各种驱动程序中的目录函数?)但是,由于它们在其他方面没有文档化,所以很难在不查看它们的视图定义(使用上面的技巧)的情况下确切地知道它们包括/排除什么。
  • SYSCAT模式中的视图是真正有用的视图。它们是有据可查,通常很容易使用(遗憾的是,它们也是特定于LUW的DB2 )。

换句话说,我通常会把SYSCAT结果看作是“福音”,但是如果你想确切地理解它们所显示的内容,那么你需要深入了解它们的来源。

票数 2
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/165138

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档