在IBM的关系型数据库产品DB2中,使用SQL Communication Area(SQLCA)将程序中嵌套的SQL语句运行情况返回给程序。在程序中有针对性地对SQLCA实施调用,可对程序中各类SQL语句的执行结果实施控制,从而避免程序的意外终止。同时,也可以提高运行效率,减小系统开销和处理时间。本文将对此作一简要介绍。
SQLCA的结构
SQLCA的结构定义如下:
struc sqlca
{ unsigned char sqlcaid[8];
long sqlabc;
long sqlcode;
short sqlerrml;
unsigned char sqlerrnmc[10];
unsigned char sqlerrp[8];
long sqlerrd[6];
unsigned char sqlwarn[21];
unsigned char sqlstate[5]; }
结构中各个域各有不同的含义和用途,部分域的功能和用途将在以下各小节中做详细探讨,其它一些域的含义如下:
sqlcaid: 标识性域,包含字符串“sqlca”.
Sqlabc: 包含sqlca结构的长度。
Sqlerrml: 包含sqlerrmc域中数据的实际长度。
Sqlerrmc: 由0或多个字串组成,它对返回的值给以一个更详细的解释。如返回的代码表示表没找到,则此域中包含未找到的表名。
Sqlerrp: 包含一些对用户无用的论断信息。
Sqlstate: 长度为5的字符串,它指示SQL语句的查询结果。与sqlca不同的是,它遵循ANSI/ISOSQL92的标准,所以,尽管不同数据库产品的sqlca结构中sqlcode域的含义不同,但sqlstate域的含义是相同的。
调用方法
DB2通过一个函数:sqlaintp,可以方便地读取sqlca中SQL语句执行后的结果和错误。此函数定义在sql.h中,可通过下述语句实现对其定义:
EXEC SQL INCLUDE sqlca.h
Sqlaintp函数格式如下:
int sqlaintp
( char *buffer
short buffer_size
short line_width
struct sqlca *sqlca )
其中, buffer为存放了sqlca信息的缓冲区;buffer_size中存放了
SQLCA的结构
SQLCA的结构定义如下:
struc sqlca
{ unsigned char sqlcaid[8];
long sqlabc;
long sqlcode;
short sqlerrml;
unsigned char sqlerrnmc[10];
unsigned char sqlerrp[8];
long sqlerrd[6];
unsigned char sqlwarn[21];
unsigned char sqlstate[5]; }
结构中各个域各有不同的含义和用途,部分域的功能和用途将在以下各小节中做详细探讨,其它一些域的含义如下:
sqlcaid: 标识性域,包含字符串“sqlca”.
Sqlabc: 包含sqlca结构的长度。
Sqlerrml: 包含sqlerrmc域中数据的实际长度。
Sqlerrmc: 由0或多个字串组成,它对返回的值给以一个更详细的解释。如返回的代码表示表没找到,则此域中包含未找到的表名。
Sqlerrp: 包含一些对用户无用的论断信息。
Sqlstate: 长度为5的字符串,它指示SQL语句的查询结果。与sqlca不同的是,它遵循ANSI/ISOSQL92的标准,所以,尽管不同数据库产品的sqlca结构中sqlcode域的含义不同,但sqlstate域的含义是相同的。
调用方法
DB2通过一个函数:sqlaintp,可以方便地读取sqlca中SQL语句执行后的结果和错误。此函数定义在sql.h中,可通过下述语句实现对其定义:
EXEC SQL INCLUDE sqlca.h
Sqlaintp函数格式如下:
int sqlaintp
( char *buffer
short buffer_size
short line_width
struct sqlca *sqlca )
其中, buffer为存放了sqlca信息的缓冲区;buffer_size中存放了