调试PROC*C程序时,SQL语句执行信息都存放在sqlca和oraca中
sqlca
sqlca是oracle提供的两个通信区之一。
sqlca实际上是一个结构变量,其目的是为了诊断错误和保存事件处理结果
sqlca中包含了sql语句运行时信息:
1. Oracle错误码
2. 警告信息
3. 事件信息
4. 处理的记录集行计数
5. 诊断信息
结构定义
struct sqlca
{
/* ub1 */ char sqlcaid[8];
/* b4 */ int sqlabc;
/* b4 */ int sqlcode;
struct
{
/* ub2 */ unsigned short sqlerrml;
/* ub1 */ char sqlerrmc[70];
} sqlerrm;
/* ub1 */ char sqlerrp[8];
/* b4 */ int sqlerrd[6];
/* ub1 */ char sqlwarn[8];
/* ub1 */ char sqlext[8];
};
#ifdef SQLCA_INIT
= {
{'S', 'Q', 'L', 'C', 'A', ' ', ' ', ' '},
sizeof(struct sqlca),
0,
{ 0, {0}},
{'N', 'O', 'T', ' ', 'S', 'E', 'T', ' '},
{0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0}
}
字段说明
- sqlcaid:
标识SQL通讯区,被初始化唯sqlca - sqlabc:
包含sqlca结构的长度(以字节为单位) - sqlcode:
最近执行的SQL语句的状态码
0:正确执行 ;>0:执行了语句,但没有记录行返回;<0:数据库,系统,网络故障,SQL语句没有执行 - sqlerrml:
sqlerrmc数组的实际文本长度 - sqlerrmc:
与sqlcode一致的对应的错误信息文本 只有当sqlcode<0才能访问,否则是上次错误信息 - sqlerrp:
保留字段,没有使用 - sqlerrd:
[0],[1],[3],[5]没有使用 sqlerrd[2]SQL语句处理的行数,如果SQL执行失败,则没有定义 ;[4]出现语法分析错误的字符开始位置,位置从0开始 - sqlwarn:
警告标记
[0]其他警告标记设置,该标记就被设置
[1]字段值被截断输出到宿主变量的时候被设置
[2]没有使用
[3]查询字段个数不等于宿主变量个数的时候被设置
[4]表中记录被没有where子句的delete,update处理的时候被设置
[5]当EXEC SQL CREATE{PROCDURE|FUNCTION|PACKAGE}语句编译错误的时候被设置
[6],[7]没有被使用 - sqlext:
没有被使用
oraca
oraca是oracle提供的另一个通信区
oraca算是sqlca的补充和辅助,当需要更进一步的信息时,oraca