Oracle pro*c/c++通讯区 sqlca oraca

10/19 10:59
阅读数 17

调试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

结构定义

字段说明

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部