受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
开发版本: devel

Chapter 34. ECPG — C 中的嵌入式 SQL

Table of Contents

34.1. 概念
34.2. 管理数据库连接
34.2.1. 连接到数据库服务器
34.2.2. 选择一个连接
34.2.3. 关闭一个连接
34.3. 运行 SQL 命令
34.3.1. 执行 SQL 语句
34.3.2. 使用游标
34.3.3. 管理事务
34.3.4. 预备语句
34.4. 使用主变量
34.4.1. 概述
34.4.2. 声明节
34.4.3. 检索查询结果
34.4.4. 类型映射
34.4.5. 处理非原始 SQL 数据类型
34.4.6. 指示符
34.5. 动态 SQL
34.5.1. 执行没有结果集的语句
34.5.2. 执行一个有输入参数的语句
34.5.3. 执行一个有结果集的语句
34.6. pgtypes 库
34.6.1. 字符串
34.6.2. numeric类型
34.6.3. 日期类型
34.6.4. 时间戳类型
34.6.5. interval 类型
34.6.6. decimal类型
34.6.7. pgtypeslib 的 errno 值
34.6.8. pgtypeslib 的特殊常量
34.7. 使用描述符区域
34.7.1. 命名 SQL 描述符区域
34.7.2. SQLDA 描述符区域
34.8. 错误处理
34.8.1. 设置回调
34.8.2. sqlca
34.8.3. SQLSTATESQLCODE
34.9. 预处理器指令
34.9.1. 包括文件
34.9.2. define 和 undef 指令
34.9.3. ifdef, ifndef, elif, else, 和 endif 指令
34.10. 处理嵌入式 SQL 程序
34.11. 库函数
34.12. 大对象
34.13. C++ 应用
34.13.1. 主变量的可见范围
34.13.2. 使用外部 C 模块的 C++ 应用开发
34.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 语句导致发生一个特定类别的情况时要采取的动作
34.15. Informix兼容模式
34.15.1. 附加类型
34.15.2. 附加的/缺少的 嵌入式 SQL 语句
34.15.3. Informix-兼容的 SQLDA 描述符区域
34.15.4. 附加函数
34.15.5. 额外的常量
34.16. Oracle 兼容模式
34.17. 内部

这一章描述了用于PostgreSQL的嵌入式SQL包。它由 Linus Tolke()和 Michael Meskes()编写。最初它是为了与C一起工作而编写的。它也能与C++配合,但是它还不识别所有的C++结构。

这份文档还很不完整。不过,由于这一接口是标准化的,因此可以在许多关于 SQL 的资料中找到补充信息。

34.1. 概念 #

嵌入式 SQL 程序由普通编程语言编写的代码(这里是 C)与位于特殊标记区段中的 SQL 命令混合组成。 要构建该程序,首先要将源代码(*.pgc)交给嵌入式 SQL 预处理器,它会把源代码转换成普通 C 程序(*.c),之后就可以由 C 编译器处理。(关于编译和链接的细节见Section 34.10。) 转换后的 ECPG 应用会通过嵌入式 SQL 库(ecpglib)调用 libpq 库中的函数,并使用普通的前端/后端协议与 PostgreSQL 服务器通信。

与其他在 C 代码中处理SQL命令的方法相比,嵌入式SQL有其优势。首先,它能处理与你的C程序变量之间来回传递信息的繁琐工作。其次,程序中的 SQL 代码会在构建时接受语法正确性检查。第三,C 中的嵌入式SQLSQL标准规定,并且得到许多其他SQL数据库系统的支持。PostgreSQL 的实现被设计为尽可能贴合该标准,因此通常可以比较容易地把为其他 SQL 数据库编写的嵌入式SQL程序移植到PostgreSQL

如前所述,为嵌入式SQL接口编写的程序,本质上就是插入了用于执行数据库相关操作的特殊代码的普通 C 程序。这种特殊代码总是采用如下形式:

EXEC SQL ...;

这些语句在语法上取代了一个 C 语句。根据具体语句的不同,它们可以出现在全局层面,也可以出现在函数内部。

嵌入式SQL语句遵循普通SQL代码的大小写规则,而不是 C 的大小写规则。 它们也允许使用符合 SQL 标准的可嵌套 C 风格注释。 不过,程序的 C 部分遵循 C 标准,不接受嵌套注释。 对带引号的字符串和标识符进行语法解析时,嵌入式SQL语句同样采用 SQL 规则,而不是 C 规则。 (分别参见Section 4.1.2.1Section 4.1.1。注意 ECPG 假定standard_conforming_stringson。) 当然,程序的 C 部分仍遵循 C 的引号规则。

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

提交更正

如果您发现文档中有不正确的内容、与您使用特定功能的经验不符或需要进一步说明,请使用此表单来报告文档问题。