这里的sqc程序是指在用到db2数据库的应用程序中,sql的嵌入式C编程。在用到Oracle数据库的应用程序中,sql的嵌入式c/c++编程则是pc程序,叫做Pro*c/c++编程。
1 DB2的嵌入sql程序处理过程
嵌入SQL程序处理,由一个源程序创建为一个可执行文件(或库)的过程。如下图所示:
从上图看出,首先对源文件做预编译(precompiler),生成两部分文件:一部分是纯的C程序源文件,它们和其他的C程序源文件一起,经过编译和连接生成可执行的程序(executable program);而另一部分是bind文件或package文件。bind文件经过binder操作以后,也生成为package文件。所谓package,实际上是SQL语句的访问计划。所以,预编译器将源程序中的SQL语句提出来,生成他们的访问计划,并将访问计划存放在数据库管理器中。当执行程序并遇到访问数据库的命令时,它将到数据库管理器中寻找属于它的访问计划,然后按照访问计划中所设计的方法对数据库进行访问。
具体来说:
第一步、预编译
源程序生成以后,在源程序中嵌入了许多SQL语句,而SQL语句是宿主语言编译器所不认识的,所以在用宿主语言编译器进行编译、连接之前必须将SQL语句分离出来,这就是预编译所做的工作。DB2中预编译操作是通过PREP命令执行的,PREP命令首先将源程序中的所有有关SQL语句全部注释起来,对它进行分析和语法检查。如果源程序中的SQL语句全部书写正确,则将这些SQL语句转换成C语言可以识别的一系列的API函数。这些函数可以在函数执行时访问数据库,然后将源文件中所有用于生成数据库管理器的PACKAGE的数据提出组合成一个BIND文件。也可以直接生成一个PACKAGE,但这相当于在预编译后又执行了一次BIND操作。在预编译时,对整个源程序文件中的所有变量做统一处理而不根据变量的生命期来处理,所以宿主变量在整个程序中是唯一的。下面讲解预编译的步骤:
1)、连接到一个数据库,该操作是为BIND做准备。操作如下:
db2 connect to cicstest
2)、执行预编译命令,假设源文件为adhoc.sqc,则:
db2 prep adhoc.sqc bindfile
下面我们对预编译的几种输出文件进行讨论。
预编译后生成的C语言源文件ÿ