Oracle pro*c/c++通訊區 sqlca oraca

2020-10-18 14:00:20

偵錯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

結構定義

欄位說明