Chinaunix首页 | 论坛 | 博客
  • 博客访问: 292414
  • 博文数量: 70
  • 博客积分: 485
  • 博客等级: 下士
  • 技术积分: 632
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-25 08:55
文章分类

全部博文(70)

文章存档

2014年(47)

2013年(1)

2012年(22)

我的朋友

分类: DB2/Informix

2014-04-23 13:41:58

转载:http://huangxiaojian9999.blog.163.com/blog/static/12129874220101103135228/
如果需要更强大的错误处理机制,那么嵌入的 SQL 接口提供了一个叫 sqlca 的全局变量,它是一个有着下面定义的结构:

struct  {      char sqlcaid[8];      long sqlabc;      long sqlcode;      struct      {          int sqlerrml;          char sqlerrmc[70];      } sqlerrm;      char sqlerrp[8];      long sqlerrd[6];      char sqlwarn[8];      char sqlstate[5];  } sqlca;

(在一个多线程的程序里,每个线程自动获得自己的 sqlca 的拷贝。这个方式类似于处理标准 C 全局变量 errno。)

sqlca 包含警告和错误。如果在一个语句的执行中出现多个警告或者错误,那么 sqlca 将只包含最后一个的信息。

如果在最后的 SQL 语句执行过程中没有发生错误, 那么 sqlca.sqlcode 将是 0 并且sqlca.sqlstate 将是"00000"。如果发生一个警告或者错误, 那么 sqlca.sqlcode 将是负数并且 sqlca.sqlstate 将不是 "00000"。一个正数的 sqlca.sqlcode 标识一种无害的条件,比如最后的查询返回零行。sqlcode 和 sqlstate 是两个不同的错误模式;下面详细介绍。

如果最后一条 SQL 语句成功,如果适合该具体命令,那么 sqlca.sqlerrd[1] 包含处理过的行的 OID,而 sqlca.sqlerrd[2] 包含 处理或返回的行数。

在发生错误或者警告的情况下,sqlca.sqlerrm.sqlerrmc 将包含一个描述该错误的字串。字段sqlca.sqlerrm.sqlerrml 包含存储在 sqlca.sqlerrm.sqlerrmc 里的错误信息的长度(DE

在发出警告的情况下,sqlca.sqlwarn[2] 被设置为 W。 (在所有其它的情况下,它都被设置为与 W不同的东西。)如果sqlca.sqlwarn[1] 设置为 W,那么就是一个数值在存储到宿主变量的时候被截断。 如果任何其它元素设置成表示一个警告,那么 sqlca.sqlwarn[0] 被设置为 W。

字段 sqlcaid,sqlcabc, sqlerrp 和剩下的 sqlerrd 以及 sqlwarn 元素目前没有包含有用的信息。

结构 sqlca 没有在 SQL 标准里定义,但是在好几个其它 SQL 数据库系统里定义了。 定义的核心都类似,但是如果你想写可以移植的应用,那么你应该仔细研究不同的实现。

阅读(4109) | 评论(0) | 转发(0) |
0

上一篇:sqlca.sqlcode问题

下一篇:memcmp函数使用

给主人留下些什么吧!~~