在应用程序中嵌入SQL语句

您可以在源程序中包含SQL语句,并将其提交至 Db2 coprocessorDb2 precompiler。 此类语句被称为应用程序中的嵌入语句。 嵌入式语句可以放置在应用程序中允许主机语言语句的任何位置。 每个嵌入语句前必须有一个或多个关键字,以表明该语句是 SQL 语句。

提示: Db2 coprocessor 是应用程序中处理SQL语句的推荐方法。 与 Db2 precompiler 相比, Db2 coprocessor 对SQL程序的限制更少,并且更全面地支持最新的SQL和编程语言增强功能。 参见使用 Db2 协处理器处理SQL语句
  • 在 C 语言和 COBOL 中,每条嵌入语句之前都必须有关键字 EXEC SQL
  • 在Java™中,每个嵌入式语句都必须以关键字 #sql 开头。
  • 在REXX中,每个嵌入语句必须以关键字 EXECSQL 开头。

应用程序中嵌入的可执行语句

如果主机语言语句在相同位置指定,则应用程序中嵌入的可执行语句将在每次执行主机语言语句时执行。 (因此,例如,循环中的语句在每次循环时执行,而条件结构中的语句仅在条件满足时执行。)

嵌入式语句可以包含对宿主变量的引用。 以这种方式引用的宿主变量有两种使用方式:
作为输入
在执行语句时,使用宿主变量的当前值。
作为输出
执行语句后,变量被赋值。

特别是,表达式和谓词中所有对宿主变量的引用实际上都由变量的当前值代替;也就是说,变量被用作输入。 其他参考资料的处理方式在每条陈述中单独说明。

通过设置 SQLCA.1中的 SQLCODE和SQLSTATE字段,可以指示语句执行成功与否。因此,您必须通过测试SQLCODE或SQLSTATE来跟踪所有可执行语句。 或者,您也可以使用WHENEVER语句(本身不可执行)在执行嵌入式语句后立即更改控制流程。

应用程序中嵌入的非执行语句

嵌入式非执行语句仅由 Db2 coprocessorDb2 precompiler 处理。 Db2 coprocessorDb2 precompiler 报告了报表中遇到的任何错误。 该语句永远不会被执行,如果将其放置在应用程序的可执行语句中,则相当于不执行。 因此,不要在听到此类声明后立即测试SQL返回代码。

1 当SQL处理选项STDSQL(YES)生效时,SQLCA中不能有SQLCODE和SQLSTATE。 参见 SQL标准语言