嵌入式 SQL 是用于 C 和 C++ 编程语言的数据库编程接口。它由混杂在(嵌入于) C 或 C++ 源代码中的 SQL 语句组成。这些 SQL 语句先由 SQL 预处理器转换为 C 或 C++ 源代码,然后再进行编译。
在运行时,嵌入式 SQL 应用程序是用数据库的接口库与数据库服务器进行通信。在大多数平台上,接口库是一个动态连接库( DLL )或共享库。
在 Windows 操作系统上,接口库是 dblib9.dll 。
在 UNIX 操作系统上,接口库会是 libdblib9.so 、 libdblib9.sl 、或 libdblib9.a (视操作系统而定)。
开发过程概述:
在对程序成功地进行预处理和编译后,就可以将它与 Adaptive Server Anywhere 接口库的导入库 链接在一起,以形成可执行文件。在运行数据库时,这个可执行文件使用 Adaptive Server Anywhere DLL 与数据库交互作用。在对程序进行预处理时,不必运行数据库。
对于 Windows 、 Watcom C/C++ 、 Microsoft Visual C++ 和 Borland C++ 各自有单独的导入库。
使用导入库是开发调用 DLL 中函数的应用程序的标准方法。
嵌入式 SQL 程序的结构:
SQL 语句置于(嵌入)常规 C 或 C++ 代码内。所有嵌入式 SQL 语句都以 EXEC SQL 开头,并以分号(;)结尾。在嵌入式 SQL 语句的中间允许使用常规 C 语言注释。
使用嵌入式 SQL 的每个 C 程序都必须在源文件中任何其它嵌入式 SQL 语句之前包含以下语句:
EXEC SQL INCLUDE SQLCA;
由 C 程序执行的第一个嵌入式 SQL 语句必须是 CONNECT 语句。 CONNECT 语句用于建立与数据库服务器的连接,以及指定连接期间用于授权执行的所有语句的用户 ID 。
CONNECT 语句必须是执行的第一个嵌入式 SQL 语句。有些嵌入式 SQL 命令不生成任何 C 代码,或者不会涉及与数据库通信。因此,允许在 CONNECT 语句之前使用这些命令。最主要的是 INCLUDE 语句和指定错误处理方法的 WHENEVER 语句。
使用主机变量:
主机变量是供 SQL 预处理器识别的 C 语言变量。主机变量可用于将值发送到数据库服务器或从数据库服务器接受值。
主机变量非常易于使用,但是它们具有一些限制。动态 SQL 是一种向数据库服务器和从数据库服务器中传递信息的更常用的方法,它使用被称为 [SQL 描述符区域 ] ( SQLDA )的结构。 SQL 预处理器为使用主机变量的每个语句自动生成 SQLDA 。
声明主机变量:
主机变量是通过将它们放入声明部分 来定义的。按照 IBM SAA 和 ANSI 嵌入式 SQL 标准,主机变量是通过用一下内容围绕常规 C 变量声明定义的:
EXEC SQL BEGIN DECLARE SECTION;
/*C variable declarations*/
EXEC SQL END DECLARE SECTION;
然后,可以使用这些主机变量代替任意 SQL 语句中的值常量。在数据库服务器执行命令时,会使用主机变量的值。注意,不能使用主机变量代替表名或列名:这需要使用动态 SQL 。在 SQL 语句中,变量名以冒号(:)为前缀,以便与语句中使用的其它表示服区别开。
标准 SQL 预处理器不扫描位于 DECLARE SECTION 之外的 C 语言代码。因此,不允许使用 TYPEDEF 类型和结构。在 DECLARE SECTION 之内允许使用变量中的初始化程序。