版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、wordORACLE數(shù)據(jù)庫(kù)編程標(biāo)準(zhǔn)目 錄第1章范圍和簡(jiǎn)介41.1簡(jiǎn)介41.2范圍41.3關(guān)鍵詞41.4術(shù)語(yǔ)和定義4第2章文件格式及命名52.1文件格式52.2文件命名5第3章書(shū)寫(xiě)標(biāo)準(zhǔn)63.1大小寫(xiě)風(fēng)格63.2縮進(jìn)風(fēng)格73.3空格及換行113.4創(chuàng)立表143.5創(chuàng)立過(guò)程/函數(shù)/包14第4章命名標(biāo)準(zhǔn)16第5章注釋標(biāo)準(zhǔn)21第6章常用語(yǔ)法256.1變量聲明256.2返回值256.3符號(hào)*256.4包的使用266.5綁定變量266.6異常處理286.7事務(wù)控制296.8游標(biāo)使用296.9代碼規(guī)模31第7章SQL建議與約束327.1建議327.2禁止35第8章開(kāi)發(fā)工具408.1UltraEdit-3240
2、8.2PL/SQL Developer408.3TOAD408.4PowerDesigner41第9章數(shù)據(jù)庫(kù)代碼走讀CheckList42第10章附錄4510.1常見(jiàn)模塊縮寫(xiě)表4510.2常用詞縮寫(xiě)表46表目錄表1大小寫(xiě)標(biāo)準(zhǔn)表7表2對(duì)象前綴表17表3ORACLE系統(tǒng)對(duì)象使用前綴表18表4參數(shù)、變量、常量、異常等前綴表19表5常見(jiàn)模塊縮寫(xiě)表46表6常用詞縮寫(xiě)表47第1章 范圍和簡(jiǎn)介1.1 簡(jiǎn)介本標(biāo)準(zhǔn)是針對(duì)關(guān)系型數(shù)據(jù)庫(kù)ORACLE的相關(guān)特性,擬定的用于指導(dǎo)和標(biāo)準(zhǔn)相關(guān)開(kāi)發(fā)過(guò)程的標(biāo)準(zhǔn),其旨在通過(guò)該標(biāo)準(zhǔn)的約束和建議,使開(kāi)發(fā)人員可以在他們所編寫(xiě)的代碼中保持統(tǒng)一正確的風(fēng)格,提供代碼的可讀性以及減少出現(xiàn)錯(cuò)誤的
3、幾率。1.2 范圍本標(biāo)準(zhǔn)僅適用于關(guān)系型數(shù)據(jù)庫(kù)系統(tǒng)ORACLE以及其對(duì)應(yīng)的PL/SQL腳本語(yǔ)言。1.3 關(guān)鍵詞編程標(biāo)準(zhǔn)、數(shù)據(jù)庫(kù)、ORACLE、PL/SQL1.4 術(shù)語(yǔ)和定義本標(biāo)準(zhǔn)采用以下的術(shù)語(yǔ)描述: 規(guī)那么:編程時(shí)強(qiáng)制必須遵守的原那么。 建議:編程時(shí)必須加以考慮的原那么。 說(shuō)明:對(duì)此規(guī)那么或建議進(jìn)行必要的解釋。 例如:對(duì)此規(guī)那么或建議從正、反兩個(gè)方面給出。第2章 文件格式2.1 文件格式規(guī)那么:數(shù)據(jù)庫(kù)腳本文件的文件格式必須為純文本,不允許使用包含格式文本的文件格式。第3章 書(shū)寫(xiě)標(biāo)準(zhǔn)3.1 大小寫(xiě)風(fēng)格規(guī)那么:數(shù)據(jù)庫(kù)腳本中涉及到的各種保存字、關(guān)鍵字、操作符、數(shù)據(jù)類型、標(biāo)識(shí)符、對(duì)象、字段、變量、常量等
4、的大小寫(xiě)風(fēng)格必須遵循以下標(biāo)準(zhǔn):表1 大小寫(xiě)標(biāo)準(zhǔn)表文字類型大小寫(xiě)例如ORACLE保存字Reserved Word大寫(xiě)IDENTIFIED、INITIAL、LONG、MAXEXTENTS、RENAME、ROWNUM、SYSDATE、VARCHAR2ORACLE關(guān)鍵字Keywords大寫(xiě)ANALYZE、AUTOEXTEND、COMPILE、DBA、EXTENT、INSTANCE、MAXTRANS、SAVEPOINT、TABLESPACEANSI SQL保存字Reserved Word大寫(xiě)ADD、BETWEEN、CREATE、DISTINCT、DROP、FROM、SESSION、SELECT、TABL
5、E、UPDATE、VARCHARANSI SQL關(guān)鍵字Keywords大寫(xiě)B(tài)EGIN、COMMIT、CONSTRAINT、COUNT、CURSOR、DECLARE、EXECUTE、PRIMARY、SUM、TRANSACTIONPL/SQL保存字Reserved Word大寫(xiě)ARRAY、BOOLEAN、DATABASE、DO、EXIT、RAISE、SAVEPOINT、RUN、WHILE、XOR操作符Operators大寫(xiě)ALL、AND、ANY、ESCAPE、EXISTS、OR、UNION數(shù)據(jù)類型Data Types大寫(xiě)INT、NUMBER、DATE系統(tǒng)數(shù)據(jù)庫(kù)對(duì)象System Tables、Vie
6、ws、Functions、Packages、Package Methods、Exceptions大寫(xiě)USER$、DBA_JOBS、DECODE、SUBSTR、DBMS_OUTPUT、PUT_LINE、NO_DATA_FOUND自定義數(shù)據(jù)庫(kù)對(duì)象User Objects大寫(xiě)T_PUB_TABLE_NAME、F_PUB_GETID、P_KBS_GET_SERVICEINFO字段名Field大寫(xiě)USER_NAME、STAFFNO常量Constants大寫(xiě)SECONDS_OF_DAY變量Variable邏輯首字母大寫(xiě)v_BeginDate、v_FaxNumber、c_StaffAuth說(shuō)明:l ORAC
7、LE的關(guān)鍵字和保存字請(qǐng)參見(jiàn)視圖V$RESERVED_WORDS;l 上表中需要大寫(xiě)的關(guān)鍵字/保存字,可以錄入U(xiǎn)ltraEdit的wordfile.txt,在使用UltraEdit開(kāi)發(fā)時(shí)輸入這些關(guān)鍵字保存字后會(huì)自動(dòng)變?yōu)榇髮?xiě)。3.2 縮進(jìn)風(fēng)格規(guī)那么:腳本代碼塊采用縮進(jìn)風(fēng)格書(shū)寫(xiě),保證代碼清晰易讀,風(fēng)格一致。縮進(jìn)格數(shù)統(tǒng)一為2個(gè)空格,但需要關(guān)鍵字右對(duì)齊或者參數(shù)/字段向上對(duì)齊的時(shí)候例外。例如1:CREATE SEQUENCE SQ_CSP_TABLENAME MINVALUE 1 START WITH 1 INCREMENT BY 1;例如2:IF c_CursorName%ISOPEN THEN CLO
8、SE c_CursorName;END IF;規(guī)那么:縮進(jìn)必須使用空格鍵,不允許使用TAB鍵。規(guī)那么:同一條語(yǔ)句占用多于一行時(shí),每行的第一個(gè)關(guān)鍵字應(yīng)當(dāng)右對(duì)齊,但I(xiàn)NSERT.SELECT語(yǔ)句例外。例如1:FETCH c_Cursor INTO v_Field1, v_Field2, . 關(guān)鍵字右對(duì)齊例如2:SELECT FIELD1, FIELD2, . FROM T_CSP_TABLENAME WHERE FIELD1 > 1 AND (FIELD2 < SYSDATE OR FIELD2 > SYSDATE + 3) AND FIELD3 LIKE 'HUAWEI
9、%' GROUP BY FIELD1, FIELD2 ORDER BY FIELD1, FIELD2; 關(guān)鍵字右對(duì)齊規(guī)那么:在INSERT.SELECT語(yǔ)句中,如果需要換行時(shí),應(yīng)使INSERT INTO局部的字段與SELECT局部的字段一一對(duì)應(yīng),以增強(qiáng)可讀性。例如:錯(cuò)誤的寫(xiě)法:BEGIN INSERT INTO T_DEST_TABLENAME (DESTFIELDNAME1, DESTFIELDNAME2, DESTFIELDNAME3, DESTFIELDNAME4, DESTFIELDNAME5, DESTFIELDNAME6, DESTFIELDNAME7) SELECT SR
10、CFIELDNAME1, SRCFIELDNAME2, SRCFIELDNAME3, SRCFIELDNAME4, SRCFIELDNAME5, SRCFIELDNAME6, SRCFIELDNAME7 FROM T_SRC_TABLENAME;END;正確的寫(xiě)法A:BEGIN INSERT INTO T_DEST_TABLE_NAME (DESTFIELDNAME1, DESTFIELDNAME2, DESTFIELDNAME3, DESTFIELDNAME4, DESTFIELDNAME5, DESTFIELDNAME6, DESTFIELDNAME7) SELECT SRCFIELDNA
11、ME1, SRCFIELDNAME2, SRCFIELDNAME3, SRCFIELDNAME4, SRCFIELDNAME5, SRCFIELDNAME6, SRCFIELDNAME7 FROM T_SRC_TABLE_NAME;END;正確的寫(xiě)法B:BEGIN INSERT INTO T_DEST_TABLE_NAME (DESTFIELDNAME1, - 注釋 DESTFIELDNAME2, - 注釋 DESTFIELDNAME3, - 注釋 DESTFIELDNAME4, - 注釋 DESTFIELDNAME5, - 注釋 DESTFIELDNAME6, - 注釋 DESTFIELDN
12、AME7) - 注釋 SELECT SRCFIELDNAME1, - 注釋 SRCFIELDNAME2, - 注釋 SRCFIELDNAME3, - 注釋 SRCFIELDNAME4, - 注釋 SRCFIELDNAME5, - 注釋 SRCFIELDNAME6, - 注釋 SRCFIELDNAME7 - 注釋 FROM T_SRC_TABLE_NAME;END;正確的寫(xiě)法C:BEGIN INSERT INTO T_DEST_TABLE_NAME ( DESTFIELDNAME1, - 注釋 DESTFIELDNAME2, - 注釋 DESTFIELDNAME3, - 注釋 DESTFIELD
13、NAME4, - 注釋 DESTFIELDNAME5, - 注釋 DESTFIELDNAME6, - 注釋 DESTFIELDNAME7) - 注釋 SELECT SRCFIELDNAME1, - 注釋 SRCFIELDNAME2, - 注釋 SRCFIELDNAME3, - 注釋 SRCFIELDNAME4, - 注釋 SRCFIELDNAME5, - 注釋 SRCFIELDNAME6, - 注釋 SRCFIELDNAME7 - 注釋 FROM T_SRC_TABLE_NAME;END;說(shuō)明:1、 在錯(cuò)誤的寫(xiě)法中,雖然SELECT語(yǔ)句局部的SRCFIELDNAME1, SRCFIELDNAM
14、E2, SRCFIELDNAME3可以寫(xiě)在一行中,但由于INSERT INTO語(yǔ)句局部中DESTFIELDNAME1, DESTFIELDNAME2寫(xiě)在一行中,而DESTFIELDNAME3在下一行,因此SELECT語(yǔ)句中每行的字段應(yīng)與INSERT INTO語(yǔ)句中的字段一一對(duì)應(yīng)如正確的寫(xiě)法A;2、 INSERT INTO語(yǔ)句中的各個(gè)字段折行后,應(yīng)縮進(jìn)并與上一字段左對(duì)齊如正確的寫(xiě)法B,或者與INTO關(guān)鍵字左對(duì)齊如正確的寫(xiě)法C;3、 SELECT語(yǔ)句中折行后的第一個(gè)字段名應(yīng)縮進(jìn)并與上一行的第一個(gè)字段名左對(duì)齊。規(guī)那么:INSERT INTO語(yǔ)句中,如果需要對(duì)每個(gè)字段增加注釋,應(yīng)將每個(gè)字段單獨(dú)列為一行
15、,并在行尾增加注釋。例如1:INSERT INTO T_DEST_TABLE_NAME (DESTFIELDNAME1, - 注釋1 DESTFIELDNAME2, - 注釋2 DESTFIELDNAME3) - 注釋3VALUES (FieldValue1, FieldValue2, FieldValue3);或者INSERT INTO T_DEST_TABLE_NAME ( DESTFIELDNAME1, - 注釋1 DESTFIELDNAME2, - 注釋2 DESTFIELDNAME3) - 注釋3VALUES ( FieldValue1, FieldValue2, FieldValu
16、e3);或者INSERT INTO T_DEST_TABLE_NAME( DESTFIELDNAME1, - 注釋1 DESTFIELDNAME2, - 注釋2 DESTFIELDNAME3 - 注釋3)VALUES( FieldValue1, FieldValue2, FieldValue3);其他說(shuō)明:1、 在標(biāo)準(zhǔn)的代碼模板中詳細(xì)給出了各種情況下的范例寫(xiě)法,請(qǐng)編碼過(guò)程參考;2、 在數(shù)據(jù)庫(kù)腳本的編碼過(guò)程中,請(qǐng)嚴(yán)格按照代碼模板進(jìn)行書(shū)寫(xiě);3、 對(duì)于模板中未涉及的情況,應(yīng)在保證符合上述標(biāo)準(zhǔn)原那么,同時(shí)和代碼模板中的風(fēng)格保持一致的前提下,根據(jù)實(shí)際情況靈活處理。3.3 空格及換行規(guī)那么:不允許把多個(gè)短
17、語(yǔ)句寫(xiě)在一行中,即一行只寫(xiě)一條語(yǔ)句。例如:v_Variable1 := 1; v_Variable2 := 'abc'應(yīng)寫(xiě)成:v_Variable1 := 1; v_Variable2 := 'abc'說(shuō)明:兩個(gè)賦值語(yǔ)句不能寫(xiě)在一行中,必須分兩行寫(xiě)。規(guī)那么:相對(duì)獨(dú)立的程序塊之間、變量說(shuō)明之后必須加空行。例如:v_Variable1 := 1;IF v_BeginDate IS NULL THEN v_BeginDate := SYSDATE - 15;END IF;應(yīng)寫(xiě)成:- 初始化局部變量v_Variable1 := 1; - 判斷開(kāi)始時(shí)間IF v_Begin
18、Date IS NULL THEN v_BeginDate := SYSDATE - 15;END IF;說(shuō)明:兩個(gè)程序塊在邏輯上相對(duì)獨(dú)立,應(yīng)用空行加以分隔,同時(shí)增加注釋。建議:建議對(duì)超過(guò)120字符的語(yǔ)句要分行書(shū)寫(xiě),長(zhǎng)表達(dá)式應(yīng)在低優(yōu)先級(jí)操作符處換行,操作符或關(guān)鍵字放在新行之首。劃分出的新行應(yīng)適當(dāng)?shù)乜s進(jìn),使排版整齊、語(yǔ)句可讀。是否分行應(yīng)根據(jù)實(shí)際情況而定,原那么是保證代碼整齊、語(yǔ)句可讀。分行例如: 120字符 (a * b * c * d) + (e * f) + 應(yīng)寫(xiě)成: (a * b * c * d) + (e * f) + 說(shuō)明:1、 加法的優(yōu)先級(jí)低于乘法,因此應(yīng)在加號(hào)處換行;2、 兩組乘法
19、雖然在邏輯上會(huì)先于加法執(zhí)行,但顯式加上括號(hào)使可讀性更強(qiáng)。不分行例如:具體內(nèi)容請(qǐng)參見(jiàn)代碼模板“創(chuàng)立初始化數(shù)據(jù)模板局部,有時(shí)初始化數(shù)據(jù)的語(yǔ)句不分行情況下可讀性更強(qiáng)。規(guī)那么:調(diào)用函數(shù)或過(guò)程時(shí),如果參數(shù)列表超過(guò)120字符,應(yīng)根據(jù)邏輯內(nèi)容進(jìn)行換行,或者每個(gè)參數(shù)占用一行。例如:錯(cuò)誤的寫(xiě)法: 120字符 P_PROCEDURE(i_Param1, i_Param2, i_Param3, o_Param1, oParam2, .);正確的寫(xiě)法A:P_PROCEDURE(i_Param1, i_Param2, i_Param3, o_Param1, o_Param2, .);正確的寫(xiě)法B:P_PROCEDURE
20、(i_Param1, - 注釋 i_Param2, - 注釋 i_Param3, - 注釋 o_Param1, - 注釋 o_Param2, - 注釋 .) - 注釋說(shuō)明:1、 因?yàn)榍叭齻€(gè)為輸入?yún)?shù),后兩個(gè)為輸出參數(shù),因此在第3、4參數(shù)之間換行比擬清晰如正確的寫(xiě)法A;2、 有時(shí)為了增加注釋,可以使每個(gè)參數(shù)皆占用一行如正確的寫(xiě)法B;3、 參數(shù)換行以后與上一行的第一個(gè)參數(shù)對(duì)齊。規(guī)那么:雙目運(yùn)算符、操作符前后應(yīng)以空格分隔,間隔符之后應(yīng)以空格分隔。例如:v_DateVar:=TO_DATE('2001-01-01 01:30:00','YYYY-MM-DD HH24:MI:SS
21、');v_IntegerVar1:=v_IntegerVar2+v_IntegerVar3;IF v_Number>0 THEN應(yīng)寫(xiě)成:v_DateVar := TO_DATE('2001-01-01 01:30:00', 'YYYY-MM-DD HH24:MI:SS'); 賦值符前后加空格 逗號(hào)后面加空格v_IntegerVar1 := v_IntegerVar2 + v_IntegerVar3; 賦值符前后加空格 加號(hào)前后加空格IF v_Number > 0 THEN 比擬符號(hào)前后加空格建議:不同優(yōu)先級(jí)的操作符混合使用時(shí),建議使用括號(hào)進(jìn)行
22、隔離。例如: a * b + c 應(yīng)寫(xiě)成: (a * b) + c 說(shuō)明:使用括號(hào)使代碼的優(yōu)先級(jí)更加清晰,而且可以防止犯錯(cuò)。建議:SQL語(yǔ)句中存在不同優(yōu)先級(jí)的關(guān)系運(yùn)算符時(shí),建議使用括號(hào)。例如:WHERE FIELD1 > 1 AND FIELD2 < SYSDATE OR FIELD3 > SYSDATE + 3應(yīng)寫(xiě)成:WHERE (FIELD1 > 1 AND FIELD2 < SYSDATE) OR (FIELD3 > SYSDATE + 3)說(shuō)明:如果SQL語(yǔ)句的條件復(fù)雜,很容易出現(xiàn)問(wèn)題,因此增加括號(hào)可以提高可閱讀性。3.4 創(chuàng)立表規(guī)那么:腳本中的字段
23、名縮進(jìn)為2個(gè)空格。規(guī)那么:腳本中字段名稱、字段類型、DEFAULT關(guān)鍵字應(yīng)左對(duì)齊,NULL/NOT NULL應(yīng)右對(duì)齊也可以認(rèn)為就是NULL關(guān)鍵字左對(duì)齊。例如:CREATE TABLE T_WF_TABLE_NAME( INTFIELDINTNOT NULL, FLOATFIELDNUMBER(4, 2)DEFAULT 1.23NOT NULL, DATEFIELDDATEDEFAULT SYSDATENULL, VARCHAR2FIELDVARCHAR2(200)NULL)TABLESPACE SERVICE_MAIN_DAT;說(shuō)明:至于每行中的每個(gè)工程之間使用多少個(gè)空格沒(méi)有明確要求,只要求從
24、縱向上各個(gè)字段的名稱、數(shù)據(jù)類型、缺省值、是否為空等對(duì)齊美觀即可。3.5 創(chuàng)立過(guò)程/函數(shù)/包規(guī)那么:腳本中的參數(shù)縮進(jìn)為2個(gè)空格。規(guī)那么:腳本中的參數(shù)名稱、數(shù)據(jù)類型、注釋信息應(yīng)左對(duì)齊,IN/OUT/IN OUT關(guān)鍵字左對(duì)齊右對(duì)齊皆可。例如:CREATE OR REPLACE PROCEDURE P_CSP_PROCEDURENAME( i_DateParamDATE,- 注釋 o_IntParamIN OUTINT,- 注釋 o_VarcharParam OUTVARCHAR2,- 注釋 o_RetCode OUTINT- 注釋)或者CREATE OR REPLACE PROCEDURE P_CS
25、P_PROCEDURENAME( i_DateParamDATE,- 注釋 o_IntParamIN OUTINT,- 注釋 o_VarcharParamOUTVARCHAR2,- 注釋 o_RetCodeOUTINT- 注釋)說(shuō)明:至于每行中的每個(gè)工程之間使用多少個(gè)空格沒(méi)有明確要求,只要求從縱向上各個(gè)參數(shù)的名稱、數(shù)據(jù)類型、IN/OUT關(guān)鍵字等對(duì)齊美觀即可。第4章 命名標(biāo)準(zhǔn)規(guī)那么:所有用戶自定義的數(shù)據(jù)庫(kù)對(duì)象名稱統(tǒng)一使用形如“對(duì)象前綴+下劃線+模塊名縮寫(xiě)+下劃線+對(duì)象名稱的格式。說(shuō)明:l 因?yàn)樗凶址y(tǒng)一使用大寫(xiě),所以對(duì)象名稱中可以根據(jù)需要再使用下劃線進(jìn)行分隔;l 對(duì)象類型前綴建議不要超過(guò)三個(gè)字
26、符,可參考以下對(duì)象前綴表;l 編碼時(shí)禁止以O(shè)RACLE系統(tǒng)對(duì)象的前綴作為對(duì)象類型前綴,具體請(qǐng)參考ORACLE系統(tǒng)對(duì)象使用前綴表;l 模塊名縮寫(xiě)建議不要超過(guò)三個(gè)字符,可參考附錄中的常見(jiàn)模塊名縮寫(xiě)表;l 數(shù)據(jù)表字段名稱沒(méi)有前綴;l 對(duì)象名稱長(zhǎng)度不宜超過(guò)18個(gè)字符。表2 對(duì)象前綴表對(duì)象類型前綴例如備注表空間命名TableSpaceTBSTBS_CSP_MAIN_DATA表TableTT_CSP_TABLENAMET_PUB_DATA_DICT視圖ViewVV_WF_VIEWNAME字段Field無(wú)USERNAMECREATE_DATE序列SequenceSQSQ_MS_PLANSCAN索引Index
27、IXIX_WF_SVCINFO_SN如果表名或字段名過(guò)長(zhǎng),那么用表名和字段名的縮寫(xiě)表示唯一索引UIXUIX_WF_DEALINFO_SN如果表名或字段名過(guò)長(zhǎng),那么用表名和字段名的縮寫(xiě)表示主鍵Primary KeyPKPK_WF_ADDJSPFILE如果表名過(guò)長(zhǎng),那么用表名的縮寫(xiě)表示外鍵Foreign KeyFKFK_KBS_T1_T2T1為外鍵所在的表,T2為外鍵所參照的表簇ClusterCLCL_UMP_TABLENAME如果表名過(guò)長(zhǎng),那么用表名的縮寫(xiě)表示觸發(fā)器TriggerTRTR_MKT_TRIGGERNAME過(guò)程Stored ProcedurePP_SAL_PROC_NAME函數(shù)Fun
28、ctionFF_PUB_FUNC_NAME包PackagePKGPKG_COM_PKGNAME同義詞SynonymsSYNSYN_OTH_CITY保存點(diǎn)SavePointSPTSPT_MOD_SPTNAME類型TypeTYPTYP_SYS_TYPENAME表3 ORACLE系統(tǒng)對(duì)象使用前綴表對(duì)象類型前綴例如簇ClusterC_C_USER#索引IndexAQ$_HS$_I_SYS_AQ$_MSGTYPE_PRIMARYHS$_GRANTUSER_PKI_AUDITSYS_C00512包PackageDBMS_UTL_DBMS_OUTPUTUTL_FILE序列SequenceAQ$_EVT_HS
29、$_ORA_REPCAT$_SMP_SYSTEM_AQ$_QIDSEQEVT_NOTIFY_SEQHS$_CLASS_CAPS_SORA_TQ_BASE#REPCAT$_REPPROP_KEYSMP_LONG_IDSYSTEM_GRANT同義詞SynonymsDEF$_SMP_DEF$_ERRORSMP_JOB_ID表TableAQ$_HS$_DEF$_EVT_REPCAT$_SMP_AQ$_MESSAGE_TYPESHS$_PRIVILEGESDEF$_LOBEVT_OPERATORSREPCAT$_DDLSMP_JOB視圖ViewAQ$_SMP_AQ$_DEF$_AQCALLSMP_BLO
30、B規(guī)那么:所有用戶定義的存儲(chǔ)過(guò)程或函數(shù)中使用的參數(shù)、變量、異常等統(tǒng)一采用“小寫(xiě)前綴+下劃線+邏輯首字母大寫(xiě)的格式,其中的小寫(xiě)前綴代表參數(shù)、變量、類型或異常等的類型,而常量那么統(tǒng)一使用全部大寫(xiě)可根據(jù)情況使用下劃線進(jìn)行分隔。小寫(xiě)前綴請(qǐng)參考下表: 表4 參數(shù)、變量、常量、異常等前綴表變量類型首字母例如備注函數(shù)、過(guò)程輸入?yún)?shù)ii_BeginDatei_EndDate函數(shù)、過(guò)程輸出、輸入輸出參數(shù)oo_SQL函數(shù)、過(guò)程局部變量vv_WorkerNo游標(biāo)變量cc_Cursor自定義常量無(wú)SECONDS_OF_DAYPI自定義常量要求全部大寫(xiě),無(wú)前綴。自定義異常exex_UserException記錄rr_S
31、erviceInfo自定義類型變量typtyp_NameList規(guī)那么:標(biāo)識(shí)符的命名要清晰、明了,有明確含義,同時(shí)使用完整的單詞或大家根本可以理解的縮寫(xiě),防止使人產(chǎn)生誤解。建議:較短的單詞可通過(guò)去掉“元音形成縮寫(xiě);較長(zhǎng)的單詞可取單詞的頭幾個(gè)字母形成縮寫(xiě);一些單詞有大家公認(rèn)的縮寫(xiě),請(qǐng)參考附錄中的常用詞縮寫(xiě)表。規(guī)那么:命名中假設(shè)使用特殊約定或縮寫(xiě),那么要有注釋說(shuō)明。說(shuō)明:應(yīng)該在源文件的開(kāi)始之處,對(duì)文件中所使用的縮寫(xiě)或約定,特別是特殊的縮寫(xiě),進(jìn)行必要的注釋說(shuō)明。規(guī)那么:所有的命名不允許使用拼音,必須使用英文命名。規(guī)那么:使用有意義、易于記憶、描述性強(qiáng)、簡(jiǎn)短及具有唯一性的英文單詞。使用下劃線要有一致性
32、,要么不用。自己特有的命名風(fēng)格,要自始至終保持一致,不可來(lái)回變化。說(shuō)明:個(gè)人的命名風(fēng)格,在符合所在工程組或產(chǎn)品組的命名規(guī)那么的前提下,才可使用。即命名規(guī)那么中沒(méi)有規(guī)定到的地方才可有個(gè)人命名風(fēng)格。規(guī)那么:對(duì)于變量命名,禁止取單個(gè)字符如i、j、k.,建議除了要有具體含義外,還能說(shuō)明其變量類型、數(shù)據(jù)類型等。形如i、j、k的變量只允許作為局部循環(huán)變量。說(shuō)明:變量,尤其是局部變量,如果用單個(gè)字符表示,很容易敲錯(cuò)如i寫(xiě)成j,而編譯時(shí)又檢查不出來(lái),有可能為了這個(gè)小小的錯(cuò)誤而花費(fèi)大量的查錯(cuò)時(shí)間。規(guī)那么:除非必要,不允許使用數(shù)字或較奇怪的字符來(lái)定義標(biāo)識(shí)符。例如:如下命名,使人產(chǎn)生疑惑。DECLARE temp_
33、0_TEST VARCHAR2(10);規(guī)那么:用正確的反義詞組命名具有互斥意義的變量或相反動(dòng)作的函數(shù)等。例如:Start <-> Finish啟動(dòng) <-> 完成First <-> Last第一個(gè) <-> 最后一個(gè)Prior <-> Next前一個(gè) <-> 后一個(gè)Add <-> Remove增加 <-> 刪除Create <-> Destroy創(chuàng)立 <-> 析構(gòu)Get <-> Set獲取 <-> 設(shè)置Increment <-> Decrem
34、ent增量 <-> 減量Lock <-> UnLock加鎖 <-> 解鎖Open <-> Close翻開(kāi) <-> 關(guān)閉第5章 注釋標(biāo)準(zhǔn)建議:存儲(chǔ)過(guò)程/函數(shù)腳本代碼有效注釋量應(yīng)該在20以上。說(shuō)明:注釋的原那么是有助于對(duì)程序的閱讀理解,在該加的地方都加了,注釋不宜太多也不能太少,注釋語(yǔ)言必須準(zhǔn)確、易懂、簡(jiǎn)潔。規(guī)那么:在數(shù)據(jù)庫(kù)腳本文件頭部應(yīng)進(jìn)行注釋,注釋必須列出:版權(quán)說(shuō)明、版本號(hào)、生成日期、作者、內(nèi)容、功能、與其它文件的關(guān)系、修改日志等,頭文件的注釋中還應(yīng)有函數(shù)或過(guò)程功能簡(jiǎn)要說(shuō)明。例如:- File Name: 該腳本文件的文件名- Aut
35、hor: 該腳本文件的作者姓名與工號(hào)- Version: 該腳本文件的版本號(hào)- Date: 該腳本文件的最后更新日期- Copyright: 該腳本文件的版權(quán)信息- Description: 該腳本文件的描述信息- Usage: 簡(jiǎn)要描述該腳本的使用/加載方法- Function List: 該腳本文件提供對(duì)象、函數(shù)、過(guò)程的列表- Comments: 該腳本文件的注釋信息- History: 該腳本文件的維護(hù)歷史信息- 1. Date: 修改日期,格式為YYYY-MM-DD- Author: 修改人姓名與工號(hào)- Modification: 修改說(shuō)明- 2. .-說(shuō)明:格式內(nèi)容請(qǐng)參見(jiàn)代碼模板文件
36、頭。規(guī)那么:函數(shù)/存儲(chǔ)過(guò)程頭部應(yīng)進(jìn)行注釋,列出:功能說(shuō)明、設(shè)計(jì)人、編碼人、創(chuàng)立日期、修改記錄、調(diào)用關(guān)系可選等,輸入?yún)?shù)/輸出參數(shù)/返回值的說(shuō)明直接添加到參數(shù)后面。例如:CREATE OR REPLACE FUNCTION F_CSP_FUNCTIONNAME/* Description: 該函數(shù)的功能說(shuō)明 Author: 姓名 工號(hào) Date: YYYY-MM-DD Version: 版本 Caller: 調(diào)用者 Callee: 被調(diào)用者 Comments: 注釋信息包括產(chǎn)生異常的說(shuō)明 History: 1.Date: 修改日期,格式為YYYY-MM-DDAuthor: 修改人姓名與工號(hào)Mod
37、ification: 修改說(shuō)明 2. .*/( i_DateParamDATE,- 輸入?yún)?shù)注釋。包括含義、值域等。 o_IntParamIN OUTVARCHAR2,- 輸入輸出參數(shù)注釋。 o_FloatParam OUTINT- 輸出參數(shù)描述。) RETURN INT- 返回值。AS規(guī)那么:邊寫(xiě)代碼邊注釋,修改代碼同時(shí)修改相應(yīng)的注釋,以保證注釋與代碼的一致性。不再有用的注釋要?jiǎng)h除。規(guī)那么:注釋的內(nèi)容要清楚、明了,含義準(zhǔn)確,防止注釋二義性。說(shuō)明:錯(cuò)誤的注釋不但無(wú)益反而有害。規(guī)那么:防止在注釋中使用縮寫(xiě),特別是非常用縮寫(xiě)。說(shuō)明:在使用縮寫(xiě)時(shí)或之前,應(yīng)對(duì)縮寫(xiě)進(jìn)行必要的說(shuō)明。規(guī)那么:?jiǎn)涡凶⑨尫?
38、后必須加上一個(gè)空格。規(guī)那么:注釋?xiě)?yīng)與其描述的代碼相近,對(duì)代碼的注釋?xiě)?yīng)放在其上方或右方對(duì)單條語(yǔ)句的注釋相鄰位置,不可放在下面,如放于上方那么需與其上面的代碼用空行隔開(kāi)。例如:BEGIN - i_DateParam必須早于當(dāng)前時(shí)間 IF i_DateParam >= SYSDATE THEN RETURN 1; END IF; END;規(guī)那么:注釋與所描述內(nèi)容進(jìn)行同樣的縮進(jìn)。說(shuō)明:可使程序排版整齊,并方便注釋的閱讀與理解。規(guī)那么:注釋與其上的代碼用空行隔開(kāi)。建議:對(duì)變量的定義和分支語(yǔ)句條件分支、循環(huán)語(yǔ)句等建議給出注釋。說(shuō)明:這些語(yǔ)句往往是程序?qū)崿F(xiàn)某一特定功能的關(guān)鍵,對(duì)于維護(hù)人員來(lái)說(shuō),良好的注
39、釋幫助更好的理解程序,有時(shí)甚至優(yōu)于看設(shè)計(jì)文檔。規(guī)那么:不允許在一行代碼或表達(dá)式的中間插入注釋。說(shuō)明:不應(yīng)在代碼或表達(dá)中間插入注釋,否那么容易使代碼可理解性變差。規(guī)那么:通過(guò)對(duì)函數(shù)或過(guò)程、變量、結(jié)構(gòu)等適宜的命名以及合理地組織代碼的結(jié)構(gòu),使代碼成為自注釋的。說(shuō)明:清晰準(zhǔn)確的函數(shù)、變量等的命名,可增加代碼可讀性,并減少不必要的注釋。規(guī)那么:在代碼的功能、意圖層次上進(jìn)行注釋,提供有用、額外的信息。說(shuō)明:注釋的目的是解釋代碼的目的、功能和采用的方法,提供代碼以外的信息,幫助讀者理解代碼,防止沒(méi)必要的重復(fù)注釋信息。例如:如下注釋意義不大- i_RetCode = 0IF i_RetCode = 0 THE
40、N而如下的注釋那么給出了額外有用的信息。- 流程傳入的標(biāo)志為發(fā)送成功IF i_RetCode = 0 THEN第6章 常用語(yǔ)法6.1 變量聲明規(guī)那么:代碼中聲明與表的字段相對(duì)應(yīng)的變量時(shí),應(yīng)保證變量名和字段名相同。說(shuō)明:這樣要求的目的是增強(qiáng)可讀性。例如:DECLARE v_DateField T_TABLENAME.DATEFIELD%TYPE;BEGIN SELECT DATEFIELD INTO v_DateField FROM T_TABLENAME WHERE ROWNUM = 1;END;規(guī)那么:代碼中聲明與表的字段相對(duì)應(yīng)的變量時(shí),對(duì)類型的定義需要使用%TYPE方式。說(shuō)明:這樣表結(jié)構(gòu)的
41、變動(dòng)不會(huì)影響存儲(chǔ)過(guò)程,防止表結(jié)構(gòu)變更后出現(xiàn)變量長(zhǎng)度或類型不一致的問(wèn)題。6.2 返回值規(guī)那么:函數(shù)的返回值定義應(yīng)遵從以下標(biāo)準(zhǔn):成功出口返回0,失敗出口返回大于0整數(shù)。過(guò)程中定義的用于返回錯(cuò)誤碼的OUTPUT參數(shù),其定義應(yīng)遵從以下標(biāo)準(zhǔn):成功出口返回0,失敗出口返回非0整數(shù)。6.3 符號(hào)* 規(guī)那么:腳本中不允許出現(xiàn)“*的用法,必須用實(shí)際的字段名代替,INSERT語(yǔ)句必須指定要插入的字段名。例如:1、游標(biāo)定義錯(cuò)誤用法:CURSOR c_CursorName IS SELECT * FROM TABLENAME .正確用法:CURSOR c_CursorName IS SELECT FIELD1, FI
42、ELD2, . FROM TABLENAME .2、INSERT 語(yǔ)句錯(cuò)誤用法:INSERT INTO TABLENAME VALUES .正確用法:INSERT INTO TABLENAME (FIELD1, FIELD2, .) VALUES .6.4 包的使用建議:ORACLE的包類似C+中的Class,有包頭和包體兩局部組成;包能夠把相關(guān)的功能封裝性在一個(gè)包中,包里面里可以有函數(shù)和過(guò)程。PACKAGE與PROCEDURE和FUNCTION的優(yōu)點(diǎn)是封裝性比擬好;在開(kāi)發(fā)過(guò)程中,可以把功能點(diǎn)緊密相關(guān)的PROCEDURE、FUNCTION封裝在一個(gè)包里面。在對(duì)包體進(jìn)行編譯時(shí),調(diào)用該包的存儲(chǔ)過(guò)程
43、不會(huì)失效。6.5 綁定變量規(guī)那么:使用綁定變量的SQL語(yǔ)句,能使用綁定變量方式的業(yè)務(wù)邏輯下不允許使用綁定常量實(shí)現(xiàn)。說(shuō)明:在存儲(chǔ)過(guò)程拼SQL語(yǔ)句作為動(dòng)態(tài)SQL執(zhí)行時(shí),尤其需要注意。例如:錯(cuò)誤用法:v_SQL := 'DELETE FROM TABLENAME WHERE FIELD1 > SYSDATE AND FIELD2 = 102'EXECUTE IMMEDIATE v_SQL;正確用法:v_ID := 102;v_SQL := 'DELETE FROM TABLENAME WHERE FIELD1 > :1 AND FIELD2 = :2'EX
44、ECUTE IMMEDIATE v_SQL USING SYSDATE, v_ID;規(guī)那么:為提升性能,減少循環(huán)的開(kāi)銷,可以使用批量綁定。說(shuō)明:下面例如中的UPDATE語(yǔ)句可以一次將多條記錄進(jìn)行更新,而防止了通過(guò)使用循環(huán)同一條SQL執(zhí)行屢次。例如:CREATE OR REPLACE PROCEDURE P_CSP_TEST/* Description: 根據(jù)輸入的多個(gè)工單流水號(hào),更新對(duì)應(yīng)的SERVICECLASSID值 Author: 姓名 工號(hào) Date: YYYY-MM-DD Version: 版本 Caller: 調(diào)用者 Callee: 被調(diào)用者 Comments: 注釋信息 Histo
45、ry: 1.Date: 修改日期,格式為YYYY-MM-DDAuthor: 修改人姓名與工號(hào)Modification: 修改說(shuō)明 2. .*/( i_SerialNos VARCHAR2, - 一次輸入多個(gè)工單流水號(hào)以''分隔' i_ServiceClassID VARCHAR2, o_Ret OUT VARCHAR2 - 成功返回0,失敗返回1)AS TYPE typ_StrArray IS TABLE OF VARCHAR2(500) INDEX BY BINARY_INTEGER; v_ArrSerial typ_StrArray;BEGIN FOR i IN 1
46、.9999 LOOP - 把輸入?yún)?shù)的值取出存放在數(shù)組v_ArrSerial中 EXIT WHEN GetParamStr(i_SerialNos, '', i, v_ArrSerial(i) <> 0; END LOOP; - 根據(jù)數(shù)組中的工單流水號(hào)批量更新 FORALL i IN 1.v_ArrSerial.COUNT UPDATE T_WF_SERVICEINFO t SET t.SERVICECLASSID = i_ServiceClassID WHERE SerialNo = v_ArrSerial(i); COMMIT; o_Ret := 0;EXCEP
47、TION WHEN OTHERS THEN ROLLBACK; o_Ret := 1;END;6.6 異常處理規(guī)那么:函數(shù)/過(guò)程中應(yīng)該有異常處理的代碼,除非需要將任何可能的異常都向上拋出。說(shuō)明:不管代碼邏輯是否簡(jiǎn)單,只要有可能會(huì)拋出異常,函數(shù)/過(guò)程塊就應(yīng)該包括異常處理代碼。詳見(jiàn)代碼模板。規(guī)那么:如果需要的話,可以在異常處理局部將異常繼續(xù)向上拋出給調(diào)用者。說(shuō)明:如果有些異常是預(yù)料可能產(chǎn)生,而且腳本需要根據(jù)是否有異常來(lái)做不同的邏輯處理,這種情況可以在異常處理局部將該異常進(jìn)行處理,但可能有些意料之外的異常,需要繼續(xù)向上拋出,便于調(diào)用者了解腳本執(zhí)行是否成功,以便于調(diào)用者作下一步的處理如寫(xiě)錯(cuò)誤日志等操作
48、。規(guī)那么:如果需要自定義異常,必須在異常處理塊中對(duì)其進(jìn)行處理。說(shuō)明:如果自定義了異常,卻沒(méi)有相應(yīng)的代碼進(jìn)行處理,那么就應(yīng)該去掉該異常的定義。規(guī)那么:在對(duì)容錯(cuò)性要求比擬高的情況下,對(duì)異常塊中的代碼還需要判斷是否可能觸發(fā)異常,必要的時(shí)候應(yīng)使用嵌套的異常。說(shuō)明:在異常處理局部中的寫(xiě)日志之前,如果有事務(wù),一定要先ROLLBACK;異常塊中寫(xiě)日志、向表中插入一條初始化記錄等語(yǔ)句也可能失敗,對(duì)這些代碼必要時(shí)也應(yīng)該增加異常保護(hù),即使用嵌套的異常處理。6.7 事務(wù)控制規(guī)那么:在任何出口之前,只要存在事務(wù)未結(jié)束,必須提交或者回滾,除非有特殊設(shè)計(jì)考慮。說(shuō)明:存儲(chǔ)過(guò)程在每個(gè)出口前,如果啟動(dòng)了事務(wù)必須結(jié)束所有事務(wù),以
49、提交COMMIT或回滾ROLLBACK來(lái)結(jié)束事務(wù),否那么可能會(huì)導(dǎo)致表鎖等嚴(yán)重問(wèn)題;如果在存儲(chǔ)過(guò)程中,沒(méi)有啟動(dòng)事務(wù),就不必執(zhí)行COMMIT或ROLLBACK,否那么多余的ROLLBACK或COMMIT操作將增加數(shù)據(jù)庫(kù)的額外開(kāi)銷。規(guī)那么:ORACLE的事務(wù)是串行的,嵌套調(diào)用中內(nèi)層存儲(chǔ)過(guò)程的提交會(huì)導(dǎo)致外層的存儲(chǔ)過(guò)程事務(wù)被一并提交;諸如生成流水號(hào)這類存儲(chǔ)過(guò)程應(yīng)使用獨(dú)立事務(wù),否那么在產(chǎn)生流水號(hào)時(shí)就將之前的業(yè)務(wù)邏輯操作提交,而后續(xù)的操作不能保證在一個(gè)事務(wù)中。例如現(xiàn)有系統(tǒng)中一個(gè)工單循環(huán)派給多個(gè)部門(mén)時(shí),循環(huán)體內(nèi)產(chǎn)生流水號(hào),如最后一個(gè)派單失敗時(shí)回滾操作根本就不能回撤所有操作,導(dǎo)致事務(wù)一致性被破壞。建議:盡量分解大事務(wù),事務(wù)的大小應(yīng)視系統(tǒng)的性能和應(yīng)用的具體情況而定,過(guò)多過(guò)小的事務(wù)造成重做日志同步的等待,比方要往一個(gè)表插入100萬(wàn)條記錄,如果每條記錄提交
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣東體育職業(yè)技術(shù)學(xué)院《電磁場(chǎng)與微波技術(shù)》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東水利電力職業(yè)技術(shù)學(xué)院《中學(xué)語(yǔ)文教材中的現(xiàn)代名著講讀》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東青年職業(yè)學(xué)院《誤差理論與測(cè)量平差基礎(chǔ)》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東女子職業(yè)技術(shù)學(xué)院《急危重癥護(hù)理學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東南華工商職業(yè)學(xué)院《企業(yè)倫理與會(huì)計(jì)職業(yè)道德》2023-2024學(xué)年第一學(xué)期期末試卷
- 【2021屆備考】2020全國(guó)名校化學(xué)試題分類解析匯編:G單元-化學(xué)反應(yīng)速率和化學(xué)平衡
- 【2020秋備課】高中物理教案新人教版必修1-4.2-實(shí)驗(yàn)-探究加速度與力、質(zhì)量的關(guān)系
- 【同步備課】2020年高中物理人教版必修2-章末檢測(cè)卷-第7章機(jī)械能守恒定律5
- 【創(chuàng)新設(shè)計(jì)】2021高考化學(xué)總復(fù)習(xí)(江西版)作業(yè)本:熱點(diǎn)回頭專練3-無(wú)機(jī)化工流程題專項(xiàng)突破
- 人教版數(shù)學(xué)七年級(jí)上冊(cè)期末培優(yōu)專題-數(shù)軸上動(dòng)點(diǎn)問(wèn)題(含答案)
- 建筑垃圾清運(yùn)投標(biāo)方案(技術(shù)方案)
- 人員密集場(chǎng)所消防安全標(biāo)準(zhǔn)化管理規(guī)定
- 2024年印尼認(rèn)知評(píng)估和培訓(xùn)解決方案市場(chǎng)競(jìng)爭(zhēng)態(tài)勢(shì)與及未來(lái)趨勢(shì)預(yù)測(cè)報(bào)告
- JTG F40-2004 公路瀝青路面施工技術(shù)規(guī)范
- JTG D50-2017公路瀝青路面設(shè)計(jì)規(guī)范
- 鄉(xiāng)鎮(zhèn)衛(wèi)生院管理制度及細(xì)則
- 天津市河北區(qū)2022-2023學(xué)年七年級(jí)上學(xué)期期末生物試題【帶答案】
- 光伏發(fā)電技術(shù)在建筑中的應(yīng)用
- NB∕T 10805-2021 水電工程潰壩洪水與非恒定流計(jì)算規(guī)范
- (高清版)JTGT 3331-04-2023 多年凍土地區(qū)公路設(shè)計(jì)與施工技術(shù)規(guī)范
- 2024年輔警招聘考試試題庫(kù)附完整答案(必刷)
評(píng)論
0/150
提交評(píng)論