35.1. 概念

嵌入式 SQL 程序由用普通编程语言(在本例中为 C)编写的代码组成,在特殊标记的部分中与 SQL 命令混合在一起。要构建程序,首先将源代码(*.pgc)通过嵌入式 SQL 预处理程序,然后将其转换为普通的 C 程序(*.c),然后再由 C 编译器对其进行处理。 (有关编译和链接的详细信息,请参见Section 35.10)。转换后的 ECPG 应用程序通过嵌入式 SQL 库(ecpglib)调用 libpq 库中的函数,并使用常规的前端-后端协议与 PostgreSQL 服务器通信。

与从 C 代码处理 SQL 命令的其他方法相比,嵌入式 SQL 具有优势。首先,它可以避免在 C 程序中来回传递信息的繁琐工作。其次,在构建时检查程序中的 SQL 代码的语法正确性。第三,C 语言中的嵌入式 SQL 是 SQL 标准中指定的,并受许多其他 SQL 数据库系统支持。 PostgreSQL 实现被设计为尽可能符合该标准,并且通常可以相对容易地将为其他 SQL 数据库编写的嵌入式 SQL 程序移植到 PostgreSQL。

如前所述,为嵌入式 SQL 接口编写的程序是普通的 C 程序,其中插入了特殊代码以执行与数据库相关的操作。此特殊代码始终具有以下形式:

EXEC SQL ...;

这些语句在语法上代替了 C 语句。根据特定的语句,它们可以出现在全局级别或函数内。嵌入式 SQL 语句遵循普通 SQL 代码的区分大小写规则,而不遵循 C 的区分大小写规则。它们还允许嵌套的 C 样式 Comments,这些 Comments 是 SQL 标准的一部分。但是,程序的 C 部分遵循不接受嵌套 Comments 的 C 标准。

以下各节说明所有嵌入式 SQL 语句。