oracle pro*c之 sqlca

sqlca

转自: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 标识一种无害的条件,比如最后的查询返回零行。sqlcodesqlstate 是两个不同的错误模式;下面详细介绍。

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

在发生错误或者警告的情况下,sqlca.sqlerrm.sqlerrmc 将包含一个描述该错误的字串。字段 sqlca.sqlerrm.sqlerrml 包含存储在sqlca.sqlerrm.sqlerrmc 里的错误信息的长度(DE<strlen()DE< 的结果, 对 C 程序员来说并非真正关心的)。请注意有些信息太长,因而不能存储在定长的sqlerrmc 数组里;它们会被截断。

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

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

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


在编译pc文件时,如果加上下面这个参数

CFlag  =  -qcpluscmt表示支持//单行注释



  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值