0

如果两个都是 db2-cobol 程序,如何从主程序运行两个子程序?

我的主程序名为“Mainpgm1”,它正在调用我的名为“subpgm1”和“subpgm2”的子程序,它们是被调用的程序,我只喜欢静态调用。

实际上,我现在使用的是一个名为 package 的语句,而不是一个计划和一个成员,两者都在“db2bind”(绑定程序)以及一个具有 dsn 名称的 dbrmlib 中。

主要问题是,当我绑定两个 db2-cobol 程序时,“db2bind”中的哪些更改受到影响。

同样,在'DB2RUN'(运行程序)中也是如此。

4

1 回答 1

1

每个包含 SQL 的程序(或子程序)都需要进行预处理以创建 DBRM。然后 DBRM 被绑定到一个 PLAN 中,该 PLAN 由 LOAD 模块在运行时访问,以获得它包含的 SQL 语句的正确 DB/2 访问路径。

您已经从将所有 SQL 放在一个程序中变成了多个子程序。基本过程保持不变 - 您需要一个计划来运行程序。

DBA 经常建议,如果您有多个包含 SQL 的子程序,则为它们创建 PACKAGES,然后将 PACKAGES 绑定到 PLAN 中。曾经是一步的过程现在是两个:

  • 将 DBRM 绑定到 PACKAGE
  • 将 PACKAGES 绑定到计划中

PACKAGES 有什么大不了的?

假设您有 50 个包含 SQL 的子程序。如果为它们中的每一个创建一个 DBRM,然后将所有 50 个绑定到一个 PLAN 中,作为单个操作,构建 PLAN 将占用大量资源,因为每个程序中的每个 SQL 语句都需要分析和访问路径为他们创造。当所有 50 个子程序都是新的或已更改时,这还不错。但是,如果您有一个相对稳定的系统并且想要更改 1 个子程序,您最终会重新绑定所有 50 个 DBRMS 以创建计划 - 即使 50 个 DBRMS 中有 49 个没有更改并且最终将使用完全相同的访问路径。这不是一个很好的方法。每次对其中任何一个进行更改时,都需要编译所有 50 个子程序。

但是,如果您为每个子程序创建一个 PACKAGE,那么该 PACKAGE 就是需要真正构建的工作。它包含与其关联的 DBRM 的所有访问路径。现在,如果您只更改 1 个子程序,您只需通过将单个 DBRM 重新绑定到 PACKAGE 集合中,然后重新绑定 PLAN 来重建其 PACKAGE。但是,将一组 PACKAGES(集合)绑定到 PLAN 中比绑定系统中的所有 DBRM 占用的资源要少得多。

一旦你有了一个包含程序中使用的所有访问路径的 PLAN,就可以使用它。执行的 SQL 是来自 subprogram1 还是 subprogram2 无关紧要。只要您将 PLAN 与正在运行的 LOAD 相关联,它就应该一切正常。

每个安装都有自己的命名约定和标准,用于设置 PACKAGES、COLLECTIONS 和 PLANS。在进一步操作之前,您应该与您的数据库管理员一起查看这些内容。

以下是有关 DB/2 环境中程序准备的一些背景信息: 开发应用程序

于 2011-09-23T16:53:25.857 回答