第二章 Cach 變數大全 ECODE 變數

2021-10-14 16:31:44 字數 2303 閱讀 7788

包含當前錯誤**字串。

$ecode

$ec

發生錯誤時,caché會將$ecode特殊變數設定為逗號分隔的字串,其中包含與錯誤相對應的錯誤**。例如,當引用未定義的全域性變數時,caché將$ecode特殊變數設定為以下字串:

,m7,
$ecode可以包含iso 11756-1999標準m錯誤**,格式為m#,其中#是整數。例如,m6和m7分別是「未定義的區域性變數」和「未定義的全域性變數」。 (m7為全域性變數和程序專用全域性發布。)

$ecode還可以包含與caché general system錯誤**相同的錯誤**(在終端提示符處返回到$zerror特殊變數的錯誤**)。但是,$ecode在這些錯誤**前加上「z」,並刪除了尖括號。因此$ecode錯誤zsyntax是乙個錯誤,zillegal value是乙個錯誤,zfunction是乙個錯誤。$ecode不為提供它的那些錯誤**保留任何額外的錯誤資訊;因此zprotect是乙個錯誤;附加資訊元件儲存在$zerror中,但不在$ecode中。

如果在$ecode已經包含以前的錯誤**時出現錯誤,則在出現新錯誤時,現有的錯誤堆疊將被清除。新的錯誤堆疊將只包含顯示當前錯誤發生時狀態的條目。(這與早期的$ecode行為不同,在早期的$ecode行為中,舊的錯誤堆疊會一直存在,直到被顯式清除。)

如果有多個錯誤**,caché會按照收到的順序,在當前$ecode值的末尾追加每個錯誤的**。產生的$ecode字串中的每個錯誤都用逗號分隔,如下所示:

,zstore,m6,zillegal value,zprotect,
在上述情況下,最近的錯誤是錯誤。

也可以顯式清除或設定$ecode。當終止當前程序時,總是清除$ecode

可以通過將$ecode設定為空字串("")來清除它,如下所示:

set $ecode=

""

$ecode設定為空字串會產生以下效果:

不能新建$ecode特殊變數。嘗試這樣做會產生錯誤。

可以通過將$ecode設定為非空字串的值來強制執行錯誤。將$ecode設定為任何非null值將在執行objectscript例程期間強制執行直譯器錯誤。在caché將$ecode設定指定的非空值之後,caché採取以下步驟:

將指定的值寫入$ecode,覆蓋以前的所有值。

生成錯誤。(這將$zerror設定為值)。

將控制權傳遞給已建立的任何錯誤處理程式。錯誤處理程式可以檢查選擇的$ecode字串值,並採取措施適當地處理條件。

如果$ecode中累積字串的長度超過512個字元,導致字串溢位的錯誤**將清除並替換$ecode中的當前錯誤**列表。在這種情況下,$ecode中的錯誤列表是自最近一次字串溢位以來的錯誤列表,從導致溢位的錯誤開始。

$ecode特殊變數的格式是由乙個或多個錯誤**組成的逗號包圍的列表。以字母u開頭的錯誤**是為使用者保留的。所有其他錯誤**都保留給caché。

使用者定義的$ecode值應該與caché自動生成的值不同。為了確保這一點,請始終在錯誤文字前面加上字母u。另外,請記住用逗號來描述錯誤**。例如:

set $ecode=

",upassword expired!,"

檢查$zerror而不是$ecode的caché錯誤

錯誤處理程式應該檢查$zerror,而不是$ecode來查詢最近的caché錯誤。

第五章 Cach 變數大全 HALT 變數

示例 包含暫停陷阱例程呼叫。halt halt包含當前暫停陷阱例程的名稱。當遇到halt命令時,應用程式將呼叫暫停陷阱例程。該暫停陷阱例程可以在發出halt命令之前執行清理或日誌記錄處理,或者可以替代其他處理而不是暫停程式執行。可以使用set命令將 halt設定為暫停陷阱例程。暫停陷阱例程由帶引號的...

第七章 Cach 變數大全 IO 變數

包含當前輸入 輸出裝置的id。io i io包含所有輸入 輸出操作所指向的當前裝置的裝置id。如果輸入和輸出裝置不同,則 io包含當前輸入裝置的id。cach 在登入時將 io的值設定為主要輸入 輸出裝置。principal包含主體裝置的id。發出use命令來更改當前裝置。只有use和close命令...

第二十二章 Cach 變數大全 X 變數

包含游標的當前水平位置。x x包含游標的當前水平位置。將字元寫入裝置時,cach 會更新 x以反映水平游標位置。輸出的每個可列印字元將x加1 回車符 as cii13 或換 頁符 asci i12 將 x加1。回車符 ascii 13 或換頁符 ascii 12 將 x加1。回車 符 a scii ...