36.1. 概念#
嵌入式SQL程序包括用普通编程语言(本例中为 C)编写的代码,其中混合了在特殊标记部分中的SQL命令。要构建该程序,首先将源代码 (*.pgc
) 通过嵌入式SQL预处理器,将其转换为普通 C 程序 (*.c
),然后才能由 C 编译器处理。(有关编译和链接的详细信息,请参见第 36.10 节。)转换后的 ECPG 应用程序通过嵌入式SQL库 (ecpglib) 调用 libpq 库中的函数,并使用常规前端-后端协议与 PostgreSQL 服务器通信。
嵌入式SQL优于其他从 C 代码处理SQL命令的方法。首先,它负责将信息繁琐地传递到C程序中的变量,以及从变量中传递信息。其次,程序中的SQL代码在构建时会检查其语法正确性。第三,C 中的嵌入式SQL在SQL标准中指定,并受许多其他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_strings
为on
。)当然,程序的 C 部分遵循 C 引号规则。
以下各节说明所有嵌入式 SQL 语句。