# 36.1.

这个概念嵌入式 SQL 程序由以普通编程语言(在本例中为 C)编写的代码以及特殊标记部分中的 SQL 命令混合而成。要构建程序,源代码(*.pgc) 首先通过嵌入式 SQL 预处理器,将其转换为普通的 C 程序 (*。C),然后它可以由 C 编译器处理。(有关编译和链接的详细信息,请参见第 36.10 节

.) 转换后的 ECPG 应用程序通过嵌入式 SQL 库(ecpglib)调用 libpq 库中的函数,并使用普通的前端-后端协议与 PostgreSQL 服务器通信。嵌入式 SQL 在处理来自 C 代码的 SQL 命令方面优于其他方法。首先,它负责在 C 程序中与变量之间进行繁琐的信息传递。其次,在构建时检查程序中的 SQL 代码的语法正确性。第三,在 SQL 标准中指定了 C 中的嵌入式 SQL,并得到许多其他 SQL 数据库系统的支持。

PostgreSQL 实现旨在尽可能地匹配这个标准,通常可以相对容易地将为其他 SQL 数据库编写的嵌入式 SQL 程序移植到 PostgreSQL。如前所述,为嵌入式 SQL 接口编写的程序是普通的 C 程序,其中插入了特殊代码以执行与数据库相关的操作。

EXEC SQL ...;

此特殊代码始终具有以下形式:这些语句在语法上代替了 C 语句。

根据特定的语句,它们可以出现在全局级别或函数内。嵌入式 SQL 语句遵循普通 SQL 代码的区分大小写规则,而不是 C 代码。它们还允许按照 SQL 标准嵌套 C 样式的注释。然而,程序的 C 部分遵循不接受嵌套注释的 C 标准。嵌入式 SQL 语句同样使用 SQL 规则而不是 C 规则来解析带引号的字符串和标识符。(看第 4.1.2.1 节第 4.1.1 节分别。请注意,ECPG 假设standard_conforming_strings.) 当然,程序的 C 部分遵循 C 引用规则。

以下部分解释了所有嵌入式 SQL 语句。