一个嵌入式 SQL 程序由一种普通编程语言编写的代码(在这里是 C)和位于特殊标记的小节中的 SQL 命令混合组成。
要构建该程序,源代码(*.pgc)首先会通过嵌入式 SQL 预处理器,它会将源代码转换成一个普通 C 程序(*.c),并且后来它可以被一个 C 编译器所处理。(编译和链接详见第 34.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 的大小写敏感性规则。它们也允许嵌套的 C 风格注释,符合 SQL 标准。然而,程序的 C 部分遵循 C 标准,不接受嵌套注释。嵌入的SQL语句同样使用 SQL 规则,而不是 C 规则,来解析引用字符串和标识符。
(分别参见 第 4.1.2.1 节 和 第 4.1.1 节 。请注意 ECPG 假设 standard_conforming_strings 为 on。)
当然,程序的 C 部分遵循 C 引用规则。
下列小节解释了所有嵌入式 SQL 语句。