选择 打开 改范围 完整检索页
受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
开发版本: 19 / devel
不受支持的版本: 13 / 12 / 11 / 10
当前 PostgreSQL 版本不在支持生命周期内。
您可以参阅当前版本的对应页面,或其他在上面列出的活跃大版本。

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

目录

35.1. 概念
35.2. 管理数据库连接
35.2.1. 连接到数据库服务器
35.2.2. 选择一个连接
35.2.3. 关闭一个连接
35.3. 运行 SQL 命令
35.3.1. 执行 SQL 语句
35.3.2. 使用游标
35.3.3. 管理事务
35.3.4. 预备语句
35.4. 使用主变量
35.4.1. 概述
35.4.2. 声明节
35.4.3. 检索查询结果
35.4.4. 类型映射
35.4.5. 处理非原始 SQL 数据类型
35.4.6. 指示符
35.5. 动态 SQL
35.5.1. 执行没有结果集的语句
35.5.2. 执行一个有输入参数的语句
35.5.3. 执行一个有结果集的语句
35.6. pgtypes 库
35.6.1. 字符串
35.6.2. numeric类型
35.6.3. 日期类型
35.6.4. 时间戳类型
35.6.5. interval 类型
35.6.6. decimal类型
35.6.7. pgtypeslib 的 errno 值
35.6.8. pgtypeslib 的特殊常量
35.7. 使用描述符区域
35.7.1. 命名 SQL 描述符区域
35.7.2. SQLDA 描述符区域
35.8. 错误处理
35.8.1. 设置回调
35.8.2. sqlca
35.8.3. SQLSTATESQLCODE
35.9. 预处理器指令
35.9.1. 包括文件
35.9.2. define 和 undef 指令
35.9.3. ifdef, ifndef, elif, else, 和 endif 指令
35.10. 处理嵌入式 SQL 程序
35.11. 库函数
35.12. 大对象
35.13. C++ 应用
35.13.1. 主变量的可见范围
35.13.2. 使用外部 C 模块的 C++ 应用开发
35.14. 嵌入式 SQL 命令
ALLOCATE DESCRIPTOR — 分配一个 SQL 描述符区域
CONNECT — 建立一个数据库连接
DEALLOCATE DESCRIPTOR — 释放一个 SQL 描述符区域
DECLARE — 定义一个游标
DESCRIBE — 得到有关一个预备语句或结果集的信息
DISCONNECT — 终止一个数据库连接
EXECUTE IMMEDIATE — 动态地准备和执行一个语句
GET DESCRIPTOR — 从一个 SQL 描述符区域得到信息
OPEN — 打开一个动态游标
PREPARE — 准备一个语句用于执行
SET AUTOCOMMIT — 设置当前会话的自动提交行为
SET CONNECTION — 选择一个数据库连接
SET DESCRIPTOR — 在一个 SQL 描述符区域中设置信息
TYPE — 定义一种新数据类型
VAR — 定义一个变量
WHENEVER — 指定一个要在一个 SQL 语句导致发生一个特定类别的情况时要采取的动作
35.15. Informix兼容模式
35.15.1. 附加类型
35.15.2. 附加的/缺少的 嵌入式 SQL 语句
35.15.3. Informix-兼容的 SQLDA 描述符区域
35.15.4. 附加函数
35.15.5. 额外的常量
35.16. Oracle 兼容模式
35.17. 内部

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

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

35.1. 概念 #

嵌入式 SQL 程序由普通编程语言编写的代码组成(这里使用 C),其中在特殊标记的部分混入 SQL 命令。构建程序时,先将源代码(*.pgc)交给嵌入式 SQL 预处理器,将其转换为普通 C 程序(*.c),然后再用 C 编译器处理。(有关编译和链接的详细信息,参见 Section 35.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 语句。