SQL 通信区是用下列语句描述的:
EXEC SQL INCLUDE SQLCA;
此部分提供了用户运行程序的成败记录和错误处理。
SQLCA的组成
SQLCA是一个结构类型的变量,它是ORACLE 和应用程序的一个接口。在执行 Pro*C程序时, ORACLE 把每一个嵌入SQL语句执行的状态信息存入SQLCA中, 根据这些信息,可判断SQL语句的执行是否成功,处理的行数,错误信息等,其组成如表所示:
Struct sqlca
{ char sqlcaid [ 8 ] ; ----à标识通讯区
long sqlabc; ---à 通讯区的长度
long sqlcode; ---à保留最近执行的SQL语句的状态码
struct { unsigned short sqlerrml; -----à信息文本长度
}sqlerrm;
char sqlerrp [ 8 ];
long sqlerrd [ 6 ];
char sqlwarn [ 8 ];
char sqlext [ 8 ];
}
struct sqlca sqlca;
其中, sqlcode在程序中最常用到,它保留了最近执行的SQL语句的状态码。程序员根据这些状态码做出相应的处理。这些状态码值如下:
0: 表示该SQL语句被正确执行,没有发生错误和例外。
>0:ORACLE执行了该语句,但遇到一个例外(如没找到任何数据)。
<0:表示由于数据库、系统、网络或应用程序的错误,ORACLE未执行该SQL语句。
当出现此类错误时,当前事务一般应回滚。
SQLCA是一个数据结构,它的成员包含了SQL语句执行后的错误、警告和状态信息。在ORACLE_HOMEpro80cinclude目录下的sqlca.h文件中定义了SQLCA结构。
使用如下语句可以将SQLCA包含到应用程序中:
EXEC SQL INCLUDE SQLCA;
或 #include
其部分结构成员如下:
·sqlcaid:标识SQL通讯区的字符串成员,它被初始化为“SQLCA”。
·sqlcabc:整数成员,用于保存SQLCA的字节长度。
·sqlcode:整数成员,它保存着SQL语句执行后的状态代码。Sqlcode的值和含义。
Sqlcode的值
含义:
0 执行SQL语句成功
>0 执行了该语句但检测到异常情况
<0 出现严重错误,语句没有执行
·sqlwarn:用于设置警告标记的单字符数组,通过赋“W”来设置警告标记。
·sqlerrm:包含了成员sqlerrml及sqlerrmc的一个结构,其中sqlerrml用于保存错误文本长度,sqlerrmc用于保存错误文本。
Sqlerrmc最多可以保存70个字符的错误消息,使用函数sqlglm可以获得完整的错误消息文本,该函数的语法如下:
voidsqlglm(char *message_buffer,size_t *buffer_size,size_t *message_lenth);
参数说明如下:
·message_buffer:存储错误消息的文本缓冲区(尾部以空格填充)。
·buffer_size:缓冲区的字节长度。
·message_lenth:错误消息的实际长度。
注意,调用该函数前必须确保SQLCODE或sqlca.sqlcode不等于0。该函数只能用于非线程应用。
SQLCA中还包括其它结构成员,包括sqlerrp、sqlerrd、sqlext等,由于这些成员的作用相对次要或在程序中没有使用。
阅读(1596) | 评论(0) | 转发(0) |