Redrock Postgres 搜索 英文
版本: 9.3 / 9.4 / 9.5 / 9.6 / 10 / 11 / 12 / 13 / 14 / 15 / 16

36.1. 概念 #

嵌入式 SQL 程序包括用普通编程语言(本例中为 C)编写的代码,其中混合了在特殊标记部分中的 SQL 命令。要构建该程序,首先将源代码 (*.pgc) 通过嵌入式 SQL 预处理器,将其转换为普通 C 程序 (*.c),然后才能由 C 编译器处理。(有关编译和链接的详细信息,请参见第 36.10 节。)转换后的 ECPG 应用程序通过嵌入式 SQL 库 (ecpglib) 调用 libpq 库中的函数,并使用常规前端-后端协议与 PostgreSQL 服务器通信。

嵌入式 SQL 优于其他从 C 代码处理 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 规则)来解析带引号的字符串和标识符。(请分别参见 第 4.1.2.1 节第 4.1.1 节。请注意,ECPG 假设 standard_conforming_stringson。)当然,程序的 C 部分遵循 C 引号规则。

以下各节说明所有嵌入式 SQL 语句。