支持的版本:当前 (17) / 16 / 15 / 14 / 13
开发版本:开发版
不支持的版本:12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 7.2 / 7.1

34.1. 概念 #

一个嵌入式 SQL 程序由用普通编程语言(在本例中为 C)编写的代码与特殊标记部分中的 SQL 命令混合而成。要构建程序,源代码 (*.pgc) 首先会通过嵌入式 SQL 预处理器,它会将其转换为普通的 C 程序 (*.c),之后可以使用 C 编译器进行处理。(有关编译和链接的详细信息,请参阅第 34.10 节。)转换后的 ECPG 应用程序通过嵌入式 SQL 库 (ecpglib) 调用 libpq 库中的函数,并使用正常的 前端-后端 协议与 PostgreSQL 服务器通信。

嵌入式SQL相对于其他处理SQL来自 C 代码的命令的方法具有优势。首先,它负责处理从C程序中变量之间进行繁琐的信息传递。其次,程序中的 SQL 代码会在构建时检查语法是否正确。第三,C 中的嵌入式SQLSQL标准中指定,并受许多其他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_stringson。)当然,程序的 C 部分遵循 C 引用规则。

以下各节解释了所有嵌入式 SQL 语句。

提交更正

如果您在文档中发现任何不正确、与您使用特定功能的体验不符或需要进一步澄清的地方,请使用此表单报告文档问题。