36.1. 概念

一个嵌入式 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_stringson.) 当然, 程序的C部分遵循 C 引用规则。

下列小节解释了所有嵌入式 SQL 语句。