更改开始

使用 Db2 coprocessor

更改开始编译时,您可以使用 Db2 coprocessor 来处理 SQL 语句。 使用 Db2 coprocessor ,编译器会扫描程序,并将所有SQL语句和主机变量信息复制到数据库请求模块(DBRM)中。 Db2 coprocessor 是应用程序中处理SQL语句的推荐方法。 与 Db2 precompiler 相比, Db2 coprocessor 对SQL程序的限制更少,并且更全面地支持最新的SQL和编程语言增强功能。更改结束

准备工作

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

关于本任务

Db2 coprocessor 在编译时处理SQL语句。

图 1。 包含嵌入式SQL的应用程序的准备过程概述。 Db2 协处理器可以合并某些语言的预编译和编译步骤。
开始图描述。 该图显示,您预先编译SQL语句,然后在运行 DB2 应用程序之前将DBRM绑定到计划或包。 或者, DB2 协处理器将预编译和编译步骤结合在一起,不会为您的应用程序创建修改后的源代码。 结束图描述。
例外情况: 对于 ` PL/I `,该函数由 ` PL/IDb2 coprocessor ` 预处理器调用,而非编译器。

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

例如,当您使用 Db2 coprocessor 处理SQL语句时,可以在程序中执行以下操作:
  • 使用结构化主机变量的全限定名称。
  • 在嵌套程序的任何级别都包含SQL语句,而不仅仅是在顶层源文件中。(虽然可以在嵌套程序的任何级别包含 SQL 语句,但必须将整个程序作为一个单元进行编译。)
  • 使用嵌套的SQL INCLUDE语句。
  • 仅适用于C或C++程序,请使用可变长度格式编写应用程序。
  • 仅对于C或C++程序,当程序使用不同的代码页时,使用与代码页相关的字符,例如左括号和右括号,而不使用三字符表示法。

过程

要使用 Db2 coprocessor 处理SQL语句,请执行下列操作之一:

  • 提交一个JCL作业来处理SQL语句。 包含以下信息:
    • 在编译程序时指定SQL编译器选项:

      SQL编译器选项表明您希望编译器调用 Db2 coprocessor。 在SQL关键字后用括号指定SQL处理选项列表。 表1 列出了您可以指定的选项。

      对于 COBOL 和 PL/I ,请将 SQL 处理选项列表用单引号或双引号括起来。 对于 PL/I ,请用逗号、空格或两者交替分隔列表中的选项,如下例所示:

      C/C++ SQL(APOSTSQL STDSQL(NO))
      COBOL SQL("APOSTSQL STDSQL(NO)")
      PL/I PP(SQL("APOSTSQL,STDSQL(NO)")
    • 对于使用 BIGINT 或 LOB 数据类型的 PL/I 程序,在编译程序时请指定以下编译器选项:
      LIMITS(FIXEDBIN(63), FIXEDDEC(31))
    • 如果需要,请增大用户区域的大小,以便为 Db2 coprocessor 提供更多的内存。
    • 在编译步骤的JCL中为以下数据集添加DD语句:
      Db2 载入库 (前缀.SDSNLOAD)
      Db2 coprocessor 调用 Db2 模块来处理SQL语句。 因此,在编译器的STEPLIB连接中,您需要包含 Db2 加载库数据集的名称。
      DBRM 图书馆
      Db2 coprocessor 生成 DBRM。 DBRM和DBRM库在 Db2 协处理器的输出中进行了描述。 您需要添加一个DBRMLIB DD语句,用于指定DBRM库数据集。
      SQL INCLUDE语句库
      如果您的程序包含SQL INCLUDE 成员名称语句,用于指定源程序的辅助输入,则还需要为成员名称指定数据集。 在编译步骤的 SYSLIB 串联中包含包含成员名称的数据集名称。
  • 更改开始请从 z/OS® UNIX System Services 调用 Db2 coprocessor更改结束
    如果您从 z/OS UNIX System Services 调用 Db2 coprocessor ,可以选择在分区数据集或 HFS 文件中生成 DBRM。

    当您调用 Db2 coprocessor 时,请指定SQL编译器选项。 SQL编译器选项表明您希望编译器调用 Db2 coprocessor。 在SQL关键字后用括号指定SQL处理选项列表。 有关可指定的选项列表,请参阅 SQL处理选项

    更改开始DBRM的文件名按照DRBMLIB中的描述确定。 更改开始对于C和C++以外的主机语言,不支持DBRMLIB选项,文件名始终是生成的。更改结束 对于C和C++,您可以指定以下选项之一:更改结束

    • 分区数据集的名称。 以下示例调用C/C++ Db2 coprocessor (使用 c89 编译器)编译一个示例C程序,并要求将生成的DBRM存储在 userid.dbrmlib.data 数据集的test成员中:
      c89 -Wc,"sql,dbrmlib(//'userid.dbrmlib.data(test)'),langlvl(extended)" -c t.c
    • HFS文件的名称。 名称可以是限定性的、部分限定性的或非限定性的。 文件路径最多可包含1024个字符,文件名最多可包含255个字符。 文件名的前8个字符(不包括文件扩展名)在文件系统中必须唯一。

      例如,假设您的目录结构为 /u/USR001/c/example ,当前工作目录为 /u/USR001/c。 下表举例说明了如何使用DBRMLIB选项指定HFS文件名以及如何解析文件名。

      表 1. 如何指定HFS文件来存储DBRM
      如果您指定…… DBRM生成于......
      dbrmlib(/u/USR001/sample.dbrm) /u/USR001/sample.dbrm
      dbrmlib(example/sample.dbrm) /u/USR001/c/example/sample.dbrm
      dbrmlib(../sample.dbrm) /u/USR001/sample.dbrm
      dbrmlib(sample.dbrm) /u/USR001/c/sample.dbrm

      以下示例调用 Db2 coprocessor (使用 c89 编译器)编译一个示例C程序,并要求将生成的DBRM存储在 tmp 目录下的 test.dbrm 文件中:

      c89 -Wc,"sql,dbrmlib(/tmp/test.dbrm),langlvl(extended)" -c t.c
    更改开始以下示例调用 Db2 coprocessor 编译一个示例 COBOL 程序,使用 Enterprise COBOL 针对 z/OS 6.2 或更高版本的编译器:
    cob2 myprogram.cbl -c myprogram -dbrmlib -qsql
    更改结束
    更改开始以下示例调用 Db2 coprocessor 来编译来自 Enterprise PL/I 的示例 PL/I 程序,适用于 z/OS 5.2 或更高版本的编译器:
    pli -c -qpp=sql -qdbrmlib -qrent myprogram.pli
    更改结束

    如果您要求以 HFS 文件格式生成 DBRM,则可以使用 Db2 command line processor BIND 命令绑定生成的 DBRM。 有关使用 Db2 command line processor BIND命令的更多信息,请参阅将HFS文件中的DBRM绑定到软件包或集合。 您也可以选择使用 oput 和 oget 命令将 DBRM 复制到分区数据集成员中,然后使用常规 JCL 绑定 DBRM。

结果

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

更改结束