Fortran 发出SQL语句的应用程序

只要在可执行语句的位置,您就可以在 Fortran 程序中编写SQL语句。 如果 SQL 语句位于 IF 语句中,预编译器会生成任何必要的 THEN 和 END IF 语句。

Fortran 源语句必须是固定长度的80字节记录。 Db2 预编译器不支持自由格式的源代码输入。

Fortran 程序中的每个SQL语句必须以EXEC SQL开头。 EXEC和SQL关键字必须出现在同一行,但语句的其余部分可以出现在后续行中。

您可以在 Fortran 程序中按如下方式编写UPDATE语句:

 EXEC SQL
C  UPDATE DSN8C10.DEPT
C  SET MGRNO = :MGRNUM
C  WHERE DEPTNO = :INTDEPT

在同一行中,不能将SQL语句与另一个SQL语句或 Fortran 语句放在一起。

Fortran 语句中不需要空格来分隔单词,但SQL语言需要空格。 嵌入式SQL的规则遵循SQL语法的规则,要求使用一个或多个空格作为分隔符。

注释
除了关键字EXEC和SQL之间,您可以在任何可以使用空格的嵌入式SQL语句中插入 Fortran 注释行。 您可以在任何嵌入式 SQL 语句中加入 SQL 注释。 更多信息,请参阅 SQL注释

Db2 预编译器不支持在 Fortran 程序中将感叹号(!)作为注释识别字符。

SQL语句的延续
SQL语句的行延续规则与 Fortran 语句的规则相同,但必须在一行中指定EXEC SQL。 本主题中的SQL示例在第六列中带有Cs,表示它们是EXEC SQL的延续。
分隔符在 Fortran
在您的 Fortran 程序中,使用开头关键字 EXEC SQL

和行尾或上一行的末尾。

声明表和视图
您的 Fortran 程序还应包含DECLARE TABLE语句,用于描述每个表并查看程序访问。
Fortran 程序中的动态SQL
一般来说, Fortran 程序可以轻松处理动态SQL语句。 如果数据类型和返回的字段数量是固定的,则可以处理SELECT语句。 如果您想使用变量列表SELECT语句,则需要使用SQLDA,如定义SQL描述符区域(SQLDA)中所述。

您可以在语句PREPARE和EXECUTE IMMEDIATE中使用 Fortran 字符变量,即使它是固定长度的。

包括代码
要包含来自分区数据集成员的 SQL 语句或 Fortran 主机变量声明,请在源代码中要包含语句的位置使用以下 SQL 语句:
EXEC SQL INCLUDE member-name

您不能嵌套SQL INCLUDE语句。 您不能使用 Fortran INCLUDE编译器指令来包含SQL语句或 Fortran 宿主变量声明。

页边距
在第7-72列(含)中编写SQL语句。 如果EXEC SQL在指定的左边界之前开始,则 Db2 预编译器无法识别SQL语句。
名称

您可以使用任何有效的 Fortran 名称作为主变量。 不要使用以“DSN”开头的外部输入名称或以“SQL”开头的主变量名称。 这些名字是 Db2 的专用名称。

除定义 Fortran DEBUG数据包外,请勿使用DEBUG一词。 不要使用函数、隐式、程序和子程序等词汇来定义变量。

序号
Db2 预编译器生成的源语句不包含序列号。
声明标签
您可以在第1至第5列中指定SQL语句的编号。 然而,在程序准备期间,带有标签的 SQL 语句在生成执行 SQL 语句的代码之前会生成带有该标签的 Fortran CONTINUE 语句。 因此,带标签的SQL语句绝不应该成为DO循环中的最后一个语句。 此外,您不应该在第一个可执行的SQL语句之前标记SQL语句(例如INCLUDE和BEGIN DECLARE SECTION),因为可能会发生错误。
WHENEVER 语句
SQL语句中WHENEVER语句中的GOTO子句的目标必须是 Fortran 源代码中的标签,且必须引用同一子程序中的语句。 WHENEVER语句仅适用于同一子程序中的SQL语句。
特别 Fortran 注意事项
以下注意事项适用于用 Fortran 编写的程序:
  • 您不能在源代码中使用@PROCESS语句。 请在PARM字段中指定编译器选项。
  • 您不能使用SQL INCLUDE语句来包含以下语句:PROGRAM、SUBROUTINE、BLOCK、FUNCTION或IMPLICIT。
Db2 支持VS 的版本3第1版(或更高版本),但有以下限制: Fortran
  • 不支持并行选项。 包含 SQL 语句的应用程序不得使用 Fortran 并行性。
  • 在嵌入式 SQL 中不能使用字节数据类型,因为字节不是可识别的宿主数据类型。
处理 SQL 错误代码
Fortran 应用程序可以从 获取有关SQL错误的更多信息。 Db2 更多信息,请参阅 《在C和C++应用程序中处理SQL错误代码 》。