处理SQL语句,为程序做准备
准备运行SQL应用程序的第一步是处理程序中的SQL语句。 如需处理您的留言,请发送邮件至 Db2 coprocessor 或 Db2 precompiler。 在此步骤中,SQL语句被替换为对 Db2 语言接口模块的调用,并创建一个DBRM。
准备工作
请确保您的应用程序开发编程语言符合 Db2 12 程序目录中“编程语言”部分列出的最低要求。 请参阅 Db2 12的程序目录。
关于本任务
由于大多数编译器无法识别 SQL 语句,因此您可以使用 Db2 coprocessor 或 Db2 precompiler 来避免编译器错误。
您可以使用 Db2 coprocessor 作为主机语言。 当您使用 Db2 coprocessor 时,编译器(而非 Db2 precompiler )会扫描程序并返回修改后的源代码。 Db2 coprocessor 还生产DBRM。
Db2 coprocessor 是应用程序中处理SQL语句的推荐方法。 与 Db2 precompiler 相比, Db2 coprocessor 对SQL程序的限制更少,并且更全面地支持最新的SQL和编程语言增强功能。 参见使用 Db2 协处理器处理SQL语句。
Db2 precompiler 会扫描程序并返回修改后的源代码,您可以对其进行编译和链接编辑。 预编译器还会生成一个DBRM(数据库请求模块)。 您可以使用BIND子命令将此DBRM绑定到一个软件包中。 完成这些步骤后,您可以运行您的 Db2 应用程序。
- Db2 DSNHDECP模块版本
- 当您在程序中处理 SQL 语句时,如果 DSNHDECP 中的 Db2 版本是系统提供的默认版本,则 Db2 会发出警告,但处理仍会继续。 在这种情况下,请确保 Db2 在 DSNHDECP 中使用的信息准确反映了您的环境。
过程
要在应用程序中处理SQL语句,请使用以下方法之一:
结果
- Db2 coprocessor 或 Db2 precompiler 输出
Db2 coprocessor 或 Db2 precompiler 的主要输出是一个数据库请求模块(DBRM)。 但是, Db2 coprocessor 或 Db2 precompiler 也会生成修改后的源语句、源语句列表、引用主机名和列的语句列表以及诊断信息。 更多信息,请参阅 Db2 预编译器的输出。
- 语义检查的 Db2 coprocessor 局限性 Db2 precompiler
该 Db2 coprocessor 程序对SQL语句中的 Db2 precompiler 数据引用进行有限的语义检查。 这些检查是针对程序中的表声明进行的,而非针对 Db2 目录。
在 Db2 precompilerDb2 coprocessor 处理SQL语句时执行的语义检查示例如下:
- 该程序至少包含一个表声明,如果其中包含表或列引用。
- 对于单值SELECT语句,INTO 主机变量子句的数量与选择列表值的数量相匹配,且每个主机变量具有兼容的类型。
- 对于UPDATE语句,每个被设置的列与它被设置的值兼容。
- 对于INSERT语句,插入值的数量不超过表的列数,且插入值的类型兼容。
- 对DATE和TIME值进行有限有效性检查,允许使用CHAR数据类型。
- 对于所有SQL语句,算术运算的操作数均为数值类型,且如BETWEEN或IN等关系运算的操作数需相互兼容。
语义检查在不存在表列表的情况下终止,例如语句包含嵌套表表达式或连接时。 此外,当IN列表谓词包含子查询时,语义检查将跳过该谓词中列的兼容性检查。 在这些情况下,前文所述的检查可推迟至绑定过程执行,而对列和表引用的完整检查始终推迟至绑定过程——此时这些引用将与 Db2 目录进行比对验证。
后续操作
如果应用程序包含 CICS® 命令,则必须在编译前翻译程序。 更多信息,请参阅 CICS 程序中命令级语句的翻译。