激情欧美日韩一区二区,浪货撅高贱屁股求主人调教视频,精品无码成人片一区二区98,国产高清av在线播放,色翁荡息又大又硬又粗视频

oracle數據庫開(kāi)發(fā)規范具體條件

時(shí)間:2024-10-23 07:10:45 Oracle認證 我要投稿
  • 相關(guān)推薦

oracle數據庫開(kāi)發(fā)規范具體條件

  編程規范

  1:所有數據庫關(guān)鍵字和保留字都大寫(xiě);字段、變量的大小寫(xiě)

  2:程序塊采用縮進(jìn)風(fēng)格書(shū)寫(xiě),保證代碼清晰易讀,風(fēng)格一致,縮進(jìn)格數統一為2/4個(gè)。

  必須使用空格,不允許使用【tab】鍵。

  3:當同一條語(yǔ)句暫用多于一行時(shí),每行的其他關(guān)鍵字與第一行的關(guān)鍵字進(jìn)行右對齊。

  4:不允許多個(gè)語(yǔ)句寫(xiě)到一行,即一行只寫(xiě)一條語(yǔ)句。

  5:避免把復雜的SQL語(yǔ)句寫(xiě)到同一行,建議要在關(guān)鍵字和謂詞處換行。

  6:相對獨立的程序塊之間必須加空行。BEGIN、END獨立成行。

  7:太長(cháng)的表達式應在低優(yōu)先級操作符處換行,操作符或關(guān)鍵字應放在新行之首。不同類(lèi)型的操作符混合使用時(shí),用括號隔離,使得代碼清晰。

  8: 不同類(lèi)型的操作符混合使用時(shí),應使用括號明確的表達運算的先后關(guān)系。

  9:運算符以及比較符左邊或者右邊只要不是鏈接的括弧,則空一格。

  10:if 后的條件要用括號括起來(lái),括號內每行最多兩個(gè)條件。

  11:減少控制語(yǔ)句的檢查次數,如在 else( if..else)控制語(yǔ)句中,對最常用符合條件,盡量往前被檢查到。盡量避免使用嵌套的if 語(yǔ)句,在這種情況應使用多個(gè)if 語(yǔ)句來(lái)判斷其可能。

  命名規范

  1:不使用數據庫關(guān)鍵字和保留字,為了避免不必要的沖突和麻煩。

  2:嚴禁使用帶空格的名稱(chēng)來(lái)給字段和表命名,會(huì )出錯誤而終止。

  3:用戶(hù)自定義數據庫對象:表,視圖,主外鍵,索引,觸發(fā)器,函數,存儲過(guò)程,序列,同義詞,數據庫連接,包,包體風(fēng)格要保持一致。

  數據庫名稱(chēng)1-8個(gè)字符,其他對象1-30個(gè)字符,數據庫連接不操過(guò)30個(gè)字符。使用英文字母、數字、下劃線(xiàn)。

  除表外,其他對象命名最好用不同的前綴來(lái)區別。

  表 tbl_/t_

  視圖 v_

  序列 seq_

  簇 c_

  觸發(fā)器 trg_

  存儲過(guò)程 sp_/p_

  函數 f_/fn_

  物化視圖 mv_

  包和包體 pkg_

  類(lèi)和類(lèi)體 typ_

  主鍵 pk_

  外鍵 fk_

  唯一索引 uk_

  普通索引 idx_

  位圖索引 bk_

  4:PL/SQL對象和變量命名規則

  輸入變量 i_

  輸出變量 o_

  輸入輸出變量 io_

  普通變量 v_

  全局變量 gv_

  常量 大寫(xiě)

  游標 cur_

  用戶(hù)自定義類(lèi)型 type_

  保存點(diǎn) spt_

  不允許使用中文和特殊字符

  用戶(hù)對象命名應全部為小寫(xiě),且不允許使用控制符號強制轉換對象為小寫(xiě)字符

  變量命名,要有具體含義,能表明變量類(lèi)型。

  5:注釋規范

  源程序有效注釋量必須在30%左右。

  統一文件頭的注釋?zhuān)槍Υ鎯^(guò)程,函數進(jìn)行功能性描述,入出參數說(shuō)明。

  /*******************************************************************

  名稱(chēng):

  功能描述:

  修訂記錄

  版本號 編輯時(shí)間 編輯人 修改描述

  入出參數說(shuō)明

  返回值描述(針對函數)

  *******************************************************************/

  所有變量定義需要添加注釋?zhuān)f(shuō)明該變量的用途和含義。

  程序分支必須書(shū)寫(xiě)注釋?zhuān)@些語(yǔ)句是程序實(shí)現某一特定功能的關(guān)鍵。

  在程序塊的結束行加注釋?zhuān)砻鞒绦驂K結束。

  注釋?xiě)c描述的代碼相似,對代碼的注釋?xiě)谄渖戏交蛴曳浆F今為止,不能放在下面。

  禁止在注釋中使用縮寫(xiě),特別是非常用的縮寫(xiě)。

  注釋要與描述的內容進(jìn)行相同的縮排。

  注釋上面的代碼應空行隔開(kāi)。

  注釋用中文書(shū)寫(xiě)。

  盡量使用”--” 進(jìn)行注注釋。

  行尾注釋須使用”--” 。

  6:分區表命名

  分區表的表名可以遵循普通表的正常命名規則。主要用途的縮寫(xiě)+下劃線(xiàn)+yymm。

  按地域分布的子公司庫存表( 每個(gè)區域一個(gè)分區),分區名這為表的主要用途的縮寫(xiě)+區域的縮寫(xiě)。

  最小分區名字為before_data 規則3.4.5:最大分區名字為after_data 規則3.4.5:子分區的名字為:父分區名+下劃線(xiàn)+sub+ 下劃線(xiàn)+no( 區域縮寫(xiě)),根據實(shí)際情況進(jìn)行組合。

  分區表本地索引命名在正常索引名的最后一個(gè)下劃線(xiàn)前加L。

  分區表全局索引命名在正常索引名的最后一個(gè)下劃線(xiàn)前加G。

  DML操作規范

  1:減少控制語(yǔ)句的檢查次數,應將最常用的符合條件前置以便被檢查到。

  2:避免使用 SELECT *語(yǔ)句,給出字段列表,避免出現在表結構變化時(shí)程序無(wú)法識別的情況。

  3:INSERT 語(yǔ)句必須給出字段列表,避免在表結構變化時(shí)發(fā)生編譯錯誤。

  4:從表中同一筆記錄中獲取記錄的字段值,須使用一SQL 語(yǔ)句得到,不允許分多條SQL 語(yǔ)句。

  5:當一個(gè)PL/SQL 或SQL 語(yǔ)句中涉及到多個(gè)表時(shí),始終使用別名來(lái)限定字段名,這使其它人閱讀起來(lái)更方便,避免了含議模糊的引用,其中能夠別名中清晰地判斷出表名。

  6:禁止進(jìn)行字段數據類(lèi)型的隱式轉換,所有轉換必須進(jìn)行明確的數據類(lèi)型轉換

  說(shuō)明:隱式轉換會(huì )導致字段上的索引失效,而進(jìn)行顯式轉換,會(huì )提醒到開(kāi)發(fā)人員該種操作會(huì )導致索引失效

  7:禁止在多表關(guān)聯(lián)的時(shí)候,在非索引字段上的關(guān)聯(lián);

  8:進(jìn)行模糊查詢(xún)時(shí),禁止條件中字符串直接以“%”開(kāi)頭;

  9:盡量使用DECODE來(lái)簡(jiǎn)化SQL訪(fǎng)問(wèn)數據庫的次數

  10:避免使用HAVING子句, HAVING 只會(huì )在檢索出所有記錄之后才對結果集進(jìn)行過(guò)濾. 這個(gè)處理需要排序,總計等操作. 如果能通過(guò)WHERE子句限制記錄的數目,那就能減少這方面的開(kāi)銷(xiāo).

  11:當PL/SQL或SQL語(yǔ)句中涉及多個(gè)表時(shí),始終使用別名來(lái)限定表名和字段名。

  12:確保變量和參數在類(lèi)型和長(cháng)度上與表數據列相匹配,否則較寬或較大數據進(jìn)來(lái)時(shí)會(huì )異常。

  13:使用EXISTS/NOT EXISTS替代IN/NOT IN

  14:采用表連接替代EXIST

  15:復雜的SQL是否由設計不當引起,復雜的SQL考慮用程序塊來(lái)執行。

  處理的優(yōu)先級

  靜態(tài)SQL>動(dòng)態(tài)SQL

  綁定變量的SQL>動(dòng)態(tài)SQL

  SQL>PL/SQL過(guò)程

  SQL>游標遍歷

  ORACLE函數>自定義函數

  16: 使用ORACLE分析函數來(lái)代替同一表多次的關(guān)聯(lián)。

  17: 使用動(dòng)態(tài)SQL時(shí)要綁定變量。

  18:不要把空的變量直接與比較運算符比較,如果結果可能為空,應使用IS NULL貨IS NOT NULL 或NVL函數進(jìn)行比較。

  19:order by 后面字段不唯一時(shí)分頁(yè)會(huì )出現問(wèn)題,分頁(yè)時(shí)如果order by 后面的字段不唯一,一定要讓order by 唯一,最佳方案是增加一pk,如實(shí)在沒(méi)辦法則可以追加rowid,order by 后盡量避免使用rowid。

  20:聚集函數max、min、sum 在沒(méi)有記錄得符合查詢(xún)條件的情況下返回null,不會(huì )產(chǎn)生no_data_found 異常。

  21:避免頻繁commit,尤其是把commit 寫(xiě)在循環(huán)體中每次循環(huán)都進(jìn)行commit。

  22:使用綁定變量,避免常量的直接引用。

  23:避免不必要的排序

  24:對于數字型的唯一鍵值,用序列sequence 產(chǎn)生。

  25:索引的規則:

  建立索引常用的原則如下:

  1)、表的主鍵、外鍵必須有索引

  2)、數據量超過(guò)1000 行的表應該有索引

  3)、經(jīng)常與其它表進(jìn)行連接的表,在邊接字段上應建立索引

  4)、經(jīng)常出現在where 子句中的字段且過(guò)濾性極強的,特別是大表的字段,應該建立索引

  5)、索引字段,盡量避免值為null

  6)、復合索引的建立需要仔細分析; 盡量考慮用單字段索引代替;

  A. 正確選擇復合索引中的第一個(gè)字段,一般是選擇性較好的且在where 子句中常的字段上;

  B. 復合索引的幾個(gè)字段是否經(jīng)常同時(shí)以and 方式出現在where 子句中? 單字段查詢(xún)是否極少其至沒(méi)有? 如果是,則可以建立復合索引; 否則考慮單字段索引;

  C. 如果復合索引中包含的字段經(jīng)常單獨出現在where 子句中,則分解為多個(gè)單字段索引;

  D. 如果復合索引所包含的字段超過(guò)3 個(gè),那么仔細考慮其必要性,考慮減少復合的字段;

  E. 如果既有單字段索引,又有這幾個(gè)字段上的復合索引,一般可以刪除復合索引;

  7). 頻繁DDL 的表,不要建立太多的索引;

  8). 刪除無(wú)用的索引,避免對執行計劃造成負面影響;讓SQL 語(yǔ)句用上合理的索引。

  合理讓SQL 語(yǔ)句使用索引的原則如下:

  首先,看是否用上了索引,對于該使用索引而沒(méi)有用上索引的SQL 語(yǔ)句,應該想辦法用上索引。

  其次,看是否用上了索引,特別復雜的SQL 語(yǔ)句,當其中where 子句包含多個(gè)帶有索引的字段時(shí),更應該注意索引的選擇是否合理。錯誤的索引不僅不會(huì )帶來(lái)性能的提高,相反往往導致性能的降低。

  26:like 子句盡量前端匹配

  數據庫設計

  1:數據庫設計文檔中,必須包含表數據保留時(shí)間;

  2:數據庫設計文檔中,必須包含表在最大保留時(shí)間下的數據量;

  3:數據庫設計文檔中,如果表為分區表,必須包含分區條件;

  4:數據庫設計文檔中,必須包含表的讀寫(xiě)頻率;

  5:?jiǎn)蜸EGMENT (如單個(gè)普通表,分區表的單個(gè)分區,單個(gè)普通索引,分區索引的單個(gè)分區)原則上不得超過(guò)2GB大小;

  6:和其他表有關(guān)聯(lián)的表,和其他表功能一致的字段類(lèi)型以及長(cháng)度,盡量使用相同的列名;

  7:禁止依靠設計數據庫表之間的主外鍵關(guān)系來(lái)保證數據一致性;

  8:需要UPDATE的字段,不得設計為分區條件字段;

  9:如無(wú)特別需要,原則上,字符類(lèi)型選擇變長(cháng)字段,數字類(lèi)型選擇NUMBER;

  10:如無(wú)特別需要,原則上不得設定表的并發(fā)度,壓縮等屬性;

  11:無(wú)特別說(shuō)明,每個(gè)表的索引,不得超過(guò)5個(gè);單字段上的索引不得超過(guò)2個(gè);(即一個(gè)單字段最多可在上面建立一個(gè)單字段索引和一個(gè)組合索引包含這個(gè)字段);復合索引原則上不得超過(guò)3個(gè)字段;

  12:原則上,分區表的索引必須是分區索引;

  13:頻繁出現在where字句里的字段建議建立索引;

  14:用來(lái)和其他表關(guān)聯(lián)的字段建議建立索引;

  15:索引字段建議有高的選擇性和過(guò)濾性(count(distinctid)/count(*)>0.6);

  16:在where子句里作為函數參數的字段,不能創(chuàng )建索引,不建議建立函數索引;

  17:建立索引的時(shí)候,建議考慮到SELECT和INSERT,UPDATE,DELETE的平衡;

  18:一般建議在查詢(xún)數據量10%以下使用索引;

  19:WHERE子句的查詢(xún)條件構成索引字段前導字段;選擇性更高的字段放在組合字段索引的前導字段;如果字段選擇性接近,則把頻繁查詢(xún)的字段放在前面;如果字段查詢(xún)頻率相同,則把表中的數據的排列順序所依據的字段放在前面;

  20:進(jìn)行GROUP BY或者是ORDER BY的字段應在組合字段索引的前導字段;

  21:所有序列應設置CACHE值為不低于100

  22:如果要求獲得的字段具有強連續和強排序性,則不適宜使用序列

  23:視圖中不允許出現ORDER BY排序

  24:基于多表關(guān)聯(lián)的視圖,必須在字段名前指定表別名;視圖的基礎數據盡量從表中獲取,盡量不要嵌套視圖

  25:存儲過(guò)程,必須有異常捕獲代碼

  在存儲過(guò)程中變量的聲明集中在A(yíng)S和BEGIN中完成,不允許在代碼中隨意定義變量。完成相同功能模塊的變量放在一起,不同模塊一空行隔開(kāi)。

  存儲過(guò)程中嚴禁使用GOTO語(yǔ)句進(jìn)行跳轉

  有循環(huán)更新的存儲過(guò)程,必須進(jìn)行批量提交,且必須進(jìn)行事務(wù)控制

  存儲過(guò)程中如果打開(kāi)了dblink,則在存儲過(guò)程正;蛘弋惓M顺霰仨氷P(guān)閉所有打開(kāi)的dblink

  存儲過(guò)程中如果使用了游標,則在存儲過(guò)程正;蛘弋惓M顺霰仨氷P(guān)閉所有打開(kāi)的游標

  存儲過(guò)程中如果有更新,必須在異常捕獲代碼中做回退操作。

  異常處理時(shí),把收集機到的錯誤信息計入錯誤日志表。

  pl/sql 使用短路徑法,當計算邏輯表達式,即:一旦確定后,pl/sql 停止計算表達式。

  26:函數中,如果進(jìn)行了事務(wù)處理,必須有異常捕獲代碼

  函數盡量只是實(shí)現復雜的計算功能,不對數據庫進(jìn)行更新操作

  27:一次UPDATE多個(gè)字段的時(shí)候,應一次查詢(xún)完成

  腳本規范

  1:腳本按分類(lèi)或內容分開(kāi)存放,按下列順序存儲

  1:創(chuàng )建數據庫表空間、用戶(hù)文件腳本。

  2:創(chuàng )建數據庫角色、用戶(hù)腳本。

  3:創(chuàng )建數據類(lèi)型腳本、自定義的數據類(lèi)型。

  4:創(chuàng )建業(yè)務(wù)表腳本。

  5:創(chuàng )建臨時(shí)表腳本。

  6:創(chuàng )建視圖腳本。

  7:創(chuàng )建主外鍵腳本。

  8:創(chuàng )建索引腳本。

  9:創(chuàng )建觸發(fā)器腳本。

  10:創(chuàng )建函數、存儲過(guò)程腳本。

  11:初始化數據腳本。

  12:創(chuàng )建作業(yè)腳本。

  2:創(chuàng )建每個(gè)對象代碼的首部應該有對象注釋。

  3:函數,存儲過(guò)程應單獨創(chuàng )建腳本,在相應目錄下,創(chuàng )建一個(gè)運行所有腳本的總腳本。

  技巧

  1:觸發(fā)器盡量考慮內部代碼過(guò)程封裝,用過(guò)程封裝sql,減少解析次數。

  create or replace procedure p_test_tri(p_deptno in number)

  as

  begin

  insert into test_tri_tab2 (deptno,cnt) values (p_deptno,1);

  end;

  /

  create or replace trigger test_tab2_trigger

  after insert on test_tri_tab1

  for each row

  begin

  p_test_tri(:new.deptno);

  end test_tri_tab2_trigger;

  /

  2:避免動(dòng)態(tài)sql,動(dòng)態(tài)sql在執行過(guò)程中變異,普通sql在過(guò)程執行前就已經(jīng)編譯過(guò)了 。等價(jià)靜態(tài)語(yǔ)句替換動(dòng)態(tài)sql

  3:OLTP系統盡量使用綁定變量,sql在shared_pool中介西完成邏輯優(yōu)化,物理優(yōu)化,生成計劃等一系列動(dòng)作

  select x from t where x=:x;

  4:減少對sysdate,mod的調用,避免sql中的函數調用,大量遞歸調用影響性能?梢愿挠帽黻P(guān)聯(lián)來(lái)代替函數調用。函數調用有代價(jià)。

  5:設法減少表掃描次數

  6:盡量使用簡(jiǎn)單sql來(lái)代替PL-SQL邏輯

  7:避免不必要的排序

  1)確認order by 是否多余

  2)union是否可以被union all替代

  3)不可避免排序,要降低開(kāi)銷(xiāo),降序索引

  8:使用pls_integer類(lèi)型

  變量時(shí)整數型可使用。內部算法改進(jìn)可提高性能。

  9:避免數據類(lèi)型轉換,隱式類(lèi)型轉換

  1)在insert和update語(yǔ)句中,oracle將賦值的類(lèi)型轉換為目標列的類(lèi)型。sysdate根據參數NLS_DATE_FORMAT和NLS_DATE_LANGUAGE轉換為字符

  2)SELECT中,oracle會(huì )將查詢(xún)到的數據類(lèi)型自動(dòng)轉換為目標變量的類(lèi)型。

  3)對數值類(lèi)型的操作,oracle經(jīng)常調整其精度precision和刻度scale,允許最大容量。

  4)當比較字符和數值的時(shí)候,數值有更高的優(yōu)先級,講字符轉化為數值進(jìn)行比較。

  5)字符類(lèi)型(可轉換成數值),number類(lèi)型與浮點(diǎn)數類(lèi)型轉換,可能會(huì )丟失精度,數值和number以十進(jìn)制表示數字,浮點(diǎn)數以二進(jìn)制表示。

  6)講clob轉換為字符類(lèi)型(varchar2),獲獎blob轉換成raw類(lèi)型的時(shí)候,被轉換的類(lèi)型長(cháng)度長(cháng)的話(huà),會(huì )出錯。

  7)binary_float自動(dòng)轉換為binary_double是準確的,反之不準確。binary_double>binary_float>number

  8)字符串與date類(lèi)型比較,date具有較高優(yōu)先級,將字符串轉化為date類(lèi)型,需要上下文的支持。

  9)當使用sql函數或操作符時(shí)候,傳入類(lèi)型和實(shí)際接收的類(lèi)型不一致,會(huì )將傳入的類(lèi)型根據需要轉化為一致。

  10)賦值運算=的時(shí)候,oracle會(huì )將右邊被賦值的類(lèi)型轉化為何左邊類(lèi)型一致的類(lèi)型。

  11)在做連接操作的時(shí)候,oracle會(huì )將飛字符類(lèi)型轉化為字符類(lèi)型,根據上下文轉換。

  12)在字符和非字符之間的算術(shù)和比較運算中,oracle會(huì )將字符轉換成日期,rowid、數值類(lèi)性,算術(shù)操作轉化為數值,rowid比較的將字符轉化為rowid,日期比較的轉化為日期類(lèi)型。

  13)字符類(lèi)型將的類(lèi)型轉換,char,varchar,nchar,nvaechar2,nchar和nvarchar2需要國家字符集utf8和al16utf16的支持,按字符存儲的。char,varchar2手數據庫默認字符機支持

  14)sql字符函數可以接受clob類(lèi)型,substr,instr,對不接受clob類(lèi)型的自動(dòng)轉換為字符類(lèi)型

  15)空格

  10:if的順序,入參越是頻繁調用的值,對應的if邏輯越需要靠前,條件靠前可以減少判斷的次數。

  11:設計開(kāi)發(fā)對列是否為空慎重決定,null會(huì )影響oracle的執行計劃。索引能回答問(wèn)題時(shí),非空索引能用上全索引掃描提高性能。

  空索引會(huì )導致count(*)記錄出錯

  索引列不可能為空,不要加is not null的check

  Not in查詢(xún)中,空值會(huì )限制unnest轉換,導致優(yōu)化器無(wú)法選擇anti算法,走抵消的filter

  Oracle 如果是not exists或exists和類(lèi)似group by子句連用,cbo不做查詢(xún)轉換,會(huì )慢,改成not in或in

  12:不要對列運算

  Select * from a where trunk(log_time)=to_date(‘2013-09-01’,’yyyy-mm-dd’);

  分析執行計劃

  一般,每獲取一行開(kāi)銷(xiāo)5個(gè)以下的邏輯讀是接收的范圍

  Sql>set autotrace traceonly

  Sql>sql clause

  關(guān)注: consistent gets

  Rows processed

  聚合函數sum,count以返回的記錄數量為rows processed

  使用鎖定

  1:執行DML前,先執行 SELECT+ FOR UPDATE NOWAIT來(lái)判斷自己能否加上鎖。

  2:在select+for update nowait失敗后,立即退出不執行后續更新語(yǔ)句,通過(guò)自定義異常來(lái)讓后面的語(yǔ)句不執行,在for update加不上鎖就退出,ooo4異常單獨捕獲。

  3:對插入為遇到重復記錄就插,重復不插。Dup_val_on_index異常來(lái)實(shí)現

  4:獲取機器ip,終端號,sid等信息

  select userenv(‘sessionid’) from dual;

  select userenv(‘terminal’) ) from dual;

  select Sys_context(‘userenv’,’ip_aaddress’) ) from dual;

  select Sys_context(‘userenv’,’current_user’) ) from dual;

  select sid from v$mystat where rownum=1;

【oracle數據庫開(kāi)發(fā)規范具體條件】相關(guān)文章:

Oracle數據庫SELECT語(yǔ)句03-27

oracle數據庫基本語(yǔ)句02-08

Oracle數據庫語(yǔ)句大全12-21

Oracle數據庫認證層次03-09

Oracle數據庫基本知識03-31

ORACLE數據庫操作基本語(yǔ)句03-06

oracle數據庫培訓課程大綱03-21

oracle數據庫基礎知識01-21

Oracle 數據庫查詢(xún)小技巧03-21

激情欧美日韩一区二区,浪货撅高贱屁股求主人调教视频,精品无码成人片一区二区98,国产高清av在线播放,色翁荡息又大又硬又粗视频