PostgreSQL 中文参考文档
🌐 英文原版 官方 ↗

34.1. 基本概念 #

嵌入式 SQL 程序由用普通编程语言(这里是 C)编写的代码构成, 其中混有位于特殊标记区域中的 SQL 命令。要构建该程序, 先把源代码(*.pgc)通过嵌入式 SQL 预处理器处理,把它转换成普通的 C 程序(*.c), 然后就可以用 C 编译器处理它。 (关于编译和链接的细节见 Section 34.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 的规则。此外,按照 SQL 标准, 它们允许嵌套的 C 风格注释。而程序的 C 部分 则遵循 C 的标准,即不接受嵌套注释。 同样,嵌入式 SQL 语句在解析带引号的字符串 和标识符时也使用 SQL 规则,而非 C 规则。 (分别见 Section 4.1.2.1 和 Section 4.1.1。注意, ECPG 假定 standard_conforming_strings 为 on。) 当然,程序的 C 部分遵循 C 的引用规则。

以下各节解释所有的嵌入式 SQL 语句。