创建嵌入式 SQL 应用程序的源文件之后,必须使用 PREP 命令(并指定特定于主语言的选项)对包含 SQL 语句的每个主语言文件进行预编译。预编译器将源文件中包含的 SQL 语句转换为注释,并为那些语句生成 DB2® 运行时 API 调用。
必须始终针对特定数据库预编译源文件,即使最终并不将该数据库与该应用程序配合使用亦如此。在实践中,您可以使用测试数据库来进行开发,在对应用程序进行充分测试之后,可以将它的绑定文件与一个或多个生产数据库绑定。此实践称为延期绑定。
如果应用程序使用用户定义的函数 (UDF) 或用户定义的单值类型(UDT),那么在预编译应用程序时,可能需要使用 FUNCPATH 选项。此选项指定用来为包含静态 SQL 的应用程序解析 UDF 和 UDT 的函数路径。如果未指定 FUNCPATH,那么缺省函数路径是 SYSIBM > SYSFUN > USER,其中 USER 是指当前用户标识。
在预编译应用程序之前,必须以隐式或显式方式连接到服务器。虽然您在客户机工作站上预编译应用程序,并且预编译器在客户机上生成经过修改的源代码和消息,但预编译器使用服务器连接来执行部分验证。
预编译器还将创建数据库管理器对数据库处理 SQL 语句时所需的信息。此信息存储在程序包和/或绑定文件中,这取决于您选择的预编译器选项。
下面是使用预编译器的典型示例。要预编译名为 filename.sqc 的 C 嵌入式 SQL 源文件,您可以发出以下命令以创建缺省名称为 filename.c 的 C 源文件以及缺省名称为 filename.bnd 的绑定文件:
DB2 PREP filename.sqc BINDFILE
如果在未指定 SQLERROR CONTINUE 的情况下使用 PACKAGE 选项,那么预编译过程中使用的数据库必须包含源文件中的静态 SQL 语句所引用的所有数据库对象。例如,除非 SELECT 语句所引用的表存在于数据库中,否则无法预编译该语句。
借助 VERSION 选项,将对绑定文件(如果使用了 BINDFILE 选项)和程序包(如果在 PREP 时进行绑定或者单独进行绑定)指定特定的版本标识。多个具有相同名称和创建者的程序包版本可以同时存在。
指定 SQLERROR CONTINUE 的作用是,即使绑定 SQL 语句时发生错误也会创建程序包。如果还指定了 VALIDATE RUN,那么可以在执行时以递增方式绑定那些由于授权或存在原因而未能绑定的语句。在运行时,尝试发出那些语句将生成错误。