編程規範
1:所有數據庫關鍵字和保留字都大寫;字段、變量的大小寫
2:程序塊採用縮進風格書寫,保證代碼清晰易讀,風格一致,縮進格數統一爲2/4個。
必須使用空格,不允許使用【tab】鍵。
3:當同一條語句暫用多於一行時,每行的其他關鍵字與第一行的關鍵字進行右對齊。
4:不允許多個語句寫到一行,即一行只寫一條語句。
5:避免把複雜的SQL語句寫到同一行,建議要在關鍵字和謂詞處換行。
6:相對獨立的程序塊之間必須加空行。BEGIN、END獨立成行。
7:太長的表達式應在低優先級操作符處換行,操作符或關鍵字應放在新行之首。不同類型的操作符混合使用時,用括號隔離,使得代碼清晰。
8: 不同類型的操作符混合使用時,應使用括號明確的表達運算的先後關係。
9:運算符以及比較符左邊或者右邊只要不是連結的括弧,則空一格。
10:if 後的條件要用括號括起來,括號內每行最多兩個條件。
11:減少控制語句的檢查次數,如在 else( )控制語句中,對最常用符合條件,儘量往前被檢查到。儘量避免使用嵌套的if 語句,在這種情況應使用多個if 語句來判斷其可能。
命名規範
1:不使用數據庫關鍵字和保留字,爲了避免不必要的衝突和麻煩。
2:嚴禁使用帶空格的名稱來給字段和表命名,會出錯誤而終止。
3:用戶自訂數據庫對象:表,視圖,主外鍵,索引,觸發器,函數,存儲過程,序列,同義詞,數據庫連接,包,包體風格要保持一致。
數據庫名稱1-8個字元,其他對象1-30個字元,數據庫連接不操過30個字元。使用英文字母、數字、下劃線。
除表外,其他對象命名最好用不同的前綴來區別。
表 tbl_/t_
視圖 v_
序列 seq_
簇 c_
觸發器 trg_
存儲過程 sp_/p_
函數 f_/fn_
物化視圖 mv_
包和包體 pkg_
類和類體 typ_
主鍵 pk_
外鍵 fk_
唯一索引 uk_
普通索引 idx_
位圖索引 bk_
4:PL/SQL對象和變量命名規則
輸入變量 i_
輸出變量 o_
輸入輸出變量 io_
普通變量 v_
全局變量 gv_
常量 大寫
遊標 cur_
用戶自訂類型 type_
儲存點 spt_
不允許使用中文和特殊字元
用戶對象命名應全部爲小寫,且不允許使用控制符號強制轉換對象爲小寫字元
變量命名,要有具體含義,能表明變量類型。
5:註釋規範
源程序有效註釋量必須在30%左右。
統一檔案頭的註釋,針對存儲過程,函數進行功能性描述,入出參數說明。
/*******************************************************************
名稱:
功能描述:
修訂記錄
版本號 編輯時間 編輯人 修改描述
入出參數說明
返回值描述(針對函數)
*******************************************************************/
所有變量定義需要添加註釋,說明該變量的用途和含義。
程序分支必須書寫註釋,這些語句是程序實現某一特定功能的關鍵。
在程序塊的結束行加註釋,表明程序塊結束。
註釋應與描述的代碼相似,對代碼的註釋應在其上方或右方現今爲止,不能放在下面。
禁止在註釋中使用縮寫,特別是非常用的縮寫。
註釋要與描述的內容進行相同的縮排。
註釋上面的代碼應空行隔開。
註釋用中文書寫。
儘量使用”--” 進行注註釋。
行尾註釋須使用”--” 。
6:分區表命名
分區表的表名可以遵循普通表的正常命名規則。主要用途的縮寫+下劃線+yymm。
按地域分佈的子公司庫存表( 每個區域一個分區),分區名這爲表的主要用途的縮寫+區域的縮寫。
最小分區名字爲before_data 規則3.4.5:最大分區名字爲after_data 規則3.4.5:子分區的名字爲:父分區名+下劃線+sub+ 下劃線+no( 區域縮寫),根據實際情況進行組合。
分區表本地索引命名在正常索引名的最後一個下劃線前加L。
分區表全局索引命名在正常索引名的最後一個下劃線前加G。
DML操作規範
1:減少控制語句的檢查次數,應將最常用的符合條件前置以便被檢查到。
2:避免使用 SELECT *語句,給出字段列表,避免出現在表結構變化時程序無法識別的情況。
3:INSERT 語句必須給出字段列表,避免在表結構變化時發生編譯錯誤。
4:從表中同一筆記錄中獲取記錄的字段值,須使用一SQL 語句得到,不允許分多條SQL 語句。
5:當一個PL/SQL 或SQL 語句中涉及到多個表時,始終使用別名來限定字段名,這使其它人閱讀起來更方便,避免了含議模糊的引用,其中能夠別名中清晰地判斷出表名。
6:禁止進行字段數據類型的隱式轉換,所有轉換必須進行明確的數據類型轉換
說明:隱式轉換會導致字段上的索引失效,而進行顯式轉換,會提醒到開發人員該種操作會導致索引失效
7:禁止在多表關聯的時候,在非索引字段上的關聯;
8:進行模糊查詢時,禁止條件中字元串直接以“%”開頭;
9:儘量使用DECODE來簡化SQL訪問數據庫的次數
10:避免使用HAVING子句, HAVING 只會在檢索出所有記錄之後纔對結果集進行過濾. 這個處理需要排序,總計等操作. 如果能透過WHERE子句限制記錄的數目,那就能減少這方面的開銷.
11:當PL/SQL或SQL語句中涉及多個表時,始終使用別名來限定表名和字段名。
12:確保變量和參數在類型和長度上與表數據列相匹配,否則較寬或較大數據進來時會異常。
13:使用EXISTS/NOT EXISTS替代IN/NOT IN
14:採用表連接替代EXIST
15:複雜的SQL是否由設計不當引起,複雜的SQL考慮用程序塊來執行。
處理的優先級
靜態SQL>動態SQL
綁定變量的SQL>動態SQL
SQL>PL/SQL過程
SQL>遊標遍歷
ORACLE函數>自訂函數
16: 使用ORACLE分析函數來代替同一表多次的關聯。
17: 使用動態SQL時要綁定變量。
18:不要把空的變量直接與比較運算符比較,如果結果可能爲空,應使用IS NULL貨IS NOT NULL 或NVL函數進行比較。
19:order by 後面字段不唯一時分頁會出現問題,分頁時如果order by 後面的字段不唯一,一定要讓order by 唯一,最佳方案是增加一pk,如實在沒辦法則可以追加rowid,order by 後儘量避免使用rowid。