標題: [轉貼] SQLCA record [打印本頁] 作者: neilgboy 時間: 昨天 11:27標題: SQLCA record
SQLCA系統記錄架構
SQLCA(SQL Communication Access) 系由系統提供之系統記錄架構,作為 back end 與 front end 之間溝通之用,當發生 I/O 狀態時,系統會記錄該狀態於SQLCA 中
,front end 即可依據其其內容得知 I/O 運作是否成功,再決定往後執行的步驟。
SQLCA 為系統定義之 GLOBAL 變數,以下為其架構並介紹其內容與用途:
DEFINE SQLCA RECORD
SQLCODE INTEGER,
SQLERRM CHAR(71),
SQLERRP CHAR(8),
SQLERRD ARRAY[6] OF INTEGER,
SQLAWARN CHAR(8)
END RECORD
.SQLCODE :表示 I/O 的結果
0 表示 I/O 成功
100 表示 NOTFOUND
< 0 表示 I/O 失敗
.SQLERRM :保留未用
.SQLERRP :保留未用
.SQLERRD :為一個含有6個 INTEGER 之陣列
SQLERRD[1]:保留未用
SQLERRD[2]:新增時 SERIAL 欄位所傳回之值
SQLERRD[3]:處理資料的筆數
SQLERRD[4]:查詢時預估的 CPU COST
SQLERRD[5]:SQL指令之錯誤位移
SQLERRD[6]:最後一個 ROWID 值
.SQLAWARN :為一個含有8個字元的字串,以記錄I/O時產生的警告訊息。若正確無誤,則相對應之字元設定為空白,否則會被設定為"W"。
SQLAWARN[1]:若第2至第8字元中任意一個被設成"W",則此字元亦為"W",否則為空白。
SQLAWARN[2]:若資料太長而被截掉時,會被設成 "W"。
SQLAWARN[3]:若 aggregate function(如 SUM,AVG,MAX,MIN) 處理時遇到 NULL 值,則會被設成"W"。
SQLAWARN[4]:若查詢時,若欲查詢的欄位數目和 INTO 之變數數目不合時,會被設成 "W"。
SQLAWARN[5]:如轉換 float 成 integer 時,則會被設成 "W"。
SQLAWARN[6]:保留未用
SQLAWARN[7]:保留未用
SQLAWARN[8]:保留未用
~~SQLCA.SQLCODE 是否等於 STATUS ?
因 sqlca.sqlcode 系用以溝通 front end 和 back end ,因此只有 I/O 發生時才會更改 sqlca ,同時 status 也被設定等於 sqlca.sqlcode 值。但若只是純粹 front end 的動作(如 display),則只有 status 會被設定,而sqlca.sqlcode 則保持不變。為了避免錯誤,要注意下列兩件事:
1.若要以 status 判斷 I/O 是否成功,在 I/O 後立即判斷 status,中間不可插入任何會更改 status 之指令。
2.若要以 sqlca.sqlcode 判斷 I/O 是否成功,在 I/O 後除非有新的 I/O 發生,不然允許先執行其它 frint end 之指令,以後再予以判斷。