原文轉(zhuǎn)自:
數(shù)據(jù)庫設(shè)計(jì)經(jīng)驗(yàn)談(轉(zhuǎn))
SQL編碼規(guī)范(收集)
http://hi.baidu.com/rambochow/blog/item/3ebcbb3db3758903bba16743.html

1.書寫格式
1.書寫格式

示例代碼:
存儲(chǔ)過程SQL文書寫格式例
select
c.dealerCode,
round(sum(c.submitSubletAmountDLR + c.submitPartsAmountDLR + c.submitLaborAmountDLR) / count(*), 2) as avg,
decode(null, 'x', 'xx', 'CNY')
from (
select
a.dealerCode,
a.submitSubletAmountDLR,
a.submitPartsAmountDLR,
a.submitLaborAmountDLR
from SRV_TWC_F a
where (to_char(a.ORIGSUBMITTIME, 'yyyy/mm/dd') >= 'Date Range(start)'
and to_char(a.ORIGSUBMITTIME, 'yyyy/mm/dd') <= 'Date Range(end)'
and nvl(a.deleteflag, '0') <> '1')
union all
select
b.dealerCode,
b.submitSubletAmountDLR,
b.submitPartsAmountDLR,
b.submitLaborAmountDLR
from SRV_TWCHistory_F b
where (to_char(b.ORIGSUBMITTIME, 'yyyy/mm/dd') >= 'Date Range(start)'
and to_char(b.ORIGSUBMITTIME,'yyyy/mm/dd') <= 'Date Range(end)'
and nvl(b.deleteflag,'0') <> '1')
) c
group by c.dealerCode
order by avg desc;
C#中里的SQL字符串書寫格式例
strSQL = "insert into Snd_FinanceHistory_Tb "
+ "(DEALERCODE, "
+ "REQUESTSEQUECE, "
+ "HANDLETIME, "
+ "JOBFLAG, "
+ "FRAMENO, "
+ "INMONEY, "
+ "REMAINMONEY, "
+ "DELETEFLAG, "
+ "UPDATECOUNT, "
+ "CREUSER, "
+ "CREDATE, "
+ "HONORCHECKNO, "
+ "SEQ) "
+ "values ('" + draftInputDetail.dealerCode + "', "
+ "'" + draftInputDetail.requestsequece + "', "
+ "sysdate, "
+ "'07', "
+ "'" + frameNO + "', "
+ requestMoney + ", "
+ remainMoney + ", "
+ "'0', "
+ "0, "
+ "'" + draftStruct.employeeCode + "', "
+ "sysdate, "
+ "'" + draftInputDetail.honorCheckNo + "', "
+ index + ")";
1).縮進(jìn)
對(duì)于存儲(chǔ)過程文件,縮進(jìn)為8個(gè)空格
對(duì)于C#里的SQL字符串,不可有縮進(jìn),即每一行字符串不可以空格開頭
2).換行
1>.Select/From/Where/Order by/Group by等子句必須另其一行寫
2>.Select子句內(nèi)容如果只有一項(xiàng),與Select同行寫
3>.Select子句內(nèi)容如果多于一項(xiàng),每一項(xiàng)單獨(dú)占一行,在對(duì)應(yīng)Select的基礎(chǔ)上向右縮進(jìn)8個(gè)空格(C#無縮進(jìn))
4>.From子句內(nèi)容如果只有一項(xiàng),與From同行寫
5>.From子句內(nèi)容如果多于一項(xiàng),每一項(xiàng)單獨(dú)占一行,在對(duì)應(yīng)From的基礎(chǔ)上向右縮進(jìn)8個(gè)空格(C#無縮進(jìn))
6>.Where子句的條件如果有多項(xiàng),每一個(gè)條件占一行,以AND開頭,且無縮進(jìn)
7>.(Update)Set子句內(nèi)容每一項(xiàng)單獨(dú)占一行,無縮進(jìn)
8>.Insert子句內(nèi)容每個(gè)表字段單獨(dú)占一行,無縮進(jìn);values每一項(xiàng)單獨(dú)占一行,無縮進(jìn)
9>.SQL文中間不允許出現(xiàn)空行
10>.C#里單引號(hào)必須跟所屬的SQL子句處在同一行,連接符("+")必須在行首
3).空格
1>.SQL內(nèi)算數(shù)運(yùn)算符、邏輯運(yùn)算符連接的兩個(gè)元素之間必須用空格分隔
2>.逗號(hào)之后必須接一個(gè)空格
3>.關(guān)鍵字、保留字和左括號(hào)之間必須有一個(gè)空格

7.對(duì)數(shù)據(jù)庫表操作的特殊要求
7.對(duì)數(shù)據(jù)庫表操作的特殊要求
本項(xiàng)目對(duì)數(shù)據(jù)庫表的操作還有以下特殊要求:

1).以邏輯刪除替代物理刪除
注意:現(xiàn)在數(shù)據(jù)庫表中數(shù)據(jù)沒有物理刪除,只有邏輯刪除
以deleteflag字段作為刪除標(biāo)志,deleteflag='1'代表此記錄被邏輯刪除,因此在查詢數(shù)據(jù)時(shí)必須考慮deleteflag的因素,deleteflag的標(biāo)準(zhǔn)查詢條件:NVL(deleteflag, '0') <> '1'

2).增加記錄狀態(tài)字段
數(shù)據(jù)庫中的每張表基本都有以下字段:DELETEFLAG、UPDATECOUNT、CREDATE、CREUSER、UPDATETIME、UPDATEUSER
要注意在對(duì)標(biāo)進(jìn)行操作時(shí)必須考慮以下字段
插入一條記錄時(shí)要置DELETEFLAG='0', UPDATECOUNT=0, CREDATE=sysdate, CREUSER=登錄User;查詢一條記錄時(shí)要考慮DELETEFLAG,如果有可能對(duì)此記錄作更新時(shí)還要取得UPDATECOUNT作同步檢查 ;修改一條記錄時(shí)要置UPDATETIME=sysdate, UPDATEUSER=登錄User, UPDATECOUNT=(UPDATECOUNT+1) mod 1000, ;刪除一條記錄時(shí)要置DELETEFLAG='1'

3).歷史表
數(shù)據(jù)庫里部分表還存在相應(yīng)的歷史表,比如srv_twc_f和srv_twchistory_f,在查詢數(shù)據(jù)時(shí)除了檢索所在表之外,還必須檢索相應(yīng)的歷史表,對(duì)二者的結(jié)果做Union(或Union All)
posted on 2008-09-02 18:03
黃小二 閱讀(490)
評(píng)論(0) 編輯 收藏 所屬分類:
[DB]