---- ORACLE 作為大型數據庫管理系統,它強大而完善的數據管理功能吸引著越來越多的人們的注意。本人在oracle 系統開發中,就developer/2000編程有如下體會,希望能給初學者提供一些參考。
---- 一、使用設置菜單項屬性及form 數據項屬性限制不同用戶的訪問范圍
---- 一個應用系統往往有不同的用戶,比如: 一個勞資系統中,一個用戶負責管理職工基本檔案部分,另一個用戶負責管理職工工資部分,管理職工基本檔案的用戶對職工檔案只有查詢的權限而不能有修改的權限。實現上述功能的一個簡單的實現辦法是:
---- 設置兩個全局變量分別記錄用戶名和密碼,在進入系統時,兩個用戶分別輸入不同的用戶名和密碼,判斷用戶名,使SET_MENU_PROPERTY(MENU1,ENABLED,FALSE)語句設置沒有查詢權限的用戶不能訪問菜單項’MENU1’。
---- 二、提高表連接的查詢速度
---- 在表連接查詢時,常常用下列查詢方法查詢數據是:
SELECT RECORDNO,NAME,AGE
FROM 表1
WHERE 表1.RECORDNO NOT IN
(SELECT RECORDNO
FROM 表2
WHERE BIRTHDAY=’710618’);
---- 筆者發現,如果表1的長度為6000條記錄,表2的長度為1000條記錄, 則要4分鐘才能出結果。原因是使用了比較運算符 NOT IN ,它的邏輯測試速度是最慢的。利用外連接替換NOT IN 運算符,查詢時間則縮短為50秒。修改方法如下:
SELECT RECORDNO,NAME,AGE
FROM 表1,表2
WHERE 表1.RECORDNO=表2.RECORDNO(+)
AND 表2.RECORDNO IS NULL
AND 表2.BIRTHDAY(+)=’710618’;
---- 三、利用用庫模塊實現模塊資源共享
---- 在編程中很多FROM 模塊需要共用一個程序單元。ORACLE FORM 4.5提出了庫模塊的概念。使用庫模塊建立共享程序單元庫,既減少了磁盤占用空間,又增加程序的可維護性。使用庫模塊共享程序單元的過程是:點擊系統菜單的file-new-liberary選項,建立一庫模塊,在program units節點下增加一程序單元, 寫入需共享程序的單元編碼, 編譯後存盤。當FORM模塊需共享時,在模塊的Attached Libraries節點下連接庫模塊(此時屏幕會提示是否要刪除路徑,用戶選擇NO)。這樣,用戶便可在FORM模塊中直接使用共享程序單元了。
---- 四、易導致查詢數據錯誤的原因
---- 在執行數據查詢時,經常發現查詢結果與預想的不同,主要原因是:
---- 1.使用 SELECT * FROM <表名> WHERE <字段名> LIKE ’%’ 語句查詢不出 <字段名>為NULL的字段。此時需對字段為NULL的情況另外處理。如:SELECT * FROM <表名> WHERE <字段名> LIKE ’%’ OR <字段名> IS NULL
---- 2.使用union 字段連接各表時,連接順序不是按書寫的先後順序,而是按連接表的第一個字段排序。因此,為了使表按預想的順序連接,需在各表中插入第一字段指定排序序號。
---- 五、使用視圖組織報表數據簡單且易於維護
---- ORACLE REPORT2.5提供了多種報表格式,但在報表中定義各種統計信息不僅繁瑣而且不利於今後的維護,使用視圖預先將各種統計、匯總數據准備好,可以起到事半功倍的作用,一旦數據源有所調整,只需修改後台視圖,而不用再改前端程序了。
表1結構為: UNIT NAME RECORENO SEX
辦公室 王五 1 男
財務科 李四 2 女
.. .. .. ..
---- 1. 首先建立視圖對數據進行匯總:
CREATE VIEW RYTJ (UNIT, BOY,GIRL)
AS SELECT UNIT, SUM(DECODE(SEX,’男’
,1,0)) , SUM(DECODE(SEX,’女’,1,0) )
FROM 表1;
---- 2. 使用 ORACLE REPORT 2.5 對視圖’RYTJ’建立報表。
---- 六、 給報表加序號的簡單辦法
---- ORACLE REPORT 2.5 沒有提供加序號功能,使用下述簡單方法可實現給報表自動加序號:在數據模板中, 向查詢組中加入一個公式列 CF_XH NUMBER(4), 賦初值為0, 點擊[EDIT] 按鈕, 插入編碼RETURN(:CF_CH+1)。