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执行了该语句,但遇到一个例外(如没找到任何数据)。
   
当出现此类错误时,当前事务一般应回滚。


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 执行了该语句但检测到异常情况

    


·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等,由于这些成员的作用相对次要或在程序中没有使用。
09-20 03:37