第 36 章 ECPG — C 中的嵌入式 SQL
目录
- 36.1. 概念
- 36.2. 管理数据库连接
- 36.3. 运行 SQL 命令
- 36.4. 使用主变量
- 36.5. 动态 SQL
- 36.6. pgtypes 库
- 36.7. 使用描述符区域
- 36.8. 错误处理
- 36.9. 预处理器指令
- 36.10. 处理嵌入式 SQL 程序
- 36.11. 库函数
- 36.12. 大对象
- 36.13. C++ 应用
- 36.14. 嵌入式 SQL 命令
- ALLOCATE DESCRIPTOR — 分配一个 SQL 描述符区域
- CONNECT — 建立一个数据库连接
- DEALLOCATE DESCRIPTOR — 释放一个 SQL 描述符区域
- DECLARE — 定义一个游标
- DECLARE STATEMENT — 声明 SQL 语句标识符
- DESCRIBE — 得到有关一个预备语句或结果集的信息
- DISCONNECT — 终止一个数据库连接
- EXECUTE IMMEDIATE — 动态地预备并执行一个语句
- GET DESCRIPTOR — 从一个 SQL 描述符区域得到信息
- OPEN — 打开一个动态游标
- PREPARE — 预备一个语句以供执行
- SET AUTOCOMMIT — 设置当前会话的自动提交行为
- SET CONNECTION — 选择一个数据库连接
- SET DESCRIPTOR — 在一个 SQL 描述符区域中设置信息
- TYPE — 定义一种新数据类型
- VAR — 定义一个变量
- WHENEVER — 指定 SQL 语句触发特定类别条件时要采取的动作
- 36.15. Informix 兼容模式
- 36.16. Oracle 兼容模式
- 36.17. 内部
这一章描述了用于 PostgreSQL 的嵌入式 SQL 包。它由 Linus Tolke(<linus@epact.se>)和 Michael Meskes(<meskes@postgresql.org>)编写。最初它是为了与 C 一起工作而编写的。它也能与 C++配合,但是它还不识别所有的 C++结构。
这份文档还很不完整。不过,由于这一接口是标准化的,因此可以在许多关于 SQL 的资料中找到补充信息。
36.1. 概念 #
嵌入式 SQL 程序由普通编程语言编写的代码(这里是 C)与位于特殊标记区段中的 SQL 命令混合组成。要构建该程序,首先要将源代码(*.pgc)交给嵌入式 SQL 预处理器,它会把源代码转换成普通 C 程序(*.c),之后就可以由 C 编译器处理。(关于编译和链接的细节见第 36.10 节。)转换后的 ECPG 应用会通过嵌入式 SQL 库(ecpglib)调用 libpq 库中的函数,并使用普通的前端/后端协议与 PostgreSQL 服务器通信。
与其他在 C 代码中处理 SQL 命令的方法相比,嵌入式 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_strings 为 on。)当然,程序的 C 部分仍遵循 C 的引号规则。
下列小节解释了所有嵌入式 SQL 语句。
报告文档问题
阅读 上游文档. 通过 PostgreSQL 文档反馈表单.