编译嵌入式 SQL 程序

由于嵌入式 SQL 程序包含 SQL 和主机语言语句的组合,因此无法将其直接提交到主机语言的编译器。 相反,通过多步骤流程对其进行编译。 尽管此流程因产品不同而异,但所有产品的步骤均大致相同。

此图显示了编译嵌入式 SQL 程序所需的步骤。

Steps to compile an embedded SQL program

编译嵌入式 SQL 程序涉及五个步骤:

  1. 将嵌入式 SQL 程序提交到 SQL 预编译器(一种编程工具)。 预编译器会扫描该程序、查找嵌入式 SQL 语句并对它们进行处理。 DBMS 支持的每种编程语言都需要不同的预编译器。 DBMS 产品通常为一种或多种语言提供预编译器,其中包括 C、Pascal、COBOL、Fortran、Ada、PL/I 和各种汇编语言。

  2. 预编译器可生成两个输出文件。 第一个文件是源文件,已去除其嵌入式 SQL 语句。 取而代之的是,预编译器替换对专有 DBMS 例程的调用,这些例程提供程序与 DBMS 之间的运行时链接。 通常,这些例程的名称和调用序列仅对预编译器和 DBMS 已知;它们不是 DBMS 的公共接口。 第二个文件是程序中使用的所有嵌入式 SQL 语句的副本。 此文件有时称为数据库请求模块 (DBRM)。

  3. 来自预编译器的源文件输出将提交到主机编程语言的标准编译器(如 C 编译器或 COBOL 编译器)。 编译器处理源代码并生成对象代码作为其输出。 请注意,此步骤与 DBMS 或 SQL 无关。

  4. 链接器接受由编译器生成的对象模块,将它们与各种库例程链接,并生成可执行程序。 链接到可执行程序的库例程包括步骤 2 中所述的专有 DBMS 例程。

  5. 由预编译器生成的数据库请求模块将提交到特殊的绑定实用工具。 此实用工具检查 SQL 语句、分析、验证和优化它们,然后为每个语句生成访问计划。 结果是整个程序的合并访问计划,表示嵌入式 SQL 语句的可执行版本。 绑定实用工具将该计划存储在数据库中,通常为其分配将使用该计划的应用程序的名称。 此步骤是在编译时还是运行时发生取决于 DBMS。

请注意,用于编译嵌入式 SQL 程序的步骤与前面处理 SQL 语句中描述的步骤密切相关。 需要特别注意的是,预编译器将 SQL 语句与主机语言代码分开,绑定实用工具会分析和验证 SQL 语句并创建访问计划。 在编译时执行步骤 5 的 DBMS 中,在编译时执行处理 SQL 语句的前四个步骤,而最后一个步骤(执行)则在运行时发生。 这样做的效果是,可以非常快速地在此类 DBMS 中执行查询。