前言 對於新接觸OracleDeveloper編程的同仁而言
當完成的系統交給用戶時
經常性出現
沒有保存需要修改
視圖不可以更新
之類的錯誤提示是非常尴尬的事
系統交付用戶使用後
用戶一定會回饋一些BUG
然而讓用戶重現BUG又是一件非常艱難的工作
面對這些問題
解決的途徑仍與其它開發工具一樣
就是錯誤處理的控制
在其它語言中
我們可以通過類似On Error Do xxx
之類的語句來實現
但是在FORMS中
錯誤控制卻往往令新進同仁頭疼不已
不知該在哪裡屏蔽錯誤信息
本文對Forms的錯誤處理進行簡單論述和應用
並提供錯誤控制基本的程序包
以解決新進同仁對困惑
同時也拋磚引玉
希望各同仁可以不斷充實本文涉及的程序包和錯誤字典
使之成為更加實用的共享代碼
技術要點 復雜的問題
仍是由最簡單的方法來實現
錯誤處理相關觸發器
FORMS的錯誤
全部由On Error和On Message兩個觸發器來控制
比較麻煩的是這兩個觸發器有時會一起觸發
有時又只觸發一個
最好的辦法
就是將觸發器的響應程序做得一個程序包
在兩個觸發器中都進行控制
相關錯誤代碼
在On Error觸發器中
一般使用Error_Code
Error_Text
Error_Type系統變量
錯誤代號/錯誤名稱/錯誤類型
在On Message觸發器中
一般使用Message_Code
Message_Text
Message_Type系統變量
如果是Oracle後台錯誤
則通過DBMS_Error_Code和DBMS_Error_Text來獲取相關信息
實現與功能 體系架構
創建字典表數據表和相關視圖
存儲在屏蔽的錯誤信息
此時程序的BUG信息仍可以<當然也可以不>顯示於用戶界面
創建錯誤日志數據表
存儲用戶使用過程中的每一個錯誤信息
該數據表可以為將來系統維護提供非常重要的支持
創建後台程序包
對錯誤進行處理
所謂
處理
在實例中是將錯誤信息寫入錯誤日志
並判斷字典表確認該錯誤信息是否顯示於用戶界面
創建前台程序包
對錯誤進行處理
所謂
處理
在實例中只是調用後台程序包而已
所有相關文件及代碼
點擊此處下載armok
rar
創建數據庫運行環境
============================================================
Table: 錯誤日志數據表
============================================================
create table SYSTEM_ERRORLOG
(
SELKEY NUMBER(
) not null
ISCONTROL CHAR(
) null
SELCODE NUMBER(
) null
SELTYPE VARCHAR
(
) null
SELTEXT VARCHAR
(
) null
SELMODULE VARCHAR
(
) null
SELBLOCK VARCHAR
(
) null
SELITEM VARCHAR
(
) null
ORACLECODE NUMBER(
) null
ORACLETEXT VARCHAR
(
) null
SQLTEXT VARCHAR
(
) null
SQLSTR VARCHAR
(
) null
SELLOG DATE null
SELUSR NUMBER(
) null
constraint PK_SYSTEM_ERRORLOG primary key (SELKEY)
)
/
============================================================
Table: 字典表
============================================================
create table SYSTEM_DICT
(
DICTKEY number(
) not null
DICTCLASS nvarchar
(
) null
DICTPROP nvarchar
(
) null
DICTCODE nvarchar
(
) null
DICTNAME nvarchar
(
) null
UPCLASSKEY number(
) null
MEMO nvarchar
(
) null
CRTUSR number(
) null
CRTLOG date null
AMDUSR number(
) null
AMDLOG date null
constraint PK_SYSTEM_DICT primary key (DICTKEY)
)
/
============================================================
Table: 錯誤日志序列
============================================================
系統錯誤日志KEY
用於生成系統錯誤日志的主鍵
CREATE SEQUENCE SQ_System_SelKey INCREMENT BY
START WITH
MAXVALUE
E
MINVALUE
NOCYCLE
CACHE
NOORDER
/
============================================================
Table: 要屏蔽的錯誤信息
============================================================
Insert Into System_Dict
(DictKey
DictClass
DictProp
DictCode
DictName
UpClassKey
CrtLog
CrtUsr
AmdLog
AmdUsr)
Values
(
ErrorMsg
AppDict
不能在此創建記錄
Null
SysDate
SysDate
);
Insert Into System_Dict
(DictKey
DictClass
DictProp
DictCode
DictName
UpClassKey
CrtLog
CrtUsr
AmdLog
AmdUsr)
Values
(
ErrorMsg
AppDict
域被保護防止更新
Null
SysDate
SysDate
);
Insert Into System_Dict
(DictKey
DictClass
DictProp
DictCode
DictName
UpClassKey
CrtLog
CrtUsr
AmdLog
AmdUsr)
Values
(
ErrorMsg
AppDict
不能在視圖插入或更新數據
Null
SysDate
SysDate
);
Insert Into System_Dict
(DictKey
DictClass
DictProp
DictCode
DictName
UpClassKey
CrtLog
CrtUsr
AmdLog
AmdUsr)
Values
(
ErrorMsg
AppDict
不能更新此記錄
Null
SysDate
SysDate
);
Insert Into System_Dict
(DictKey
DictClass
DictProp
DictCode
DictName
UpClassKey
CrtLog
CrtUsr
AmdLog
AmdUsr)
Values
(
ErrorMsg
AppDict
沒修改需要保存
Null
SysDate
SysDate
);
Insert Into System_Dict
(DictKey
DictClass
DictProp
DictCode
DictName
UpClassKey
CrtLog
CrtUsr
AmdLog
AmdUsr)
Values
(
ErrorMsg
AppDict
沒有查詢到記錄
Null
SysDate
SysDate
);
Insert Into System_Dict
(DictKey
DictClass
DictProp
DictCode
DictName
UpClassKey
CrtLog
CrtUsr
AmdLog
AmdUsr)
Values
(
ErrorMsg
AppDict
在第一條記錄
Null
SysDate
SysDate
);
Insert Into System_Dict
(DictKey
DictClass
DictProp
DictCode
DictName
UpClassKey
CrtLog
CrtUsr
AmdLog
AmdUsr)
Values
(
ErrorMsg
AppDict
已查詢到最後一條記錄
Null
SysDate
SysDate
);
============================================================
Table: 要屏蔽的錯誤信息清單視圖
============================================================
Create Or Replace View VW_System_JumpMsg_Qry AS
Select
創建字典視圖
要屏蔽的系統信息
DictKey
DictClass
DictProp
DictCode
DictName
From System_Dict
Where
Upper(DictClass)=Upper(
ErrorMsg
)
And Upper(DictProp)=Upper(
AppDict
)
Order By DictKey
/
============================================================
Table:錯誤信息後台程序包
============================================================
create or replace package PKG_System_Assert is
Author : RUBYXUE
Created :
:
:
Purpose : 系統維護
登記前台系統的錯誤
Function FN_SystemErrorLog
(P_SelCode Number
P_SelType Varchar
From:http://tw.wingwit.com/Article/program/Oracle/201311/17570.html