一个嵌入式 SQL 程序由一种普通编程语言编写的代码(在这里是 C)和位于特殊标记的小节中的 SQL 命令混合组成。要构建该程序,源代码(*.pgc
)首先会通过嵌入式 SQL 预处理器,它会将源代码转换成一个普通 C 程序(*.c
),并且后来它能够被一个 C 编译器所处理(编译和链接详见Section 33.10)。转换过的 ECPG(Oracle Pro*c兼容)应用会通过嵌入式 SQL 库(ecpglib)调用 libpq 库中的函数,并且与 LightDB 服务器使用普通的前端/后端协议通信。
嵌入式SQL在为 C 代码处理SQL命令方面比起其他方法来具有优势。首先,它会搞定向你的C程序变量传递或者读取信息时的繁文缛节。其次,程序中的 SQL 代码在编译时就会被检查以保证语法正确性。第三,C 中的嵌入式SQL是在SQL标准中指定的并且受到很多其他SQL数据库系统的支持。LightDB实现被设计为尽可能匹配这个标准,并且通常可以相对容易地把为其他 SQL 数据库编写的SQL程序移植到LightDB。
正如已经指出的,为嵌入式SQL接口编写的程序是插入了用于执行数据库相关动作的特殊代码的普通的 C 程序。这种特殊代码总是具有这样的形式:
EXEC SQL ...;
这些语句在语法上取代了一个 C 语句。取决于特定的语句,它们可以出现在全局层面或者是一个函数中。嵌入式 SQL语句遵循普通SQL代码的大小写敏感性规则, 而不是 C 的大小写敏感性规则。它们也允许嵌套的 C 风格注释(SQL 标准的一部分)。 不过,程序的 C 部分遵循 C 的标准不接受嵌套注释。
LightDB 从 23.3版本开始支持在EXEC SQL中使用如下三种注释:'-- comment', '// comment' 和 '/* comment */'。 在 23.3 版本之前只支持/**/注释。
'-- comment' 和 '// comment' 注释在转换成 C 程序后会被删除,而 '/* comment */' 注释会被移动到 ECPGdo 函数的前面,做为函数调用的注释。
下列小节解释了所有嵌入式 SQL 语句。