第 33 章 ECPG - C 中的嵌入式 SQL
目录
- 33.1. 概念
- 33.2. 管理数据库连接
- 33.3. 运行 SQL 命令
- 33.4. 使用主变量
- 33.5. 动态 SQL
- 33.6. pgtypes 库
- 33.7. 使用描述符区域
- 33.8. 错误处理
- 33.9. 预处理器指令
- 33.10. 处理嵌入式 SQL 程序
- 33.11. 库函数
- 33.12. 大对象
- 33.13. 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.16. 内部
这一章描述了用于PostgreSQL的嵌入式SQL包。它由 Linus Tolke(<linus@epact.se>)和 Michael Meskes(<meskes@postgresql.org>)编写。最初它是为了与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 中的嵌入式SQL由SQL标准规定,并且得到许多其他SQL数据库系统的支持。PostgreSQL 的实现被设计为尽可能贴合该标准,因此通常可以比较容易地把为其他 SQL 数据库编写的嵌入式SQL程序移植到PostgreSQL。
如前所述,为嵌入式 SQL 接口编写的程序,就是插入了特殊代码的普通 C 程序,这些特殊代码用于执行数据库相关操作,其形式始终如下:
EXEC SQL ...;
这些语句在语法上占据一条 C 语句的位置。根据具体语句的不同,它们可以出现在全局层级,也可以出现在函数内部。嵌入式 SQL 语句遵循普通 SQL 代码的大小写规则,而不是 C 的规则。
下列小节解释了所有嵌入式 SQL 语句。