版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、本文檔及其所含信息為內(nèi)部保密材料本文檔及其所含信息為內(nèi)部保密材料, ,由北京神州數(shù)碼思特奇信息技術(shù)股份有限公司擁有由北京神州數(shù)碼思特奇信息技術(shù)股份有限公司擁有未經(jīng)書面授權(quán),不得對外泄露未經(jīng)書面授權(quán),不得對外泄露 copyright 2007 保留所有保留所有權(quán)利權(quán)利sqlsql 編碼規(guī)范編碼規(guī)范(v0.6v0.6)北京神州數(shù)北京神州數(shù)碼碼思特奇信息技思特奇信息技術(shù)術(shù)股份有限公司股份有限公司二二七二七二七年八月七年八月sql 編碼規(guī)范編碼規(guī)范 神州數(shù)碼思特奇信息技術(shù)股份有限公司神州數(shù)碼思特奇信息技術(shù)股份有限公司 地址:北京市海淀區(qū)上地九街 9 號數(shù)碼科技廣場二層(100085)電話 (tel)
2、:(010) 58856600 傳真 (fax):(010) 62969630 第第 2 頁頁 共共 34 頁頁文檔信息文檔信息文檔名稱文檔名稱sql 編碼規(guī)范電電子文檔子文檔sql 編碼規(guī)范.doc/microsoft word 2000文件狀文件狀態(tài)態(tài) 草草 稿稿 正式發(fā)布正式發(fā)布 正在修改正在修改編編 寫寫 人人dongjz、yangyun日日 期期2007 年 06 月 27 日校校 對對 人人日日 期期年 月 日審審 核核 人人日日 期期年 月 日批批 準(zhǔn)準(zhǔn) 人人日日 期期年 月 日變變更更記錄記錄變變更更序號序號變變更原因更原因變變更更頁碼頁碼變變更前更前版本號版本號變變更后更后版
3、本號版本號更改人更改人批準(zhǔn)人批準(zhǔn)人生效生效日期日期備備 注注1文檔建立0.1 sql 編碼規(guī)范編碼規(guī)范 神州數(shù)碼思特奇信息技術(shù)股份有限公司神州數(shù)碼思特奇信息技術(shù)股份有限公司 地址:北京市海淀區(qū)上地九街 9 號數(shù)碼科技廣場二層(100085)電話 (tel) :(010) 58856600 傳真 (fax):(010) 62969630 第第 3 頁頁 共共 34 頁頁目目 錄錄1概述概述.71.1.范圍.72排版規(guī)則排版規(guī)則.81.2.一般規(guī)則.8規(guī)則 2.1 獨(dú)立單元書寫規(guī)則.8規(guī)則 2.2 塊關(guān)鍵字對齊原則.8規(guī)則 2.3 塊內(nèi)縮進(jìn)原則.9規(guī)則 2.4 tab/空格一致原則.9規(guī)則 2.5
4、 程序塊間隔行規(guī)則.9規(guī)則 2.6 if 語句.9規(guī)則 2.7 循環(huán)語句.9規(guī)則 2.8 換行規(guī)則.10規(guī)則 2.9 空格.10規(guī)則 2.10 大小寫規(guī)則.101.3.e-sql 排版規(guī)則 .11規(guī)則 2.11 在 exec sql 語句后加一個 tab 鍵,然后再寫 sql 語句。.11規(guī)則 2.12 sql 語句的關(guān)鍵字 select、from、where、and 等,必須尾部對齊。.11規(guī)則 2.13 語句的結(jié)束符“;”,放在語句的結(jié)束位置,不單獨(dú)起一行。.11規(guī)則 2.14 sql 語句中不能有注釋,如“/*/”、“-”等,注釋寫在sql 語句的外面。.11規(guī)則 2.15 sql 語句
5、中的對齊方式用空格對齊,sql 語句到“exec sql”之間用 tab 對齊。.11sql 編碼規(guī)范編碼規(guī)范 神州數(shù)碼思特奇信息技術(shù)股份有限公司神州數(shù)碼思特奇信息技術(shù)股份有限公司 地址:北京市海淀區(qū)上地九街 9 號數(shù)碼科技廣場二層(100085)電話 (tel) :(010) 58856600 傳真 (fax):(010) 62969630 第第 4 頁頁 共共 34 頁頁規(guī)則 2.16 每個嵌入的 exec sql 語句,必須單獨(dú)一行開始。.113注釋規(guī)則注釋規(guī)則.12規(guī)則 3.1 對象注釋要求.12規(guī)則 3.2 文件注釋.12規(guī)則 3.3 過程與函數(shù)的注釋.12規(guī)則 3.4 變量注釋.1
6、3規(guī)則 3.5 參數(shù)注釋.13規(guī)則 3.6 功能性注釋.13規(guī)則 3.7 單行注釋.144命名規(guī)范命名規(guī)范.154.1數(shù)據(jù)庫對象.15建議 4.1 命名長度和結(jié)構(gòu).15規(guī)則 4.2 不得出現(xiàn)省市、項目簡稱.15規(guī)則 4.3 年月日等數(shù)字.15規(guī)則 4.4 區(qū)分非正式表.15規(guī)則 4.5 命名特例.164.2pl/sql 程序塊內(nèi)變量.16規(guī)則 4.6 程序塊內(nèi)變量命名.164.3e-sql 源文件.17規(guī)則 4.7:e-sql 源文件命名.174.4常用英文縮寫字典.17規(guī)則 4.8:業(yè)務(wù)操作類.17規(guī)則 4.9:業(yè)務(wù)名詞類.195sql 程序編碼規(guī)則程序編碼規(guī)則.215.1pl/sql 程序
7、塊.21sql 編碼規(guī)范編碼規(guī)范 神州數(shù)碼思特奇信息技術(shù)股份有限公司神州數(shù)碼思特奇信息技術(shù)股份有限公司 地址:北京市海淀區(qū)上地九街 9 號數(shù)碼科技廣場二層(100085)電話 (tel) :(010) 58856600 傳真 (fax):(010) 62969630 第第 5 頁頁 共共 34 頁頁規(guī)則 5.1 簡單函數(shù)或過程.21規(guī)則 5.2 不允許使用內(nèi)嵌函數(shù)或過程.21規(guī)則 5.3 復(fù)雜函數(shù)或過程.225.2e-sql 程序.22規(guī)則 5.4 sql 語句出錯判斷,使用 notfound、sqlok 等宏判斷 sql語句是否正確執(zhí)行。.22規(guī)則 5.5 e-sql 使用自己的出錯控制,不
8、使用 e-sql 提供的統(tǒng)一出錯控制,e-sql 的出錯一般設(shè)置為無效。.22規(guī)則 5.6 屬主變量都要放在 sql 定義區(qū)統(tǒng)一定義。.225.3可讀性要求.23規(guī)則 5.7 不允許使用 select *.23規(guī)則 5.8 insert 必須指定插入的字段名.23規(guī)則 5.9 函數(shù)及表達(dá)式放在等號左邊.23規(guī)則 5.10 不等于統(tǒng)一使用.23規(guī)則 5.11 使用表的別名.236sql 性能規(guī)則與建議性能規(guī)則與建議.246.1性能相關(guān)的規(guī)則.24規(guī)則 6.1 添加索引提高效率.24規(guī)則 6.2 where 子句中不應(yīng)對索引列使用函數(shù).24規(guī)則 6.3 使用顯式的類型轉(zhuǎn)換.24規(guī)則 6.4 為共享
9、 sql 語句,要使用綁定變量.246.2性能相關(guān)的建議.25建議 6.5 減少子查詢的使用.25建議 6.6 使用 decode 函數(shù)來減少處理時間.25建議 6.7 用 union 替換 or (適用于索引列).26建議 6.8 如何刪除重復(fù)記錄.26sql 編碼規(guī)范編碼規(guī)范 神州數(shù)碼思特奇信息技術(shù)股份有限公司神州數(shù)碼思特奇信息技術(shù)股份有限公司 地址:北京市海淀區(qū)上地九街 9 號數(shù)碼科技廣場二層(100085)電話 (tel) :(010) 58856600 傳真 (fax):(010) 62969630 第第 6 頁頁 共共 34 頁頁建議 6.9 用 truncate 替代 delet
10、e 刪除全表.27建議 6.10 特大事務(wù)多使用 commit.27建議 6.11 用 where 子句替換 having 子句.27建議 6.12 用 exists 替代 in.28建議 6.13 用 not exists 替代 not in.28建議 6.14 用表連接替換 exists.29建議 6.15 用 exists 替換 distinct.29建議 6.17 避免在索引列上使用計算.30建議 6.18 避免在索引列上使用 not.30建議 6.19 用=替代.317程序質(zhì)量保證程序質(zhì)量保證.32規(guī)則 7.1 運(yùn)行日志.32規(guī)則 7.2 錯誤日志.32規(guī)則 7.3 工作日志.32規(guī)
11、則 7.4 異常檢查.328安全保障安全保障.338.1pl/sql 安全.33規(guī)則 8.1 dml/ddl 語句需說明功能和要求.33規(guī)則 8.2 游標(biāo)使用結(jié)束后必須關(guān)閉.338.2e-sql 安全.33規(guī)則 8.3 proc 程序中禁止出現(xiàn)用戶名和密碼.338.3數(shù)據(jù)庫操作.33規(guī)則 8.4 dml/ddl 操作應(yīng)顯式寫明對象屬主.33sql 編碼規(guī)范編碼規(guī)范 神州數(shù)碼思特奇信息技術(shù)股份有限公司神州數(shù)碼思特奇信息技術(shù)股份有限公司 地址:北京市海淀區(qū)上地九街 9 號數(shù)碼科技廣場二層(100085)電話 (tel) :(010) 58856600 傳真 (fax):(010) 62969630
12、 第第 7 頁頁 共共 34 頁頁1 1 概述概述制定編碼規(guī)范的最主要的目的是為了對產(chǎn)出代碼的長期維護(hù)。通常負(fù)責(zé)維護(hù)代碼的人大多都不是開發(fā)者本人,如果有一個統(tǒng)一的代碼格式以及說明就可以減少混淆提高理解速度。因此,下列的編碼規(guī)范是基于良好的編碼習(xí)慣和可讀性的原則來制定的。1.1.范圍范圍本規(guī)范定義了所有代碼編寫者在編寫 sql 程序時應(yīng)遵守的一些規(guī)則和習(xí)慣。本規(guī)范采用以下術(shù)語描述: 規(guī)則:規(guī)則:編程時強(qiáng)制必須遵守的原則。 建議:建議:編程時必須加以考慮的原則。 說明說明【 】:對此規(guī)則或建議進(jìn)行必要的解釋。 示例:示例:對此規(guī)則或建議從正、反兩個方面給出例子。sql 編碼規(guī)范編碼規(guī)范 神州數(shù)碼思
13、特奇信息技術(shù)股份有限公司神州數(shù)碼思特奇信息技術(shù)股份有限公司 地址:北京市海淀區(qū)上地九街 9 號數(shù)碼科技廣場二層(100085)電話 (tel) :(010) 58856600 傳真 (fax):(010) 62969630 第第 8 頁頁 共共 34 頁頁2 2 排版規(guī)則排版規(guī)則1.2.一般規(guī)則一般規(guī)則規(guī)則規(guī)則 2.1 獨(dú)立單元書寫規(guī)則獨(dú)立單元書寫規(guī)則整個文件,以過程、函數(shù)或包為相對獨(dú)立的單元。在每個單位中,采用以下統(tǒng)一格式:示例:示例:create or replace as begin exception end;即:create、as、begin、exception 和 end,在第 1
14、 列。后面的內(nèi)容,間隔 4 個空格書寫。除非內(nèi)部處理,否則一律帶上 exception。規(guī)則規(guī)則 2.2 塊關(guān)鍵字對齊原則塊關(guān)鍵字對齊原則任何塊的關(guān)鍵字,首字母在列上對齊。即:一個程序塊內(nèi)部,標(biāo)識程序塊的關(guān)鍵字開始語句(if、do、for 和begin)、中間語句(elsif、exception、else)和結(jié)束語句(end if、end loop、end),在列位置對齊。sql 編碼規(guī)范編碼規(guī)范 神州數(shù)碼思特奇信息技術(shù)股份有限公司神州數(shù)碼思特奇信息技術(shù)股份有限公司 地址:北京市海淀區(qū)上地九街 9 號數(shù)碼科技廣場二層(100085)電話 (tel) :(010) 58856600 傳真 (fa
15、x):(010) 62969630 第第 9 頁頁 共共 34 頁頁規(guī)則規(guī)則 2.3 塊內(nèi)縮進(jìn)原則塊內(nèi)縮進(jìn)原則即:一個塊下屬的內(nèi)容,從下一行開始,從這個塊的標(biāo)識首字符右移 4 個空格(或者一個 tab 鍵),從第 5 個列位置開始。規(guī)則規(guī)則 2.4 tab/空格一致原則空格一致原則即:一個源文件中,在內(nèi)容縮進(jìn)上,要么采用 tab 方式,要么采用 4 個空格方式。不能二者并存。規(guī)則規(guī)則 2.5 程序塊間程序塊間隔行規(guī)則隔行規(guī)則sql 程序塊之間,采用 1 行空行分隔。適當(dāng)時候,可以存在 2 行空行,不要超過 2 行(注釋行不在此約定范圍內(nèi))。規(guī)則規(guī)則 2.6 if 語句語句if 語句是條件判斷語
16、句,只有一個條件的時候,可以不用圓括號。兩個以上條件的時候,要求用圓括號(),使得邏輯處理明晰。if/elsif/else/end if 關(guān)鍵字,每個都獨(dú)立占一行。且每行的開始列位置都相同。特別注意,結(jié)束語句 end if 后面,有分號。規(guī)則規(guī)則 2.7 循環(huán)語句循環(huán)語句循環(huán)開始語句(for、while)跟 loop 語句分行。end loop 語句,跟 loop 在同一列位置。示例:示例:for v_index in 1.20loopsql 編碼規(guī)范編碼規(guī)范 神州數(shù)碼思特奇信息技術(shù)股份有限公司神州數(shù)碼思特奇信息技術(shù)股份有限公司 地址:北京市海淀區(qū)上地九街 9 號數(shù)碼科技廣場二層(100085
17、)電話 (tel) :(010) 58856600 傳真 (fax):(010) 62969630 第第 10 頁頁 共共 34 頁頁 end loop;規(guī)則規(guī)則 2.8 換行換行規(guī)則規(guī)則一行最長不能超過 80 字符。當(dāng)超過時,以語意為單位,進(jìn)行斷行,且斷行后的內(nèi)容,縮進(jìn)書寫。示例:示例:- 創(chuàng)建匯總基礎(chǔ)表 create_basedat- p_basesql in varchar - sql 語句- p_sresulttbl in varchar- 結(jié)果輸出數(shù)據(jù)表- p_sinfostr in varchar- 提示信息- 返回值:0 記錄數(shù)function create_basedata(p
18、_basesql in varchar, p_sresulttbl in varchar, p_sinfostr in varchar2) return int;此外,select/from/where/order by/group by 等子句必須另起一行寫。規(guī)則規(guī)則 2.9 空格空格sql 內(nèi)算數(shù)運(yùn)算符、邏輯運(yùn)算符連接的兩個元素之間必須用空格分隔。逗號之后必須接一個空格。關(guān)鍵字、保留字和左括號之間必須有一個空格。規(guī)則規(guī)則 2.10 大小寫規(guī)則大小寫規(guī)則sql 語句中出現(xiàn)的系統(tǒng)保留字、內(nèi)置函數(shù)名、sql 保留字、綁定變量等都應(yīng)大寫。sql 編碼規(guī)范編碼規(guī)范 神州數(shù)碼思特奇信息技術(shù)股份有限公司
19、神州數(shù)碼思特奇信息技術(shù)股份有限公司 地址:北京市海淀區(qū)上地九街 9 號數(shù)碼科技廣場二層(100085)電話 (tel) :(010) 58856600 傳真 (fax):(010) 62969630 第第 11 頁頁 共共 34 頁頁1.3.e-sql 排版規(guī)則排版規(guī)則規(guī)則規(guī)則 2.11 在在 exec sql 語句后加一個語句后加一個 tab 鍵,然后再寫鍵,然后再寫 sql 語句。語句。規(guī)則規(guī)則 2.12 sql 語句的關(guān)鍵字語句的關(guān)鍵字 select、from、where、and 等,等,必須尾部對齊。必須尾部對齊。規(guī)則規(guī)則 2.13 語句的結(jié)束符語句的結(jié)束符“;”,放在語句的結(jié)束位置,
20、不單獨(dú)起一行。,放在語句的結(jié)束位置,不單獨(dú)起一行。規(guī)則規(guī)則 2.14 sql 語句中不能有注釋,如語句中不能有注釋,如“/*/”、“-”等,注釋寫在等,注釋寫在sql 語句的外面。語句的外面。規(guī)則規(guī)則 2.15 sql 語句中的對齊方式用空格對齊,語句中的對齊方式用空格對齊,sql 語句到語句到“exec sql”之間用之間用 tab 對齊。對齊。示例:示例:e-sqlexec sqlselect col1, col2 from tab1 where col1 = ? and col2 = ?;sql 編碼規(guī)范編碼規(guī)范 神州數(shù)碼思特奇信息技術(shù)股份有限公司神州數(shù)碼思特奇信息技術(shù)股份有限公司 地址
21、:北京市海淀區(qū)上地九街 9 號數(shù)碼科技廣場二層(100085)電話 (tel) :(010) 58856600 傳真 (fax):(010) 62969630 第第 12 頁頁 共共 34 頁頁規(guī)則規(guī)則 2.16 每個嵌入的每個嵌入的 exec sql 語句,必須單獨(dú)一行開始。語句,必須單獨(dú)一行開始。sql 編碼規(guī)范編碼規(guī)范 神州數(shù)碼思特奇信息技術(shù)股份有限公司神州數(shù)碼思特奇信息技術(shù)股份有限公司 地址:北京市海淀區(qū)上地九街 9 號數(shù)碼科技廣場二層(100085)電話 (tel) :(010) 58856600 傳真 (fax):(010) 62969630 第第 13 頁頁 共共 34 頁頁3
22、3 注釋規(guī)則注釋規(guī)則規(guī)則規(guī)則 3.1 對象注釋要求對象注釋要求創(chuàng)建每一數(shù)據(jù)庫對象時都要加上 comment on 注釋,以說明該對象的功能和用途;建表時,對某些數(shù)據(jù)列也要加上 comment on 注釋,以說明該列和/或列取值的含義。示例:示例:comment on table rasinfo.td_userinfo is 普通地區(qū)用戶信息表,用于記錄除成都外的其他地區(qū)的用戶信息,按地區(qū)分區(qū);comment on column rasinfo.td_userinfo.usercode is 用戶編碼,主鍵;規(guī)則規(guī)則 3.2 文件注釋文件注釋在每個 sql 腳本文件的開頭,要用塊注釋,進(jìn)行文件功
23、能說明,文件編寫人、聯(lián)系方式和文件創(chuàng)建時間說明等。由于 pl/sql 語句的特殊性,每行注釋前以-為標(biāo)志。示例:- 收入保障系統(tǒng) 后臺數(shù)據(jù)庫腳本- 特殊號碼匯總計算程序 dsras_pkgspecal_calcsum.sql- 文本責(zé)任人:丁凌風(fēng)(dinglfsi- )- 2007.02.28 開始創(chuàng)建-規(guī)則規(guī)則 3.3 過程與函數(shù)的注釋過程與函數(shù)的注釋在每個過程或函數(shù)的開頭,使用塊注釋,進(jìn)行函數(shù)功能說明,入口出口參數(shù)sql 編碼規(guī)范編碼規(guī)范 神州數(shù)碼思特奇信息技術(shù)股份有限公司神州數(shù)碼思特奇信息技術(shù)股份有限公司 地址:北京市海淀區(qū)上地九街 9 號數(shù)碼科技廣場二層(100085)電話 (tel)
24、 :(010) 58856600 傳真 (fax):(010) 62969630 第第 14 頁頁 共共 34 頁頁和返回值說明。示例:示例:- 得到集團(tuán)用戶外部編碼。- author lugz- version %i%, %g%- since 1.00- inparam regioncode 地市代碼- inparam smcode 業(yè)務(wù)代碼- outparam grpuserno 集團(tuán)用戶編碼- return 返回 0 表示正確,否則出錯!-規(guī)則規(guī)則 3.4 變量注釋變量注釋對 sql 代碼中的局部變量,重要的,要進(jìn)行注釋。尤其對 package 和object 中的內(nèi)部全局變量,特別要進(jìn)
25、行注解。關(guān)于變量的注釋,采用行尾注釋。示例:示例:type refcursor is ref cursor; - - 定義參考游標(biāo)類型- 最大欠費(fèi)用戶指標(biāo)所在地區(qū)描述f_areaname varchar(20);對常量及變量注釋時,應(yīng)注釋被保存值的含義,包括合法取值的范圍。規(guī)則規(guī)則 3.5 參數(shù)注釋參數(shù)注釋對函數(shù)或過程的每個參數(shù)進(jìn)行說明。如果取值范圍確定,也一并說明。取值有特定含義的變量(如 boolean 類型變量),給出每個值的含義。規(guī)則規(guī)則 3.6 功能性注釋功能性注釋對較為復(fù)雜的 sql 語句應(yīng)注釋,并說明算法和功能。sql 編碼規(guī)范編碼規(guī)范 神州數(shù)碼思特奇信息技術(shù)股份有限公司神州數(shù)碼
26、思特奇信息技術(shù)股份有限公司 地址:北京市海淀區(qū)上地九街 9 號數(shù)碼科技廣場二層(100085)電話 (tel) :(010) 58856600 傳真 (fax):(010) 62969630 第第 15 頁頁 共共 34 頁頁應(yīng)對不易理解的分支條件表達(dá)式加注釋。對重要的計算應(yīng)說明其功能。過長的函數(shù)實(shí)現(xiàn),應(yīng)將其語句按實(shí)現(xiàn)的功能分段加以概括性說明。規(guī)則規(guī)則 3.7 單行注釋單行注釋sql 程序中,盡量采用單行注釋:-。這樣,有利于程序調(diào)試時,通過塊注釋方式,實(shí)現(xiàn)大段代碼注釋。sql 編碼規(guī)范編碼規(guī)范 神州數(shù)碼思特奇信息技術(shù)股份有限公司神州數(shù)碼思特奇信息技術(shù)股份有限公司 地址:北京市海淀區(qū)上地九街
27、9 號數(shù)碼科技廣場二層(100085)電話 (tel) :(010) 58856600 傳真 (fax):(010) 62969630 第第 16 頁頁 共共 34 頁頁4 4 命名規(guī)范命名規(guī)范4.1 數(shù)據(jù)庫對象數(shù)據(jù)庫對象命名對象范圍:oracle 數(shù)據(jù)庫對象,包括表、索引、存儲過程、觸發(fā)器、序列、視圖、同義詞、數(shù)據(jù)鏈路。建議建議 4.1 命名長度和結(jié)構(gòu)命名長度和結(jié)構(gòu)對象名不超過 30 個字符,不低于 6 個字符,建議在 825 個左右。由 35 部分構(gòu)成,每部分為有一定含義的英文縮寫或者數(shù)字。每部分建議為 34 個字符。英文縮寫參見“常見縮寫字典” 。規(guī)則規(guī)則 4.2 不得出現(xiàn)省市、項目簡稱
28、不得出現(xiàn)省市、項目簡稱不允許出現(xiàn)某省某地市或某項目的簡稱,例如 sc_custinfo 中的 sc 是不許可的。規(guī)則規(guī)則 4.3 年月日等數(shù)字年月日等數(shù)字年月日數(shù)字符號,一般應(yīng)在數(shù)據(jù)表的尾部。不允許將年月日及其它數(shù)字放在對象名的中間。例如,cust200703info 不許可,custinfo200703 則許可。規(guī)則規(guī)則 4.4 區(qū)分非正式表區(qū)分非正式表存在于生產(chǎn)環(huán)境的非正式表,如備份表,必須以原表名加前綴sql 編碼規(guī)范編碼規(guī)范 神州數(shù)碼思特奇信息技術(shù)股份有限公司神州數(shù)碼思特奇信息技術(shù)股份有限公司 地址:北京市海淀區(qū)上地九街 9 號數(shù)碼科技廣場二層(100085)電話 (tel) :(01
29、0) 58856600 傳真 (fax):(010) 62969630 第第 17 頁頁 共共 34 頁頁bakyymmdd_ ,以便于識別和及時清理。因此,正式生產(chǎn)表中,最好不要出現(xiàn) bak、back 之類的字符串。規(guī)則規(guī)則 4.5 命名特例命名特例編號編號數(shù)據(jù)庫對象數(shù)據(jù)庫對象格式范例格式范例備注備注1.全局臨時表(golbal temporary table)gtmp_xxxyyyzzz全局臨時表屬于 oracle 的一種特殊的表類型,不是指臨時創(chuàng)建的非正式表2.視圖view_xxxyyyzzz3.普通索引idx_tabname_columnnamecolumnname 是該索引第一個字段
30、的簡寫4.主鍵索引idx_tabname_pk5.同義詞必須與原對象名一致若已存在相同的對象名,必須合理調(diào)整該沖突對象名或者放棄使用同義詞6.觸發(fā)器trig_xxxyyyzzz7.存儲過程proc_xxxyyyzzz8.程序包pkg_ xxxyyyzzz9.函數(shù)func_xxxyyyzzz10.序列seq_xxxyyyzzz11.數(shù)據(jù)鏈路link_username_dbnamedbname 是指遠(yuǎn)程數(shù)據(jù)庫的名稱,username 是指該遠(yuǎn)程庫的用戶名12.分區(qū)表中的分區(qū)名part_xxx4.2 pl/sql 程序塊內(nèi)變量程序塊內(nèi)變量規(guī)則規(guī)則 4.6 程序塊內(nèi)變量命名程序塊內(nèi)變量命名全局變量,以
31、 g_開頭進(jìn)行命名;sql 編碼規(guī)范編碼規(guī)范 神州數(shù)碼思特奇信息技術(shù)股份有限公司神州數(shù)碼思特奇信息技術(shù)股份有限公司 地址:北京市海淀區(qū)上地九街 9 號數(shù)碼科技廣場二層(100085)電話 (tel) :(010) 58856600 傳真 (fax):(010) 62969630 第第 18 頁頁 共共 34 頁頁包內(nèi)公用變量,以 f_開頭命名;過程局部變量,以 v_開頭命名;參數(shù)變量,以 p_開頭命名;游標(biāo)變量,以 cur_開頭命名。4.3 e-sql 源文件源文件規(guī)則規(guī)則 4.7:e-sql 源文件命名源文件命名源文件命名規(guī)則,一般如下:rxx_xx.pc或者rxx_xx.cp我們以前的 e
32、-sql 命令一般都用*.cp,而國際標(biāo)準(zhǔn)一般都用*.pc。特此約定,以前的程序目錄沿用*.cp,新的程序目錄使用 *.pc 命名。文件名以大寫字母 r 開頭,后面跟操作代碼。操作代碼的前兩位放在最前面,后面的兩位按照順序放在“_”的后面,如 r11_04060820。4.4 常用英文縮寫字典常用英文縮寫字典規(guī)則規(guī)則 4.8:業(yè)務(wù)操作類:業(yè)務(wù)操作類中文名稱中文名稱英文名稱英文名稱英文縮寫英文縮寫讀取getget設(shè)置setset查詢queryqry變更c(diǎn)hangechg提交、確認(rèn)confirmcfmsql 編碼規(guī)范編碼規(guī)范 神州數(shù)碼思特奇信息技術(shù)股份有限公司神州數(shù)碼思特奇信息技術(shù)股份有限公司 地
33、址:北京市海淀區(qū)上地九街 9 號數(shù)碼科技廣場二層(100085)電話 (tel) :(010) 58856600 傳真 (fax):(010) 62969630 第第 19 頁頁 共共 34 頁頁沖正、回滾rollbackroll驗(yàn)證validatevali比較comparecmp創(chuàng)建createcrt選擇selectsel插入insertins修改updateupd刪除deletedel轉(zhuǎn)移transfertran替換replacerpl計算calculatecalc統(tǒng)計statisticstat申請requestreq預(yù)約、預(yù)訂bookbook訂購orderord退訂cancelcanc打
34、開onon關(guān)閉offoff配置configcfg分配allocateallo結(jié)算mediationmed費(fèi)用feefee發(fā)布releaserls跟蹤tracetrac清除clearclr稽核auditaud開戶、入網(wǎng)openopen業(yè)務(wù)變更c(diǎn)hangechg查詢queryqry過戶change customerchgcust繳費(fèi)paymentpaysql 編碼規(guī)范編碼規(guī)范 神州數(shù)碼思特奇信息技術(shù)股份有限公司神州數(shù)碼思特奇信息技術(shù)股份有限公司 地址:北京市海淀區(qū)上地九街 9 號數(shù)碼科技廣場二層(100085)電話 (tel) :(010) 58856600 傳真 (fax):(010) 6296
35、9630 第第 20 頁頁 共共 34 頁頁托收contractcon規(guī)則規(guī)則 4.9:業(yè)務(wù)名詞類:業(yè)務(wù)名詞類中文名稱中文名稱英文名稱英文名稱英文縮寫英文縮寫代碼codecode類型typetype標(biāo)識identifierid號碼no.no序號seriationser名稱namename消息messagemsg信息informationinfo歷史historyhis日志loglog密碼passwordpsw狀態(tài)statussta日期datedate時間timetime科目itemitem關(guān)系relationrlt組織、機(jī)構(gòu)organizationorg角色rolerole地址addressa
36、ddr擔(dān)保assurerass版本versionver級別levellev電話phoneph合同contractcon發(fā)票invoiceinv接口interfaceintf操作oprationopsql 編碼規(guī)范編碼規(guī)范 神州數(shù)碼思特奇信息技術(shù)股份有限公司神州數(shù)碼思特奇信息技術(shù)股份有限公司 地址:北京市海淀區(qū)上地九街 9 號數(shù)碼科技廣場二層(100085)電話 (tel) :(010) 58856600 傳真 (fax):(010) 62969630 第第 21 頁頁 共共 34 頁頁功能functionfunc客戶customercust集團(tuán)groupgrp用戶subscribersub帳戶
37、accountacc產(chǎn)品productprd服務(wù)servicesvc價格pricepri資源resourceres權(quán)限powerpowsql 編碼規(guī)范編碼規(guī)范 神州數(shù)碼思特奇信息技術(shù)股份有限公司神州數(shù)碼思特奇信息技術(shù)股份有限公司 地址:北京市海淀區(qū)上地九街 9 號數(shù)碼科技廣場二層(100085)電話 (tel) :(010) 58856600 傳真 (fax):(010) 62969630 第第 22 頁頁 共共 34 頁頁5 5 sqlsql 程序編碼規(guī)則程序編碼規(guī)則5.1 pl/sql 程序塊程序塊規(guī)則規(guī)則 5.1 簡單函數(shù)或過程簡單函數(shù)或過程單一功能函數(shù)或過程(以含注釋在內(nèi),不超過 10
38、0 行就能解決問題為標(biāo)準(zhǔn)),約定采用獨(dú)立過程或函數(shù)來實(shí)現(xiàn)。示例:示例:-是否是一個有效的數(shù)值- 參數(shù):- p_numstr in varchar2 - 字符型數(shù)字串- 返回值:- 如果是數(shù)值,返回 true;否則返回 false-create or replace function rasinfo.isnumber(p_numstr in varchar2) return booleanas v_num number;begin if p_numstr is null then return false; end if; v_num := to_number(p_numstr); return
39、 true;exception when others then return false;end;sql 編碼規(guī)范編碼規(guī)范 神州數(shù)碼思特奇信息技術(shù)股份有限公司神州數(shù)碼思特奇信息技術(shù)股份有限公司 地址:北京市海淀區(qū)上地九街 9 號數(shù)碼科技廣場二層(100085)電話 (tel) :(010) 58856600 傳真 (fax):(010) 62969630 第第 23 頁頁 共共 34 頁頁規(guī)則規(guī)則 5.2 不允許使用內(nèi)嵌函數(shù)或過程不允許使用內(nèi)嵌函數(shù)或過程盡管 orcale 支持內(nèi)嵌,但是不允許使用內(nèi)嵌函數(shù)或過程。規(guī)則規(guī)則 5.3 復(fù)雜函數(shù)或過程復(fù)雜函數(shù)或過程功能比較復(fù)雜的函數(shù),不建議使用獨(dú)立
40、函數(shù)或過程的實(shí)現(xiàn)。必須使用package 或 object 技術(shù)來實(shí)現(xiàn)。按照功能相近或相似原則,進(jìn)行 package 或 object 的組織。復(fù)雜的業(yè)務(wù)邏輯,采用 object 技術(shù)來實(shí)現(xiàn)。公用的基礎(chǔ)功能,采用package 技術(shù)實(shí)現(xiàn)。5.2 e-sql 程序程序規(guī)則規(guī)則 5.4 sql 語句出錯判斷,使用語句出錯判斷,使用 notfound、sqlok 等宏判斷等宏判斷sql 語句是否正確執(zhí)行。語句是否正確執(zhí)行。規(guī)則規(guī)則 5.5 e-sql 使用自己的出錯控制,不使用使用自己的出錯控制,不使用 e-sql 提供的統(tǒng)一出提供的統(tǒng)一出錯控制,錯控制,e-sql 的出錯一般設(shè)置為無效。的出錯一般
41、設(shè)置為無效。exec sql whenever sqlerror continue;exec sql whenever sqlwarning continue;exec sql whenever not found continue;規(guī)則規(guī)則 5.6 屬主變量都要放在屬主變量都要放在 sql 定義區(qū)統(tǒng)一定義。定義區(qū)統(tǒng)一定義。exec sql begin declare section;char ssql1024;sql 編碼規(guī)范編碼規(guī)范 神州數(shù)碼思特奇信息技術(shù)股份有限公司神州數(shù)碼思特奇信息技術(shù)股份有限公司 地址:北京市海淀區(qū)上地九街 9 號數(shù)碼科技廣場二層(100085)電話 (tel) :(
42、010) 58856600 傳真 (fax):(010) 62969630 第第 24 頁頁 共共 34 頁頁exec sql end declare section;5.3 可讀性要求可讀性要求規(guī)則規(guī)則 5.7 不允許使用不允許使用 select *使用 select 語句時,不允許使用 select *,要使用明確的列名。目的是防止數(shù)據(jù)字段增加后的影響。規(guī)則規(guī)則 5.8 insert 必須指定插入的字段名必須指定插入的字段名使用 insert 時,必須指定插入的字段名,主要是考慮以后表結(jié)構(gòu)的變動。規(guī)則規(guī)則 5.9 函數(shù)及表達(dá)式放在等號左邊函數(shù)及表達(dá)式放在等號左邊應(yīng)將 sql 語句中的數(shù)據(jù)庫
43、函數(shù)、計算表達(dá)式等放置在等號右邊。不要在等號的左邊。規(guī)則規(guī)則 5.10 不等于統(tǒng)一使用不等于統(tǒng)一使用oracle 認(rèn)為!=和是等價的,都代表不等于的意義。為了統(tǒng)一,不等于一律使用表示。規(guī)則規(guī)則 5.11 使用表的別名使用表的別名多表關(guān)聯(lián)查詢,必須使用表的別名。sql 編碼規(guī)范編碼規(guī)范 神州數(shù)碼思特奇信息技術(shù)股份有限公司神州數(shù)碼思特奇信息技術(shù)股份有限公司 地址:北京市海淀區(qū)上地九街 9 號數(shù)碼科技廣場二層(100085)電話 (tel) :(010) 58856600 傳真 (fax):(010) 62969630 第第 25 頁頁 共共 34 頁頁6 6 sqlsql 性能規(guī)則與建議性能規(guī)則與
44、建議6.1 性能相關(guān)的規(guī)則性能相關(guān)的規(guī)則規(guī)則規(guī)則 6.1 添加索引提高效率添加索引提高效率對大表的操作,業(yè)務(wù)規(guī)范后,必須建立相應(yīng)的索引,以提高查詢效率。規(guī)則規(guī)則 6.2 where 子句中不應(yīng)對索引列子句中不應(yīng)對索引列使用函數(shù)使用函數(shù)不要在 where 子句中,不應(yīng)該對索引列施以函數(shù),否則該索引將無法使用。規(guī)則規(guī)則 6.3 使用顯式的類型轉(zhuǎn)換使用顯式的類型轉(zhuǎn)換不要使用數(shù)據(jù)庫的類型自動轉(zhuǎn)換功能(如數(shù)字自動轉(zhuǎn)換為字符串),應(yīng)使用顯式的類型轉(zhuǎn)換。自動轉(zhuǎn)換時往往導(dǎo)致該字段的索引無法使用。規(guī)則規(guī)則 6.4 為共享為共享 sql 語句,要使用綁定變量語句,要使用綁定變量執(zhí)行相同操作的執(zhí)行相同操作的 sql
45、 語句必須使用相同名字的綁定變量語句必須使用相同名字的綁定變量例如:第一組的兩個 sql 語句,綁定變量是相同的,而第二組中的兩個語句綁定變量不同,即使賦于不同的綁定變量相同的值也不能使這兩個 sql 語句相同,達(dá)不到共享 sql 語句目的。 a)第一組 select pin , name from people where pin = :blk1.pin; select pin , name from people where pin = :blk1.pin; b)第二組 select pin , name from people where pin = :blk1.ot_ind; sql
46、編碼規(guī)范編碼規(guī)范 神州數(shù)碼思特奇信息技術(shù)股份有限公司神州數(shù)碼思特奇信息技術(shù)股份有限公司 地址:北京市海淀區(qū)上地九街 9 號數(shù)碼科技廣場二層(100085)電話 (tel) :(010) 58856600 傳真 (fax):(010) 62969630 第第 26 頁頁 共共 34 頁頁 select pin , name from people where pin = :blk1.ov_ind; 6.2 性能相關(guān)的建議性能相關(guān)的建議建議建議 6.5 減少子查詢的使用減少子查詢的使用子查詢除了可讀性差之外,還在一定程度上影響了 sql 運(yùn)行效率. 應(yīng)盡量減少子查詢的使用,采用其他效率更高、可讀性
47、更好的方式替代。建議建議 6.6 使用使用 decode 函數(shù)來減少處理時間函數(shù)來減少處理時間使用 decode 函數(shù)可以避免重復(fù)掃描相同記錄或重復(fù)連接相同的表.示例:示例:select count(*),sum(sal) fromemp where dept_no = 0020 and ename likesmith%; select count(*),sum(sal) fromemp where dept_no = 0030 and ename likesmith%; 可以用 decode 函數(shù)高效地得到相同結(jié)果 select count(decode(dept_no,0020,x,nul
48、l) d0020_count, count(decode(dept_no,0030,x,null) d0030_count, sum(decode(dept_no,0020,sal,null) d0020_sal, sum(decode(dept_no,0030,sal,null) d0030_sal from emp where ename like smith%; 類似的,decode 函數(shù)也可以運(yùn)用于 group by 和 order by 子句中sql 編碼規(guī)范編碼規(guī)范 神州數(shù)碼思特奇信息技術(shù)股份有限公司神州數(shù)碼思特奇信息技術(shù)股份有限公司 地址:北京市海淀區(qū)上地九街 9 號數(shù)碼科技廣場
49、二層(100085)電話 (tel) :(010) 58856600 傳真 (fax):(010) 62969630 第第 27 頁頁 共共 34 頁頁建議建議 6.7 用用 union 替換替換 or (適用于索引列適用于索引列)通常情況下, 用 union 替換 where 子句中的 or 將會起到較好的效果. 對索引列使用 or 將造成全表掃描. 注意, 以上規(guī)則只針對多個索引列有效. 如果有column 沒有被索引, 查詢效率可能會因?yàn)槟銢]有選擇 or 而降低. 在下面的例子中, loc_id 和 region 上都建有索引. 高效:高效: select loc_id , loc_de
50、sc , region from location where loc_id = 10 union select loc_id , loc_desc , region from location where region = “melbourne” 低效:低效: select loc_id , loc_desc , region from location where loc_id = 10 or region = “melbourne” 注意: where key1 = 10 (返回最少記錄) or key2 = 20 (返回最多記錄) oracle 內(nèi)部將以上轉(zhuǎn)換為 where key1
51、= 10 and (not key1 = 10) and key2 = 20) 建議建議 6.8 如何刪除重復(fù)記錄如何刪除重復(fù)記錄高效的刪除重復(fù)記錄方法 (因?yàn)槭褂昧?rowid)delete from emp e where e.rowid (select min(x.rowid) from emp x where x.emp_no = e.emp_no);sql 編碼規(guī)范編碼規(guī)范 神州數(shù)碼思特奇信息技術(shù)股份有限公司神州數(shù)碼思特奇信息技術(shù)股份有限公司 地址:北京市海淀區(qū)上地九街 9 號數(shù)碼科技廣場二層(100085)電話 (tel) :(010) 58856600 傳真 (fax):(010
52、) 62969630 第第 28 頁頁 共共 34 頁頁建議建議 6.9 用用 truncate 替代替代 delete 刪除全表刪除全表當(dāng)刪除表中的所有記錄時,如果不需要恢復(fù),建議使用 truncate 而不是delete all,既不占用回滾段,也能加快速度。建議建議 6.10 特大事務(wù)多使用特大事務(wù)多使用 commit在程序中盡量避免特大事務(wù),多使用 commit, 這樣程序的性能得到提高,也會因?yàn)?commit 所釋放的資源而減少。當(dāng)然要注意,commit 次數(shù)也不能太頻繁,頻繁同樣會增加數(shù)據(jù)庫負(fù)擔(dān)。建議建議 6.11 用用 where 子句替換子句替換 having 子句子句避免使用
53、 having 子句, having 只會在檢索出所有記錄之后才對結(jié)果集進(jìn)行過濾. 這個處理需要排序,總計等操作. 如果能通過 where 子句限制記錄的數(shù)目,那就能減少這方面的開銷.示例:示例:低效:低效:select region,avg(log_size) from location group by region having region != sydney and region != perth 高效:高效:select region,avg(log_size) from location where region != sydney and region != perth gro
54、up by region sql 編碼規(guī)范編碼規(guī)范 神州數(shù)碼思特奇信息技術(shù)股份有限公司神州數(shù)碼思特奇信息技術(shù)股份有限公司 地址:北京市海淀區(qū)上地九街 9 號數(shù)碼科技廣場二層(100085)電話 (tel) :(010) 58856600 傳真 (fax):(010) 62969630 第第 29 頁頁 共共 34 頁頁建議建議 6.12 用用 exists 替代替代 in在許多基于基礎(chǔ)表的查詢中,為了滿足一個條件,往往需要對另一個表進(jìn)行聯(lián)接.在這種情況下, 使用 exists(或 not exists)通常將提高查詢的效率. 示例:示例:低效:低效:select * from emp (基礎(chǔ)表
55、) where empno 0 and deptno in (select deptno from dept where loc = melb) 高效高效: : select * from emp (基礎(chǔ)表) where empno 0 and exists (select x from dept where dept.deptno = emp.deptno and loc = melb) 建議建議 6.13 用用 not exists 替代替代 not in無論在哪種情況下,not in 都是最低效的 (因?yàn)樗鼘ψ硬樵冎械谋韴?zhí)行了一個全表遍歷).可以把它改寫成外連接(outer joins)
56、或 not exists. 示例:示例:select from emp where dept_no not in (select dept_no from dept where dept_cat=a); ( (方法一方法一: : 高效高效) ) select . from emp a,dept b sql 編碼規(guī)范編碼規(guī)范 神州數(shù)碼思特奇信息技術(shù)股份有限公司神州數(shù)碼思特奇信息技術(shù)股份有限公司 地址:北京市海淀區(qū)上地九街 9 號數(shù)碼科技廣場二層(100085)電話 (tel) :(010) 58856600 傳真 (fax):(010) 62969630 第第 30 頁頁 共共 34 頁頁whe
57、re a.dept_no = b.dept(+) and b.dept_no is null and b.dept_cat(+) = a ( (方法二方法二: : 最高效最高效) ) select . from emp e where not exists (select x from dept d where d.dept_no = e.dept_no and dept_cat = a);建議建議 6.14 用表連接替換用表連接替換 exists通常來說 , 采用表連接的方式比 exists 更有效率。 select ename from emp e where exists (select
58、 x from dept where dept_no = e.dept_no and dept_cat = a); ( (更高效更高效) ) select ename from dept d,emp e where e.dept_no = d.dept_no and dept_cat = a ; 建議建議 6.15 用用 exists 替換替換 distinct當(dāng)提交一個包含一對多表信息(比如部門表和雇員表)的查詢時,避免在select 子句中使用 distinct。一般可以考慮用 exist 替換。示例:示例:低效:低效: select distinct dept_no,dept_name from dept d,emp e sql 編碼規(guī)范編碼規(guī)范 神州數(shù)碼思特奇信息技術(shù)股份有限公司神州數(shù)碼思特奇信息技術(shù)股份有限公司 地址:北京市海淀區(qū)上地九街 9 號數(shù)碼科技廣場二層(100085)電話 (tel) :(010) 58856600 傳真 (fax):(010) 62969630 第第 31 頁頁 共共 34 頁頁where d.dept_no = e.dept_no 高效:高效: select dept_no,dept_name from de
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025河南建筑安全員《B證》考試題庫及答案
- 貴陽人文科技學(xué)院《先進(jìn)制造與特種加工》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣州珠江職業(yè)技術(shù)學(xué)院《動物分子生物學(xué)C》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣州應(yīng)用科技學(xué)院《日本近現(xiàn)代文學(xué)作品選讀》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣州新華學(xué)院《東西方設(shè)計元素》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣州鐵路職業(yè)技術(shù)學(xué)院《電子商務(wù)》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025海南省建筑安全員-B證考試題庫附答案
- 《固定收入證券》課件
- 一年級語文《借生日》
- 單位人力資源管理制度集錦匯編十篇
- 藝術(shù)漆培訓(xùn)課件
- 建德海螺二期施工組織設(shè)計
- 山東省菏澤市2023-2024學(xué)年高一上學(xué)期期末測試物理試題(解析版)
- 2024年學(xué)校后勤日用品采購合同范本2篇
- 中建中建機(jī)電工程聯(lián)動調(diào)試實(shí)施方案范本
- 新《安全生產(chǎn)法》安全培訓(xùn)
- 山東省濟(jì)南市2023-2024學(xué)年高一上學(xué)期1月期末考試 物理 含答案
- 中華人民共和國安全生產(chǎn)法知識培訓(xùn)
- 上海教育出版社 藝術(shù) 八年級上冊第三單元 鄉(xiāng)音鄉(xiāng)韻 京腔京韻系鄉(xiāng)情 教學(xué)設(shè)計
- 人教版(2024新教材)七年級上冊數(shù)學(xué)第一章《有理數(shù)》單元測試卷(含答案)
- 《色彩基礎(chǔ)知識》PPT課件(詳解)
評論
0/150
提交評論