33.1. 概念

嵌入SQL程序主要由一种普通的编程语言代码组成, 在我们这个场合中是C,并且在其中与一些特殊标记的段混合。 要制作这样的程序,源代码(*.pgc) 首先经过嵌入的SQL预处理器处理, 它把源代码转换成普通的C程序(*.c), 然后这个程序可以用C编译器进行处理。 关于编译和链接的细节参阅第 33.10 节。 转变的ECPG应用在libpq库中通过嵌入的SQL库(ecpglib)调用函数。 并且使用正常的前后端协议与PostgreSQL服务器通信。

嵌入的SQL相比于其它的从 C代码中处理SQL命令的优点有几条。 首先,它照看那些从你的C 程序中的变量中传来传去数值的事情。 第二,在编译时检查程序中SQL代码句法正确性。 第三,在C代码里嵌入SQL是定义 在SQL标准里的, 并且被许多其它的SQL数据库支持。 PostgreSQL的实现被设计成尽可能匹配这个标准, 并且通常可以把为其它SQL数据库书写的SQL移植到 PostgreSQL中来,反之亦然。

如上所述,为嵌入SQL 接口写的程序通常是带着插入进来的特殊代码的C程序, 这些特殊代码用于执行与数据库相关的动作。 这些特殊代码通常的形式是下面这样:

EXEC SQL ...;

这些语句语法上占据C语句的位置。根据具体语句的不同, 它们可以出现在全局环境中或者出现在一个函数里。 嵌入的SQL语句遵循普通SQL 代码的大小写敏感规则,而不是遵循C代码的。

下面的小节都是用来解释所有的嵌入SQL语句的。