




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
xx有限公司ORACLE編碼規(guī)范1南京軌道交通系統(tǒng)工程有限公司ORACLE編碼規(guī)范ORACLE編碼規(guī)范文檔版本號:V1.0文檔編號:XXXX_TS_REGU_ORA文檔密級:內(nèi)部公開歸屬部門/項目:研發(fā)部編寫人:xxxx生效日期:xxxx-xx-xx版權(quán)信息本文件涉及之信息,屬xxxx有限公司所有。未經(jīng)xxxx有限公司允許,文件中的任何部分都不能以任何形式向第三方散發(fā)。網(wǎng)址:/
文檔修訂記錄版本號修訂日期修訂人修訂說明修訂狀態(tài)審核日期審核人批準人V1.02012-08-16xxxx正式版A2012-08-20xxxxxxxx修訂狀態(tài):A--增加,M--修改,D--刪除日期格式:YYYY-MM-DD目錄TOC\o"1-3"\h\z1. 前提 前提數(shù)據(jù)庫設計工具使用PowerDesigner。英文使用原則使用英文名稱時,統(tǒng)一使用大寫。
單詞之間用下劃線“_”進行分隔。使用范圍包括表、視圖、序列號、字段、函數(shù)、存儲過程、過程包、用戶名、角色名、同義詞名、表空間名等。單詞長度大于7的可以考慮用縮寫,但需報備數(shù)據(jù)庫審核小組,由數(shù)據(jù)庫審核小組負責形成英文單詞縮寫匯總表,統(tǒng)一所有英文單詞的縮寫格式。邏輯對象的定義規(guī)范ORACLE表空間定義原則每個用戶定義自已的表空間,每個用戶至少一個表空間,非SYSTEM用戶不得使用SYSTEM表空間。表和索引分開存儲,存放在不同的表空間,為每個用戶建立單獨的用于專門存放索引的表空間。如果條件允許,應將數(shù)據(jù)量較大的表歸類(大于100萬條記錄)單獨指定表空間,并將該表空間的BLOCK_SIZE指定大于等于16K隨時間推移不斷增大的流水表應考慮采用分區(qū)的方式進行存儲。每個分區(qū)單獨指定一個表空間與之對應。命名用戶表表空間命名格式:TBS_UserName或TBS_UserName_BlockSize例如:TBS_OLAP或TBS_OLAP_16K索引表空間命名格式:TBS_UserName_IDX或TBS_UserName_BlockSize例如:TBS_OLAP_IDX或TBS_OLAP_IDX_8KORACLE數(shù)據(jù)文件數(shù)據(jù)文件的存放為了便于管理,數(shù)據(jù)文件應統(tǒng)一存放在指定目錄數(shù)據(jù)文件的命名數(shù)據(jù)文件命名前綴應與表空間名一致,并加擴展名以示區(qū)別,例如:TBS_E_METADB.ORA當一個表空間有多個數(shù)據(jù)文件時,分別以表空間名加序號并加擴展名來命名各個數(shù)據(jù)文件,例如:TBS_E_ODS.ORA、TBS_E_ODS_2.ORA數(shù)據(jù)文件的大小每個數(shù)據(jù)文件的大小建議不超過2G數(shù)據(jù)文件屬性將數(shù)據(jù)文件屬性設置成自動擴展,以防止表空間滿后出現(xiàn)無法插入的錯誤用戶管理用戶創(chuàng)建每個相對獨立的模型建立一個用戶每個數(shù)據(jù)庫實例建議另外單獨建一個DBA用戶,如E_DBA,平常數(shù)據(jù)庫管理員用該用戶進行數(shù)據(jù)庫管理,只有在數(shù)據(jù)庫啟動和關閉時才用SYS用戶進行登錄。用戶授權(quán)普通用戶僅授予CONNECT和RESOURCE角色權(quán)限,除DBA用戶外,不得給普通用戶授予DBA角色權(quán)限。密碼管理用戶密碼設置應避免使用弱密碼,特別是SYS/SYSTEM和另外單獨建的DBA用戶。用戶命名規(guī)范用戶名由公司標識+數(shù)據(jù)邏輯層+“_”+用途簡稱(英文)命名如下:系統(tǒng)管理層:ES_(System)ES_SYSTEM:系統(tǒng)管理庫;ES_METADB:元數(shù)據(jù)庫;ES_WF:工作流管理;ES_...:其它系統(tǒng)管理數(shù)據(jù)庫接口層:EI_(Interface)EI_HA:滬A接口EI_SA:深A接口EI_HB:滬B接口EI_SB:深B接口EI_ST:三板接口EI_OF:開放式基金接口EI_...:其它外部接口應用程:EA_(Application)EA_PUB:公用業(yè)務管理EA_FUND:資金賬務管理EA_SEC:股份賬務管理EA_...:其它應用數(shù)據(jù)庫一級歷史數(shù)據(jù)原庫名+_HIST:如E_FUND歷史庫,E_FUND_HIST二級歷史數(shù)據(jù)同一級歷史數(shù)據(jù),具體可以等到確定二級歷史數(shù)據(jù)的管理規(guī)范后再確定。表定義表名在PowerDesigner中建模時,表的中文名稱統(tǒng)一使用,代碼+名稱的格式,如柜臺客戶信息表的中文名稱:TR_CUST_INFO客戶信息表。一般情況下,不使用前綴,但是如果一個庫中的表很多(如開放式基金接口庫等),為便于分類管理,也可以采用前綴標進行分類。主鍵(PRIMARYKEY)根據(jù)實際情況,盡可能為每張表建一個唯一主鍵,主鍵字段類型最好用整數(shù)。選擇有意義的,不太長且能唯一標識記錄行的列做主鍵,沒有這種列時,才考慮使用SEQUENCE做主鍵。列列類型字符型字段使用VARCHAR2類型,除了能明確定長的字段,應盡量避免使用CHAR類型(ORACLE的CHAR類型在位數(shù)不足時會自動補空格)VARCHAR2的定義最多4000字符,如超出應考慮使用其它字段類型數(shù)字型字段統(tǒng)一使用NUMBER型,并指定長度,整型使用NUMBER(m),如NUMBER(6);浮點型使用NUMBER(m,n),如NUMBER(8,2)等。日期、時間型字段使用視情況采用DATE型或CHAR型,一般記錄日志的日期、時間字段用DATE型。如果日期和時間分成兩個字段,可以考慮日期采用NUMBER(8),可節(jié)省存儲空間和提高效率。盡量使用VARCHAR2(1)代替布爾值使用CLOB代替LOXXXX,BLOB代替LOXXXXRAW字段名縮寫應有專門英文單詞縮寫表進行統(tǒng)一維護列長度應當根據(jù)實際需要選擇列長度。有對應web
頁面的,與頁面上對應列長度一致。對數(shù)據(jù)長度的驗證除數(shù)據(jù)庫端實現(xiàn)外還要盡可能在表現(xiàn)層控制。索引索引名統(tǒng)一為IDX_TableName[_x],例如IDX_TR_CUST_INFO或IDX_M_OPLOG_2每張表的索引不超過4個復合索引的列不超過4個分區(qū)表的索引統(tǒng)一建成本地索引(即建索引時,加LOCAL)對于表中的數(shù)據(jù)記錄頻繁地被刪除或插入,對這些表要經(jīng)常性重建索引,使用Alterindexrebuild命令。主鍵主鍵名統(tǒng)一為PK_TABLENAME外鍵外鍵名統(tǒng)一為FK_TABLENAME[_X]表分析定期對所有的表和索引進行分析,可提高查詢的性能。ANALYZETABLETaGTameCOMPUTESTATISTICS;ANALYZEINDEXIndexNameCOMPUTESTATISTICS;可寫個后臺定時腳本,每天晚上對用戶表和索引進行一次全面的分析。不可以對SYSTEM用戶和SYS用戶的表和索引進行分析!PL/SQL存儲過程編寫規(guī)范命名總體原則:名稱必須能準確描述出該標識符的功能、效用存儲過程、函數(shù)命名沿用公司原有《DatabaseServer端編碼規(guī)范》中的命名規(guī)范。參數(shù)、變量命名沿用公司原有《DatabaseServer端編碼規(guī)范》中的命名規(guī)范。格式標準函數(shù)格式FUNCTIONname[{parameter[,parameter,...]}]RETURNdatatypesIS
[localdeclarations]
BEGIN
executestatements
[EXCEPTION
exceptionhandlers]
END[name];標準過程格式PROCEDUREname[(parameter[,parameter,...])]IS
[localdeclarations]
BEGIN
executestatements
[EXCEPTION
exceptionhandlers]
END[name]TAB的轉(zhuǎn)換為了保證不同編輯器中瀏覽的版式一致,統(tǒng)一將編輯器設置為TAB轉(zhuǎn)換為4個空格??s進保證對應的begin-exception-end和if-endif的字符頭在同一垂直線上,縮進排版全部用PL/SQLDeveloper中的PL/SQLBeautifier進行自動排版。大小寫規(guī)則為了方便代碼的統(tǒng)一,除引號內(nèi)的字符,所有PL/SQL或SQL代碼都使用大寫。(注:關鍵字、變量等可以通過PL/SQL中的設置,用顏色及字體來區(qū)分)語句規(guī)范SELECT語句的格式標準:SELECTColumn_name1,Column_name2INTO:Parameter1,:Parameter2FROMTable1A,Table2BWHEREA.Column_name=B.Column_name;在寫查詢語句的時候,要求語句的條件排列先后順序要考慮語句執(zhí)行的性能,要做到語句能很好的利用到現(xiàn)有的索引,一般原則上不允許在一條查詢語句中有超過五張以上的表進行關聯(lián),因為當超過五張表關聯(lián)時Oracle將不再做語句的優(yōu)化處理;對語句的性能可以通過“執(zhí)行計劃”來跟蹤,在PL/SQLDeveloper中的ExplainPlanWindow中可分析ORACLE的執(zhí)行計劃。以下是SELECT的語法,詳細的使用方法請查閱相關資料SELECT[DISTINCT|ALL]{*|column1[,column2]...}FROM{table_1|(subquery)}[alias][,{table_2|(subquery)}[alias]]...[WHEREcondition][CONNECTBYcondition[STARTWITHcondition][GROUPBYexpn][HAVIXXXXexpn][{UNION[ALL]|INTERSECT|MINUS}SELECT...][ORDERBY[expn][ASC|DESC][FORUPDATE[OF[user.]table|view]column][NOWAIT]UPDATE語句的格式標準:UPDATETableSETColumn_name1=:Parameter1,Column_name2=:Parameter2WHEREColumn_name=:Pareameter;以下是UPDATE的語法,詳細的使用方法請查閱相關資料UPDATE[user.]table[@db_link][alias]SET{column1=express1[,column2=experss2]...|(column1[,column2]...)=(subquery)}[WHEREcondition|currentofcursor];INSERT語句的格式標準:INSERTINTOTableName(Column_name1,Column_name2)VALUES(:Parameter1,:Parameter2)或INSERTINTOTableName(Column_name1,Column_name2)SELECTColumn_name1,Column_name2FROMTableWHEREColumn_name=:Pareameter不允許出現(xiàn)INSERTINTOTableNameVALUES(:Parameter1,:Parameter2)的寫法。也不允許出現(xiàn)INSERTINTOTableNameSELECT*FROMTable的寫法DELETE語句的格式標準:DELETEFROMTableNameWHEREColumn_name1=:Parameter1以下是DELETE的語法,詳細的使用方法請查閱相關資料DELETE[FROM][user.]table[@db_link][Alias][WHEREcondition];UNION,INTERSECT及MINUS有時需要從多個表中組合具有一種相似類型的信息。Union可以完成將兩個以上的表的相類似的查詢結(jié)果合并在一起,并且相同的只取其一;如果unionall則表示返回所有行(不管是否重復)。Intersect返回在兩個表中都有相同內(nèi)容的信息。Minus則返回只在一個表中出現(xiàn)的信息1.語法:select...union[all]ersectselect...select...minusselect...盡量避免使用GOTO......LABEL語句;除非有特殊的需求,否則應盡量避免使用GOTO......LABEL語句。ORACLE的偽表與偽列:Oracle系統(tǒng)為了實現(xiàn)完整的關系數(shù)據(jù)庫功能,系統(tǒng)專門提供了一組稱為偽列(Pseudocolumn)的數(shù)據(jù)庫列,這些列不是在建立對象(如建表)時由我們完成的,而是在我們建立對象時由自動Oracle完成的。Oracle目前有以下的偽列:CURRVALandNEXTVAL使用序列號的保留字LEVEL查詢數(shù)據(jù)所對應的級ROWID記錄的唯一標識ROWNUM限制查詢結(jié)果集的數(shù)量Oracle還提供了一個DUAL的偽表,該表主要目的是保證在使用SELECT語句中語句的完整性而提供的,如:我們要查詢當前的系統(tǒng)日期及時間,而系統(tǒng)的日期和時間并是放在一個指定的表里。所以在from語句后就沒有表名給出。為了使用from后有個表名,我們就用DUAL代替。如:例1:查詢Oracle系統(tǒng)日期及時間:SQL>selectto_char(sysdate,'yyyy.mm.ddhh24:mi:ss')fromDUAL;TO_CHAR(SYSDATE,'YY2004.09.2417:28:09例2:計算一下5000+5000*0.1的結(jié)果是多少,則:SQL>select5000+5000*0.1fromDUAL;5000+5000*0.15500使用%ROWTYPE和%TYPEPL/SQL可以聲明與數(shù)據(jù)庫行有相同類型的記錄或者與數(shù)據(jù)庫字段相同的變量類型例:DECLAREV_CUST_CODETR_CUSTINFO.CUST_CODE%TYPE;R_D_CODENOTED_CODENOTE%TYPE;BEGIN……END;盡量不使用NOTIN子句;盡量不使用NOTIN子句,而用NOEXISTS或MINUS等其它方法替代它。不要在WHERE子句中使用函數(shù)作為條件;除非你不考慮執(zhí)行效率問題,否則請不要在WHERE子句中使用函數(shù)作為條件。例如WHERETO_NUMBER(TEL_NBR)=7654321這種寫法是效率非常低下的。使用SELECTCOUNT(1)SELECTCOUNT(*)改為SELECTCOUNT(1)能提高速度;EXISTS子句中,使用SELECT1;EXISTS子句中,SELECT*改為SELECT1能提高速度;使用CREATETABLEAS;如果可能,請使用CREATETABLETaGTame來替代INSERTINTOTaGTameSELECT*FROM……,特別是在記錄數(shù)比較多的情況下,前者的速度上會有非常明顯的優(yōu)勢。使用TRUNCATETABLE;如果是刪除全表,請使用TRUNCATETABLETaGTame來替代DELETEFROMTaGTame,能有效提高速度,并釋放該表所占的存儲空間,減少磁盤碎片。由于TRUNCATETABLE是DDL語言,在存儲過程中不能直接使用,應加上EXECUTEIMMEDIATE,使用方法如下:EXECUTEIMMEDIATE‘TRUNCATETABLETaGTame’;使用前請注意是否有權(quán)限問題。在PL/SQL中使用sqlcode,sqlerrm當存儲過程執(zhí)行出錯拋出EXCEPTION時,可通過sqlcode和sqlerrm取得當前的ORACLE錯誤代碼和錯誤信息,以下是使用范例:DECLAREV_SQLCODEnumber(6);V_ERRMSGvarchar2(512);BEGINUPDATEdeptSETusername=(SELECTusernameFROMwork_group)WHERErownum=1;EXCEPTIONWHENOTHERSTHENV_SQLCODE:=sqlcode;V_ERRMSG:=sqlerrm;Dmbs_output.put_line(‘程序出錯,錯誤代碼:’||V_SQLCODE||’錯誤信息:’||V_ERRMSG);END;適當使用ORACLE的HINT;在大數(shù)據(jù)量地進行INSERTINTO……SELECT……的時候,可使用/*+append*/這個HINT加快執(zhí)行速度,使用方法如下:INSERT/*+append*/INTO…….SELECT……使用該HINT之后,必須馬上提交或回滾,否則對該表的任何讀寫操作都會報錯。在多個表進行關聯(lián)操作的時候,有時用/*+rule*/這個HINT可能帶來意想不到的效果,這要根據(jù)實際情況比較分析使用前后的速度,適當取舍。使用方法如下:SELECT/*+rule*/……FROM……WHERE……注釋要求位置要求注釋行的長度以在最大化窗口內(nèi)可以看到全部內(nèi)容為宜,如果一行不夠顯示需要換行,下一行注釋語句與上一行注釋語句應對齊。變量申明的注釋放在變量申明語句的后面,并以--為注釋語句注釋行一律放在被注釋語句的上一行。注釋行中,注釋命令與注釋內(nèi)容空一個空格,如:V_BpModeVARCHAR2(10);--用戶服務類型BEGIN--選取用戶服務類型BEGINSELECTBpModeINTOV_BpModeFROMACC_BPWHEREUser_ID=I_User_ID;EXCEPTIONWHENNO_DATA_FOUNDTHENWHENOTHERSTHENEND;存儲過程注釋要求/******************************************************************概要說明:中文名稱:用途:語法信息:調(diào)用舉例:功能修訂:簡要說明:修訂記錄:<修訂日期><修訂人> :修改內(nèi)容簡要說明〈續(xù)簡要說明>******************************************************************/代碼片斷注釋要求當處理流程比較復雜,不容易讓其它人看懂時,應該加以注釋注釋行放在被注釋的代碼片斷上一行,并與代碼片斷第一行對齊。代碼片斷處理要求變量的聲明函數(shù)內(nèi)部變量的聲明統(tǒng)一放在函數(shù)代碼段的開始部分,不允許分散在函數(shù)內(nèi)小代碼片斷中。全局公共變量統(tǒng)一放在一個包聲明內(nèi),并放在包聲明代碼段開始部分。包體內(nèi)局部公共變量放在包體代碼段開始部分。數(shù)據(jù)選取為了規(guī)避觸發(fā)Oracle意外錯誤,應遵守如下規(guī)則1)從數(shù)據(jù)表中選取一行數(shù)據(jù)到變量范例BEGINSELECT*INTOV_AccFROMAcc_BpWHEREUser_ID=I_User_ID;EXCEPTIONWHENNO_DATA_FOUNDTHEN……相應處理;WHENOTHERSTHEN……相應處理;END;2)做類型轉(zhuǎn)換時BEGINV_PensonId=TO_NUMBER(I_In);EXCEPTIONWHENOTHERSTHEN……相應處理;END;游標的使用除非特殊需要,統(tǒng)一使用如下范例BEGINFORrecIN(SELECT*FROMAcc_BpWHEREBpMode=‘省網(wǎng)中文’)LOOP……ENDLOOP;END;錯誤處理要求可預見的錯誤處理,并使得流程無法繼續(xù)時,應向操作員報告發(fā)生這些錯誤的原因,可能發(fā)生的影響。不可以預見的Oracle系統(tǒng)內(nèi)部錯誤,則應向操作員報告如下信息:錯誤發(fā)生地點、錯誤發(fā)生的環(huán)境或關鍵條件、關鍵性的幫助信息、錯誤信息。備注:錯誤發(fā)生地點包括:包名稱函數(shù)名錯誤發(fā)生的環(huán)境或關鍵條件、關鍵性的幫助信息的取舍與多寡,取決于如何能使系統(tǒng)管理員或開發(fā)人員掌握發(fā)生錯誤的具體原因信息報告的組織格式如下:(包名稱.函數(shù)名)發(fā)生的條件或關鍵條件關鍵性的幫組信息:SQLERRM范例FUNCTIONPayToAcnt(IN_PayINJf_PayList%ROWTYPE)RETURNVARCHAR2ISV_AccAcc_Bp%ROWTYPE;SYSTEM_ERROREXCEPTION;BEGINBEGINSELECT*INTOV_AccFROMAcc_BpWHEREUser_ID=I_Pay.User_Id;EXCEPTIONWHENNO_DATA_FOUNDTHENPub.SetErrMsg(‘無法找到用戶(User_ID=’||I_Pay.User_ID||‘)’);RAISESYSTEM_ERROR;WHENOTHERSTHENPub.SetErrMsg(‘(S_ToAcnt.PayToAcnt)取Acc_Bp表,User_ID=’||I_Pay.User_ID||‘意外錯誤:’||SQLERRM);RAISESYSTEM_ERROR;WHENEND;RETURN‘成功’EXCEPTIONWHENSYSTEM_ERRORTHENRETURN‘失敗’;WHENOTHERSTHENPub.SetErrMsg(‘(S_ToAcnt.PayToAcnt)User_Id=’||I_Pay.User_ID||‘,Money=’||I_Pay.PayMoney||‘,Free=’||I_PayList.PayFree||‘意外錯誤:’||SQLERRM);RAISE‘失敗’;ENDPayToAcnt;尾注要求如果存在3重以上的循環(huán),應加尾注,尾注內(nèi)容為LOOP+循環(huán)層級,LOOP與ENDLOOP都應該加注,如:LOOP--LOOP1……LOOP--LOOP2……LOOP--LOOP3……ENDLOOP;--LOOP3……ENDLOOP--LOOP2……ENDLOOP--LOOP1如果存在3重以上條件,應加尾注。只要在ENDIF上加尾注,尾注內(nèi)容為條件內(nèi)容如:IF條件1THENIF條件2THENIF條件3THENENDIF;--條件3ENDIF;--條件2ENDIF;--條件1如果條件內(nèi)部代碼片斷超過10行,應加尾注,如:IF條件1THEN……--10行以上處理代碼ENDIF;--條件1C/C++嵌入式SQL書寫規(guī)范首先聲明,因公司原有的開發(fā)規(guī)范不建議采用C/C++中直接嵌入SQL的作法。而是將嵌入式SQL統(tǒng)一放在存儲過程作實現(xiàn)。以下只是制定書寫規(guī)范,如有特殊的需求要采用嵌入式SQL時,應遵從以下書定規(guī)范。大多數(shù)嵌入式SQL語句與交互式SQL語句的區(qū)別僅僅是增加了一些子句或使用了一些SQL變量。在定義SQL語句時,把變量和所要賦的值分兩行來表達,把SQL的賦值同其變量定義起始相同,以減少此語句中的空格數(shù)。為了保證UNIX下各個平臺的兼容,規(guī)定在寫長字符串定義包括SQL語句定義時,都要在字符串定義的每行結(jié)束用反斜杠“\”進行字符串連接,而且要保證反斜杠“\”前至少要有一個空格。Select語句格式標準Char*p_cSelStmt=“SELECTColumn_name1,Column_name2\INTO:Parameter1,:Parameter2\FROMTable1A,Table2B\WHEREA.Column_name=B.Column_name”;在寫查詢語句的時候,要求語句的條件排列先后順序要考慮語句執(zhí)行的性能,要做到語句能很好的利用到現(xiàn)有的索引,一般原則上不允許在一條查詢語句中有超過五張以上的表進行關聯(lián),因為當超過五張表關聯(lián)時Oracle將不再做語句的優(yōu)化處理;對語句的性能可以通過“執(zhí)行計劃”來跟蹤,在SQL/PLUS下運行:setautotraceon,然后運行要跟蹤的語句,通過分析系統(tǒng)的結(jié)果值來確定是否已經(jīng)利用索引,運行:setautotraceoff將關閉“執(zhí)行計劃”。Update語句格式標準Char*p_cUpdStmt=“UPDATETableSet\Column_name1=:Parameter1,\Column_name2=:Parameter2\WHEREColumn_name=:Pareameter”;Delete語句格式標準Char*p_cDelStmt=“DELETEfromTableName\WHEREColumn_name1=:Parameter1,\Column_name2=:Parameter2”;Insert語句格式標準Char*p_cInsStmt=“INSERTINTOTableName(Column_name1,Column_name2)\Values(:Parameter1,:Parameter2);“日期、時間使用格式在每個SQL語句中,需要用到時間值的,都以如下格式出入: to_date(ParamOfDate,”YYYY-MM-DD”); to_char(ParamOfDate,”YYYY-MM-DD[HH24:MI:SS]”);除需要由操作員輸入所要插入的日期和時間外,其他需要往數(shù)據(jù)庫產(chǎn)生日期和時間的動作都通過系統(tǒng)時間(sysdate)來插入。JDBC&Oracle使用注意點關閉自動提交功能,提高系統(tǒng)性能在第一次建立與數(shù)據(jù)庫的連接時,在缺省情況下,連接是在自動提交模式下的。為了獲得更好的性能,可以通過調(diào)用帶布爾值false參數(shù)的Connection類的setAutoCommit()方法關閉自動提交功能,如下所示:conn.setAutoCommit(false);值得注意的是,一旦關閉了自動提交功能,我們就需要通過調(diào)用Connection類的commit()和rollback()方法來人工的方式對事務進行管理。在動態(tài)SQL或有時間限制的命令中使用Statement對象在執(zhí)行SQL命令時,我們有二種選擇:可以使用PreparedStatement對象,也可以使用Statement對象。無論多少次地使用同一個SQL命令,PreparedStatement都只對它解析和編譯一次。當使用Statement對象時,每次執(zhí)行一個SQL命令時,都會對它進行解析和編譯。因此,在有時間限制的SQL操作中,除非成批地處理SQL命令,我們應當考慮使用Statement對象。在成批處理重復的插入或更新操作中使用PreparedStatement對象如果成批地處理插入和更新操作,就能夠顯著地減少它們所需要的時間。Oracle提供的Statement和CallableStatement并不真正地支持批處理,只有PreparedStatement對象才真正地支持批處理。我們可以使用addBatch()和executeBatch()方法選擇標準的JDBC批處理,或者通過利用PreparedStatement對象的setExecuteBatch()方法和標準的executeUpdate()方法選擇速度更快的Oracle專有的方法。要使用Oracle專有的批處理機制,可以以如下所示的方式調(diào)用setExecuteBatch():PreparedStatementpstmt3Dnull;try{((OraclePreparedStatement)pstmt).setExecuteBatch(30);...pstmt.executeUpdate();}調(diào)用setExecuteBatch()時指定的值是一個上限,當達到該值時,就會自動地引發(fā)SQL命令執(zhí)行,標準的executeUpdate()方法就會被作為批處理送到數(shù)據(jù)庫中。我們可以通過調(diào)用PreparedStatement類的sendBatch()方法隨時傳輸批處理任務。利用SQL完成數(shù)據(jù)庫內(nèi)的操作要充分利用SQL的面向集合的方法來解決數(shù)據(jù)庫處理需求,而不是使用Java等過程化的編程語言。如果要在一個表中查找許多行,結(jié)果中的每個行都會查找其他表中的數(shù)據(jù),最后,編程人員創(chuàng)建了獨立的UPDATE命令來成批地更新第一個表中的數(shù)據(jù)。與此類似的任務可以通過在set子句中使用多列子查詢而在一個UPDATE命令中完成。為了規(guī)范獨立存管系統(tǒng)數(shù)據(jù)庫設計和開發(fā),考慮到SQLSERVER與ORACLE數(shù)據(jù)庫之間的一些差異,特作如下約定:數(shù)據(jù)庫設計開發(fā)約定英文命名全部大寫,單詞之間用下劃線分隔為了統(tǒng)一書寫規(guī)范,在表名、字段名、存儲過程命名時,采用的英文單詞全部使用大寫,單詞之間使用下劃線“_”進行分隔。VARCHAR類型字段最長為4000為了考慮兼容ORACLE數(shù)據(jù)庫的VARCHAR長度,在數(shù)據(jù)庫模型設計時,所有的VARCHAR類型字段最長為4000,如字段內(nèi)容超過此限制,應考慮采用其它數(shù)據(jù)類型。所有數(shù)值型的字段統(tǒng)一使用number(x)/numeric(x)因為不同數(shù)據(jù)庫的integer類型所表示的數(shù)據(jù)范圍可能不同,因此,數(shù)據(jù)庫模型設計時,所有數(shù)值型的字段統(tǒng)一使用number(x),視字段的長度需要指定x的大小,比如number(6)。索引名統(tǒng)一為IDX_TableName[_x]索引名統(tǒng)一為IDX_TableName[_x],例如IDX_TR_CustInfo或IDX_M_OPLOG_2。SQL查詢條件中注意字段的類型要一致比如A表的B字段是字符型,那么SELECT時就應該寫成
SELECT*FROMAWHEREB='1'
而不是寫成
SELECT*FROMAWHEREB=1字段別名統(tǒng)一用AS方式SQL那邊給字段取別名時統(tǒng)一用AS的方式,這樣可以跟ORACLE兼容.比如ORACLE不支持SELECTAAA=COLUMN_NAME的方式
寫成SELECTCOLUMN_NAMEASAAA這樣就可以統(tǒng)一了存儲過程開發(fā)約定存儲過程命名約定存儲過程的命名必須符合P_功能分類[_功能子類]_詳細名稱格式,其中1,P表示是存儲過程;2,功能分類、功能子類采用約定好的
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣東省六校2025屆高三下學期聯(lián)考化學試題含解析
- 2025年文化、辦公用設備或器具項目投資風險評估報告
- 2025年高低壓費控系統(tǒng)項目建議書
- 跨境電子商務與倉儲的關系試題及答案
- 2024年國際物流師考試應試策略試題及答案
- 浙江省“溫州八校”2025屆高考全國統(tǒng)考預測密卷化學試卷含解析
- 湖北省部分高中協(xié)作體2025屆高三下學期3月一模聯(lián)考歷史試題答案
- 2025年全數(shù)字攝影測量系統(tǒng)項目合作計劃書
- CPSM考試智能化復習試題及答案
- 了解國際物流師職業(yè)的多樣性和含義與試題及答案
- 5.3《陽燧照物》教案-【中職專用】高二語文同步教學(高教版2023·拓展模塊下冊)
- 新版GCP培訓課件
- 2025建設工程監(jiān)理合同示范文本
- 大模型落地應用實踐方案
- 高速公路網(wǎng)命名和編號規(guī)定(附條文說明)
- 社會工作法規(guī)與政策中級考前沖刺題庫300題(帶詳解)
- 體檢中心培訓內(nèi)容
- 2025版股權(quán)對賭協(xié)議轉(zhuǎn)讓合同范本:風險投資合同
- 無人機救援任務操作培訓方案
- 獨家模特簽約正規(guī)合同范例
- DB51T 2860-2021“天府名品”認證通 用規(guī)范
評論
0/150
提交評論