选择 打开 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
测试与开发版本: 19 / devel
不受支持的版本: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0
历史版本PostgreSQL 9.1 已于 2016 年 10 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本

第 33 章 ECPG - C 中的嵌入式 SQL

目录

33.1. 概念
33.2. 管理数据库连接
33.2.1. 连接到数据库服务器
33.2.2. 选择一个连接
33.2.3. 关闭一个连接
33.3. 运行 SQL 命令
33.3.1. 执行 SQL 语句
33.3.2. 使用游标
33.3.3. 管理事务
33.3.4. 预备语句
33.4. 使用主变量
33.4.1. 概述
33.4.2. 声明节
33.4.3. 检索查询结果
33.4.4. 类型映射
33.4.5. 处理非原始 SQL 数据类型
33.4.6. 指示符
33.5. 动态 SQL
33.5.1. 执行没有结果集的语句
33.5.2. 执行一个有输入参数的语句
33.5.3. 执行一个有结果集的语句
33.6. pgtypes 库
33.6.1. numeric类型
33.6.2. 日期类型
33.6.3. 时间戳类型
33.6.4. interval 类型
33.6.5. decimal类型
33.6.6. pgtypeslib 的 errno 值
33.6.7. pgtypeslib 的特殊常量
33.7. 使用描述符区域
33.7.1. 命名 SQL 描述符区域
33.7.2. SQLDA 描述符区域
33.8. 错误处理
33.8.1. 设置回调
33.8.2. sqlca
33.8.3. SQLSTATESQLCODE
33.9. 预处理器指令
33.9.1. 包括文件
33.9.2. define 和 undef 指令
33.9.3. ifdef、ifndef、else、elif 和 endif 指令
33.10. 处理嵌入式 SQL 程序
33.11. 库函数
33.12. 大对象
33.13. C++ 应用
33.13.1. 主变量的可见范围
33.13.2. 使用外部 C 模块的 C++ 应用开发
33.14. 嵌入式 SQL 命令
ALLOCATE DESCRIPTOR — allocate an SQL descriptor area
CONNECT — establish a database connection
DEALLOCATE DESCRIPTOR — deallocate an SQL descriptor area
DECLARE — define a cursor
DESCRIBE — obtain information about a prepared statement or result set
DISCONNECT — terminate a database connection
EXECUTE IMMEDIATE — dynamically prepare and execute a statement
GET DESCRIPTOR — get information from an SQL descriptor area
OPEN — open a dynamic cursor
PREPARE — prepare a statement for execution
SET AUTOCOMMIT — set the autocommit behavior of the current session
SET CONNECTION — select a database connection
SET DESCRIPTOR — set information in an SQL descriptor area
TYPE — define a new data type
VAR — define a variable
WHENEVER — specify the action to be taken when an SQL statement causes a specific class condition to be raised
33.15. Informix兼容模式
33.15.1. 附加类型
33.15.2. 附加的/缺少的 嵌入式 SQL 语句
33.15.3. Informix-兼容的 SQLDA 描述符区域
33.15.4. 附加函数
33.15.5. 额外的常量
33.16. 内部

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

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

33.1. 概念 #

嵌入式 SQL 程序由普通编程语言编写的代码(这里是 C)与位于特殊标记区段中的 SQL 命令混合组成。 要构建该程序,首先要将源代码(*.pgc)交给嵌入式 SQL 预处理器,它会把源代码转换成普通 C 程序(*.c),之后就可以由 C 编译器处理。(关于编译和链接的细节见第 33.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 语句。

提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。