Chapter 30. ecpg - 在 C 里嵌入 SQL

Table of Contents
30.1. 概念
30.2. 与数据库服务器连接
30.3. 关闭连接
30.4. 运行 SQL 命令
30.5. 选取一个连接
30.6. 使用宿主变量
30.6.1. 概述
30.6.2. 声明段
30.6.3. SELECT INTOFETCH INTO
30.6.4. 指示器
30.7. 动态 SQL
30.8. 使用 SQL 描述符范围
30.9. 错误处理
30.9.1. 设置回调
30.9.2. sqlca
30.9.3. SQLSTATESQLCODE 之比较
30.10. 头文件
30.11. 处理嵌入的 SQL 程序
30.12. 库函数
30.13. 内部

这章描写一种用于 PostgreSQL 的嵌入SQL包。它是由 Linus Tolke ()和 Michael Meskes ()写的。 最初它是为了在 C 里面使用书写的。它也可以用于 C++, 但是它还不能识别所有 C++ 构造。

这份文档相当不完整。但是因为这个接口是标准,所以我们可以在有关 SQL 的资源里找到许多额外的信息。

30.1. 概念

嵌入 SQL 程序主要由一种普通的编程语言代码组成,在我们这个场合中是 C, 并且在其中与一些特殊标记的段混合。要制作这样的程序,源代码首先经过嵌入的 SQL 预处理器处理,它把源代码转换成普通的 C 程序, 然后这个程序可以用 C 编译器进行处理。

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

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

EXEC SQL ...;

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

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