4.8. 处理嵌入的 SQL 程序

既然现在你已经有了如何构成嵌入的 SQL C 程序的概念, 那么你可能就会向知道如何编译它们。在编译之前,你先 用嵌入的 SQL C 预编译器 处理文件,于编译器会把你使用的 SQL 语句转换成 特殊的函数调用。在编译之后,你必须用一个包含所需要的函数的特殊 库来链接目标文件。这些函数从参数中抓取信息,用 libpq 接口执行 SQL 命令,然后把结果放到声明为 输出的参数中。

预处理程序叫做 ecpg,包含在正常的 PostgreSQL 安装里面。嵌入的 SQL 程序通常 的扩展名是 .pgc。如果你有一个叫做 prog1.pgc 的程序文件,那么你可以简单 地调用

ecpg prog1.pgc

来处理它。这样将创建一个叫做 prog1.c 的文件。 如果你的输入文件不遵循建议的命名模式,那么你可以用 -o 选项 明确地声明输出文件。

处理后的文件可以正常编译,比如:

cc -c prog1.c

生成的 C 源文件包含来自 PostgreSQL 安装的 头文件,这样,如果你在一个缺省不查找的位置安装了 PostgreSQL, 那么你就必须在命令行上增加类似 -I/usr/local/pgsql/include 这样的 选项。

要链接一个嵌入的 SQL 程序,你需要包含 libecpg 库, 像这样:

cc -o myprog prog1.o prog2.o ... -lecpg

另外,你可能还需要增加一个类似 -L/usr/local/pgsql/lib 这样的选项到这个命令行上。

如果你用 make 把制作过程融合到 一个大的项目中,那么在你的 makefile 里包含下面的隐含规则 可能会比较方便:

ECPG = ecpg

%.c: %.pgc
        $(ECPG) $<

ecpg 命令的复杂语法在 PostgreSQL 7.3.3 参考手册 里有详细介绍。