嵌入式 SQL 程序包括用普通编程语言(本例中为 C)编写的代码,其中混合了在特殊标记部分中的 SQL 命令。要构建该程序,首先将源代码 (*.pgc
) 通过嵌入式 SQL 预处理器,将其转换为普通 C 程序 (*.c
),然后才能由 C 编译器处理。(有关编译和链接的详细信息,请参见第 36.10 节。)转换后的 ECPG 应用程序通过嵌入式 SQL 库 (ecpglib) 调用 libpq 库中的函数,并使用常规前端-后端协议与 PostgreSQL 服务器通信。
嵌入式 SQL 优于其他从 C 代码处理 SQL 命令的方法。首先,它负责将信息繁琐地传递到 C 程序中的变量,以及从变量中传递信息。其次,程序中的 SQL 代码在构建时会检查其语法正确性。第三,C 中的嵌入式 SQL 在 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
为 on
。)当然,程序的 C 部分遵循 C 引号规则。
以下各节说明所有嵌入式 SQL 语句。