使用 Db2 precompiler

Db2 precompiler 扫描程序,将所有SQL语句和主机变量信息复制到数据库请求模块(DBRM)中。 Db2 precompiler 还会返回经过修改的源代码,以便在编译程序时,SQL语句不会导致错误。

准备工作

确保您的应用程序开发编程语言符合 Db2 12 程序目录中 “使用 Db2 precompiler 构建应用程序”中列出的最低要求。 请参阅 Db2 12的程序目录

提示: 更改开始 Db2 coprocessor 是应用程序中处理SQL语句的推荐方法。 与 Db2 precompiler 相比, Db2 coprocessor 对SQL程序的限制更少,并且更全面地支持最新的SQL和编程语言增强功能。 参见使用 Db2 协处理器处理SQL语句更改结束

更改开始如果您正在使用 Db2 precompiler ,请确保在程序中,宿主变量和宿主变量数组的名称是唯一的,即使变量和变量数组位于不同的块、类、过程、函数或子例程中。 您可以使用结构名称限定名称,使其独一无二。更改结束

关于本任务

在将 SQL 语句和主机变量信息复制到 DBRM 中并返回修改后的源代码后,您可以编译并链接编辑修改后的源代码。

下图说明了使用 Db2 预编译器时的程序准备过程。 在源程序中使用 Db2 预编译器处理SQL语句后,您将创建一个加载模块,可能是一个或多个包,以及一个应用程序计划。 创建加载模块需要将预编译器生成的修改后的源代码编译为目标程序,并对目标程序进行链接编辑,以创建加载模块。 创建软件包或应用程序计划是 Db2 独有的流程,需要使用BIND PACKAGE命令绑定一个或多个由 Db2 预编译器创建的DBRM。

图 1。 使用 Db2 预编译器进行程序准备
开始图 summary.The 显示了使用 DB2 预编译器创建负载模块和计划的过程。 可提供详细说明。

在运行 Db2 precompiler 之前,请使用DCLGEN获取准确的SQL DECLARE TABLE语句。 Db2 precompiler 根据程序中的SQL DECLARE TABLE语句检查表和列的引用,而不是实际存在的表和列。

Db2 在预编译程序时,不需要激活。

您无需在绑定DBRM并运行程序的同一 Db2 子系统上预编译程序。 如果原始程序没有使用当前版本独有的任何 Db2 属性,则可以绑定DBRM并在上一版本级别的 Db2 子系统上运行。 您还可以在当前版本上运行之前绑定在上一版本子系统上的应用程序。

过程

使用 Db2 precompiler 处理SQL语句:

  1. 请执行以下操作,确保您的程序已准备好由 Db2 precompiler 进行处理。
    有关传递给 Db2 precompiler 的程序的标准的信息,请参阅 Db2 预编译器的输入
  2. 如果您计划运行多个预编译作业,并且不使用 DFSMSdfp 分区数据集扩展(PDSE),请更改 Db2 语言准备程序(DSNHCOB、 DSNHCOB2、DSNHICOB、DSNHFOR、DSNHC、DSNHPLI、DSNHASM、DSNHSQL),以指定 DISP=OLD 参数,而不是 DISP=SHR 参数。
    工作 DSNTIJMV 中的 Db2 语言准备程序使用 DISP=OLD 参数来确保数据完整性。 然而,安装过程会将DBRM库数据集的DISP=OLD参数转换为DISP=SHR,这可能会在您运行多个预编译作业时导致数据完整性问题。
  3. 使用以下方法之一启动预编译过程:
    建议 :指定SOURCE和XREF预编译器选项,以从 Db2 precompiler 获取完整的诊断输出。 如果您需要在程序源代码无错误并准备好进行链接编辑之前对其进行多次预编译和编译,那么此输出非常有用。

结果

Db2 precompiler 的主要输出是一个数据库请求模块(DBRM)。 然而, Db2 precompiler 还生成修改后的源语句、源语句列表、引用主机名和列的语句列表以及诊断信息。 更多信息,请参阅 Db2 预编译器的输出

后续操作

使用JCL编写带有面向对象扩展的程序
如果您的 C++ 或 Enterprise COBOL for z/OS® 程序满足这两个条件,则需要特殊的 JCL 来准备它:
  • 该程序由多个数据集或成员组成。
  • 不止一个数据集或成员包含 SQL 语句。

您必须分别预编译每个数据集或成员的内容,但预链接器必须接收所有编译器的输出。

JCL 过程 DSNHCPP2 位于数据集 DSN1210. SDSNSAMP 的成员 DSNTIJMV 中,它向您展示了使用 C++ 实现此目的的一种方法。

预编译批处理程序
当您将 SQL 语句添加到应用程序时,必须预先编译应用程序并将生成的 DBRM 绑定到一个包中,如准备应用程序在 Db2 for z/OS 上运行中所述。