




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、武漢東浦信息技術(shù)有限公司 數(shù)據(jù)庫編碼規(guī)范公司名稱:Dawnpro Information & Technologies, Ltd 2011年6月17日地址: 郵編: 電話: 傳真: 手機: E-mail: 網(wǎng)址: 目錄目錄2文檔控制4文檔說明51. 書寫規(guī)范61.1 大小寫風格71.1.1 所有數(shù)據(jù)庫關(guān)鍵字和保留字使用大寫,其他使用小寫71.1.2 允許所有數(shù)據(jù)庫代碼統(tǒng)一使用小寫71.2 縮進風格81.2.1 程序塊采用縮進風格書寫81.2.2 使用空格,不允許使用TAB 鍵81.2.3 同一條語句占用多行時,每行的第一個關(guān)鍵字應(yīng)當左對齊81.2.4 同一部分內(nèi)容,多行表達時縮進81.2.5
2、復雜SQL的多層嵌套縮進方式81.3 空格及換行111.3.1不允許把多個語句寫在一行中,即一行只寫一條語句111.3.2 避免將SQL 語句寫到同一行,再短的語句也要在關(guān)鍵字和謂詞處換行111.3.3相對獨立的程序塊之間加空行111.3.4 超長語句的換行121.3.5 begin、end 獨立成行121.3.6 if 后的條件要用括號括起來,括號內(nèi)每行最多兩個條件121.3.7不同類型的操作符混合使用時,使用括號進行隔離,以使代碼清晰122注釋規(guī)范142.1 一般性注釋152.1.1 注釋盡可能簡潔,清晰152.1.2 創(chuàng)建每一數(shù)據(jù)庫對象時都要加上COMMENT ON注釋152.1.3 注
3、釋語法包含兩種情況:單行注釋、多行注釋152.2 函數(shù)/過程文本注釋162.2.1 一般情況下,源程序有效注釋量須在30%以上162.2.2 統(tǒng)一文件頭的注釋162.2.3 所有變量定義需要加注釋,說明該變量的用途和含義172.2.4 注釋內(nèi)容要清晰、明了、含義準確,防止注釋二義性172.2.5 在注釋中不要使用縮寫,特別是不常用的縮寫172.2.6 對代碼的修改,都需要注釋172.2.7 對程序分支必須書寫注釋172.2.8在代碼的功能、意圖層次上進行注釋,提供有用、額外的信息172.2.9 注釋應(yīng)與其描述的代碼相鄰182.2.10 注釋與所描述的內(nèi)容進行同樣的縮排182.2.11注釋上面的
4、代碼應(yīng)空行隔開182.2.12 在塊的每個主要部分之前添加注釋182.2.13 在塊和過程的開頭注釋中還可以增加要訪問的數(shù)據(jù)庫等信息182.2.14 避免在一行代碼或表達式的中間插入注釋182.2.15在程序塊的結(jié)束行右方加注釋,以表明程序塊結(jié)束182.2.16 注釋用中文書寫182.2.17 復用代碼需要說明183程序編寫規(guī)范193.1 日常語法規(guī)范203.1.1 避免隱式的數(shù)據(jù)類型轉(zhuǎn)換203.1.2 使用is null 或is not null 或nvl 函數(shù)判斷變量是否為空203.1.3 避免使用非常復雜的SQL語句203.1.4 盡可能地使用相關(guān)表字段的類型定義,形如%type、%ro
5、wtype203.1.5 存儲過程中變量的聲明應(yīng)集中在as 和begin 關(guān)鍵字之間213.1.6 使用varchar2 代替varchar 類型213.1.7 當存儲過程有多個分支返回時,若有事務(wù),需確保各個分支都結(jié)束了事務(wù)213.1.8 采用成熟、穩(wěn)定、可靠的技術(shù)來編碼213.1.9 原則上不要使用動態(tài)sql,如果非得使用運態(tài)sql,須綁定變量213.1.10 盡量不要使用子函數(shù)方式實現(xiàn)存儲過程,應(yīng)分別定義213.1.11 代碼中不建議使用goto 語句223.1.12 確保所有的變量和參數(shù)都被使用223.2 常用SQL 語句的編寫規(guī)范233.2.1 create語句233.2.2 sel
6、ect語句233.2.3 insert語句243.2.4 update語句253.2.5 delete語句253.3 條件執(zhí)行語句編寫規(guī)范273.3.1 case when條件語句273.3.2 if語句編寫273.4 循環(huán)語句編寫規(guī)范283.4.1 簡單循環(huán)語句283.4.2 FOR循環(huán)語句283.4.3 WHILE循環(huán)語句283.5 函數(shù)文本(存儲過程、函數(shù)和包等)293.6 游標使用304其它規(guī)范314.1 異常處理324.1.1 異常類型324.1.2 異常聲明324.1.3 異常拋出324.1.4 異常捕獲334.2 腳本規(guī)范344.2.1 所有腳本按內(nèi)容分開存放,并按以下順序使用3
7、44.2.2 創(chuàng)建每類對象腳本的首部應(yīng)該有注釋344.2.3 每個存儲過程(函數(shù))單獨創(chuàng)建腳本,方便在項目配置庫中的管理344.3 數(shù)據(jù)庫設(shè)計354.3.1一般表設(shè)計354.3.2 特殊表設(shè)計原則354.3.3索引設(shè)計原則354.3.4完整性設(shè)計原則354.3.5觸發(fā)器354.3.6視圖設(shè)計36文檔控制文檔更新記錄日期更新人版本備注文檔審核記錄日期審核人職務(wù)備注Kon文檔去向記錄拷貝份數(shù)接受人職務(wù)備注文檔說明v 本文檔規(guī)定了在使用數(shù)據(jù)庫SQL語言進行信息處理時的編碼規(guī)范。v 通過數(shù)據(jù)庫編碼規(guī)范的執(zhí)行,使數(shù)據(jù)庫的開發(fā)規(guī)范化、標準化,便于閱讀、理解和繼承,提高開發(fā)質(zhì)量和效率。v 本文檔的閱讀對象為
8、公司從事軟件項目的員工。v 本文檔以O(shè)racle數(shù)據(jù)庫為樣本,有些具體方法和規(guī)定只對該數(shù)據(jù)庫有效。v 本文檔是數(shù)據(jù)庫開發(fā)標準的一部分,后續(xù)將視情況推出其他規(guī)范內(nèi)容文檔依據(jù)本文檔是公司項目組多年工作經(jīng)驗的總結(jié),集聚了公司全體軟件開發(fā)人員的經(jīng)驗、知識和智慧。文檔目的采用一種一致的、可預(yù)見的方式建立PLSQL程序代碼,能使代碼更易于調(diào)試和維護;更易于發(fā)現(xiàn)問題的根源、分析代碼的依賴性等。編碼規(guī)范主要體現(xiàn)在注釋、代碼的結(jié)構(gòu)、異常處理等。1. 書寫規(guī)范 1.1 大小寫風格1.1.1 所有數(shù)據(jù)庫關(guān)鍵字和保留字使用大寫,其他使用小寫示例: SELECT header_idFROM po_headers;DEC
9、LARE v_count PLS_INTEGER;1.1.2 允許所有數(shù)據(jù)庫代碼統(tǒng)一使用小寫示例:select header_id from po_headers;declare v_count pls_integer;1.2 縮進風格1.2.1 程序塊采用縮進風格書寫為了保證代碼清晰易讀,風格一致,縮進格數(shù)統(tǒng)一為4 個字符。1.2.2 使用空格,不允許使用TAB 鍵以免用不同的編輯器閱讀程序時,因TAB 鍵所設(shè)置的空格數(shù)目不同而造成程序布局不整齊。1.2.3 同一條語句占用多行時,每行的第一個關(guān)鍵字應(yīng)當左對齊示例:select field1, field2,from t_tablenamew
10、here field1 1and filed2 1 and field4 sysdate and (field2 3 or field3 = 5) 1.2.5 復雜SQL的多層嵌套縮進方式復雜SQL的多層嵌套,同層保持左對齊,不同層之間縮進,體現(xiàn)清晰的層次關(guān)系。示例:insert into to_scm_demandplan(id, xqbb, xqdw, xqlb, xqpch, cxmc1, cxmc2, cjlb, clys, ddysname, resourcecolor, resourcecolorname, clsx, gnwqf, dph, bz1, ddh,ddhh, repl
11、ycreatetime, bz2, flag, batchid, createtime, updatetime, deleteflag, xqxz, replytime, planintime)select seq_to_scm_demandplan.nextval, temp_xqbb, 3000, 1, d.demandbatch, d.sellcar, ducemark, d.cjlb, d.ddyscolor, d.ddyscolorname, d.resourcecolor, d.resourcecolorname, d.carproperty, d.country, d.
12、underpan, d.remark1, d.orderid, d.orderdetailid, d.replycreatetime, , , , sysdate, sysdate, 0, 2, d.replytime, d.planintimefrom (select r.demandbatch, r.sellcar, ducemark, 10 cjlb, o.colorcode ddyscolor, o.color ddyscolorname, r.color resourcecolor, r.colorname resourcecolorname, r.carproperty,
13、 r.country, r.underpan, q.remark1, o.ordercode orderid, o.rowno orderdetailid, o.replycreatetime, o.replytime, r.planintimefrom to_resource r, to_orderqueue q, (select o.ordercode, q.rowno, o.colorcode, o.color, q.remark1, r.createtime replycreatetime, q.isscmreply, r.replytimefrom to_order o, to_or
14、derqueue q, to_orderreply rwhere o.ordercode = q.ordercode and o.ordercode = r.ordercode and q.rowno = r.rowno and o.deleteflag = 0 and q.deleteflag = 0 and r.deleteflag = 0 and r.status = 1 and q.status 4 and isscmreply in (1, 2, 4) owhere r.orderid = q.ordercode(+) and r.orderdetailid = q.rowno(+)
15、 and r.deleteflag = 0 and r.planintime =fn_getday_aftersomedays(to_char(sysdate, YYYY-MM-DD), to_number(fn_getsysparam(n_day), 0)and r.planintime trunc(sysdate) thenselect duty_namefrom sm_dutywhere duty_id = :duty_id;end if;應(yīng)寫成:v_duty_id := 1;if trunc(nvl(disabled_date, sysdate + 1) trunc(sysdate)
16、thenselect duty_namefrom sm_dutywhere duty_id = :duty_id;end if;1.3.4 超長語句的換行超過110 列的語句要分行書寫,長表達式應(yīng)在低優(yōu)先級操作符處換行,操任符或關(guān)鍵字放在新行之首。劃分出新行應(yīng)當適當?shù)乜s進,使排版整齊,語句可讀。示例:以下不符合規(guī)范110 列v1 = s1 + + (a * b * c * d) + (e * f) + 應(yīng)寫成:110 列v1 = s1 + + (a * b * c * d)+ (e * f) + 說明:A. 加法的優(yōu)先級低于乘法,因此應(yīng)在加號處折行;B. 兩組乘法雖然在邏輯上會優(yōu)先于加法,但加
17、上括號使可讀性更強。1.3.5 begin、end 獨立成行示例:以下不符合規(guī)范begin null; exception when others then null; end;應(yīng)寫成:beginnull;exceptionwhen others thennull;end;1.3.6 if 后的條件要用括號括起來,括號內(nèi)每行最多兩個條件示例:if (v_count = 1 or v_count = 2or v_count = 5 or v_count = 6) thenselect sysdateinto v_datefrom dual;end if;1.3.7不同類型的操作符混合使用時,使用
18、括號進行隔離,以使代碼清晰示例:以下書寫不符合規(guī)范:if abc|def = abcdef thennull;end if;應(yīng)寫成:if (abc|def) = abcdef thennull;end if;2注釋規(guī)范2.1 一般性注釋2.1.1 注釋盡可能簡潔,清晰2.1.2 創(chuàng)建每一數(shù)據(jù)庫對象時都要加上COMMENT ON注釋以說明該對象的功能和用途;建表時,對某些數(shù)據(jù)列也要加上COMMENT ON注釋,以說明該列和/或列取值的含義。如:XX 表中有CZZT列屬性為NUMBER(10, 0)可加COMMENT ON 注釋如下COMMENT ON COLUMN XX.CZZT IS 0 =
19、正常, 1 = 等待, 2 = 超時, 3 = 登出2.1.3 注釋語法包含兩種情況:單行注釋、多行注釋單行注釋:注釋前有兩個連字符(-),一般對變量、條件子句可以采用該類注釋。多行注釋:符號/*和*/之間的內(nèi)容為注釋內(nèi)容。對某項完整的操作建議使用該類注釋。2.2 函數(shù)/過程文本注釋2.2.1 一般情況下,源程序有效注釋量須在30%以上注釋的原則是有助于對程序閱讀理解,在該加的地方都加了,注釋不宜太多也不能太少,注釋語言須準確、易懂、簡潔。2.2.2 統(tǒng)一文件頭的注釋示例:使用以下書寫規(guī)范:/* name: sm_insert_user_f* purpose:向sm_users 表中寫入一條記
20、錄* revsions:* ver date author description* 1.0.0 2006.10.01 Tang 1.創(chuàng)建此存儲過程* 1.0.1 2006.12.01 Tang 1.增加hint* 2. * 1.2.0 2007.01.01 Tang 1.增加傳入?yún)?shù)* parameters:* p_user_name in varchar2 新增用戶名* p_password in varchar2 新增用戶的加密密碼* p_diabled_date in date 新增用戶的過期時間* p_created_by in number 新增用戶的操作人* p_password
21、_cyle in number 密碼更改周期* o_message out varchar2 執(zhí)行異常時返回的錯誤信息* return:* 0 成功* -1 失敗* notes:* 1.本函數(shù)在前臺調(diào)用,系統(tǒng)后臺會自動地為last_updated_by、* last_update_date、creation_date 賦值.*/說明:Name:函數(shù)或過程的名稱Purpse:函數(shù)或過程的用途Revisions: 版本信息Ver:當前版本Date:創(chuàng)建或修改日期Author:創(chuàng)建人或修改人Description:在修改時,一定要在這里寫出改動的內(nèi)容,用1、2、3 清晰列出來Parameters:對
22、傳入和傳出參數(shù)進行說明return:函數(shù)返回結(jié)果notes:使用該函數(shù)或過程時需要特別注意的事情,如果沒有可以不寫2.2.3 所有變量定義需要加注釋,說明該變量的用途和含義說明該變量要用作什么通常,簡單使用單行注釋就行了例如:l_sfzh CHAR(11) -身份證號碼2.2.4 注釋內(nèi)容要清晰、明了、含義準確,防止注釋二義性2.2.5 在注釋中不要使用縮寫,特別是不常用的縮寫在使用縮寫時或之前,應(yīng)進行必要的說明2.2.6 對代碼的修改,都需要注釋通過注釋,標明修改的開始行、結(jié)束行,并保留修改前的代碼在注釋中還要記錄修改原因、修改人、修改日期等內(nèi)容2.2.7 對程序分支必須書寫注釋這些語句往往
23、是程序?qū)崿F(xiàn)某一特定功能的關(guān)鍵,對于維護人員來說,良好的注釋幫助更好的理解程序,有時甚至優(yōu)于看設(shè)計文檔。2.2.8在代碼的功能、意圖層次上進行注釋,提供有用、額外的信息注釋目的是解釋代碼的目標、功能和采用的方法,通過注釋提供的信息,幫助理解代碼,而不要提供重復雜、無用的注釋。示例:以下代碼注釋意義不大。-v_count = 0if v_count = 0而如下的注釋則給出了額外有用的信息。v_count := sm_insert_user(p1,p2,p2);-調(diào)用其它過程執(zhí)行成功if v_count = 0 then2.2.9 注釋應(yīng)與其描述的代碼相鄰對代碼注釋應(yīng)放在其上方或右方(對單條語句的
24、注釋)相鄰位置,不可放在被描述代碼行的下方。示例:以下編碼不符合本規(guī)范:select user_name, disabled_date into v_user, v_disabled_date from sm_users su where su.user_id = p_user_id;-取得用戶的失效時間應(yīng)該如下書寫:-取得用戶的失效時間Select user_name, disabled_dateInto v_user_name, v_disabled_datefrom sm_users suwhere su.user_id = p_user_id;2.2.10 注釋與所描述的內(nèi)容進行同樣的
25、縮排2.2.11注釋上面的代碼應(yīng)空行隔開2.2.12 在塊的每個主要部分之前添加注釋在塊的每個主要部分之前增加注釋,解釋下組語句目的,最好是說明該段語句及算法的目的以及要得到的結(jié)果,但不要對其細節(jié)進行過多的描述,注釋盡量不要破壞代碼的結(jié)構(gòu)。2.2.13 在塊和過程的開頭注釋中還可以增加要訪問的數(shù)據(jù)庫等信息2.2.14 避免在一行代碼或表達式的中間插入注釋2.2.15在程序塊的結(jié)束行右方加注釋,以表明程序塊結(jié)束2.2.16 注釋用中文書寫2.2.17 復用代碼需要說明3程序編寫規(guī)范3.1 日常語法規(guī)范3.1.1 避免隱式的數(shù)據(jù)類型轉(zhuǎn)換在書寫代碼時,必須確定表的結(jié)構(gòu)和表中各個字段的數(shù)據(jù)類型,避免在
26、賦值和條件比較時出現(xiàn)隱性的數(shù)據(jù)類型轉(zhuǎn)換。示例:以下代碼不符合規(guī)范,status_type 是number 型數(shù)據(jù).select wdj.wip_entity_idfrom wip.wip_discrete_jobs wdjwhere wdj.status = 3;應(yīng)如下書寫:select wdj.wip_entity_idfrom wip.wip_discrete_jobs wdjwhere wdj.status = 3;3.1.2 使用is null 或is not null 或nvl 函數(shù)判斷變量是否為空示例:以下代碼不符合規(guī)范if v_user_name = null thendbms_
27、output.put_line(user name is null);end if;應(yīng)該如下書寫:if v_user_name is null thendbms_output.put_line(user name is null);end if;3.1.3 避免使用非常復雜的SQL語句對于非常復雜的sql(特別是多層嵌套,帶子句或相關(guān)的查詢),應(yīng)該先考慮是否設(shè)計不當引起的,對于一些非常復雜的sql 可以考慮使用程序?qū)崿F(xiàn),原則上遵循一句話只做一件事情。3.1.4 盡可能地使用相關(guān)表字段的類型定義,形如%type、%rowtype1、可以使用”%TYPE”屬性而不是將變量類型硬性編碼。例如:DEC
28、LAREv_FirstName students.first_name%TYPE;通過使用%TYPE,v_FirstName變量將同students表的first_name列的類型相同(可以理解為將兩者綁定起來)。每次匿名塊或命名塊運行該語句塊以及編譯存儲對象(過程、函數(shù)、包、對象類和觸發(fā)器)時,就會確定該類型。2、在PL/SQL中將一個記錄聲明為具有相同類型的數(shù)據(jù)庫行的作法是很常見的。PL/SQL提供了%ROWTYPE運算符,使得這樣的操作更為方便。例如:DECLAREv_StudentRecord students%ROWTYPE;將定義一個記錄,該記錄中的字段將與students表中的列
29、相對應(yīng)。例如:Declarev_jobs %rowtype;beginselect * into v_jobsfrom where job_id =&aa;dbms_output.put_line(序號|v_jobs.job_id );dbms_output.put_line(名稱|v_jobs.job_title);end;執(zhí)行,我們輸入aa變量的值:AD_VP輸出結(jié)果為:序號AD_VP名稱Administration Vice President3.1.5 存儲過程中變量的聲明應(yīng)集中在as 和begin 關(guān)鍵字之間不要在代碼中隨意定義變量,定義變量時,完成相同功
30、能模塊的變量應(yīng)放在一起,不同模塊的變量應(yīng)空行隔開,增加代碼的可讀性。3.1.6 使用varchar2 代替varchar 類型3.1.7 當存儲過程有多個分支返回時,若有事務(wù),需確保各個分支都結(jié)束了事務(wù)3.1.8 采用成熟、穩(wěn)定、可靠的技術(shù)來編碼對于先進的技術(shù)或沒有成熟的技術(shù)使用,需在team 內(nèi)進行評審。3.1.9 原則上不要使用動態(tài)sql,如果非得使用運態(tài)sql,須綁定變量3.1.10 盡量不要使用子函數(shù)方式實現(xiàn)存儲過程,應(yīng)分別定義3.1.11 代碼中不建議使用goto 語句3.1.12 確保所有的變量和參數(shù)都被使用聲明變量也要一定的系統(tǒng)開銷,不要定義沒有使用的變量、參數(shù)。3.2 常用SQ
31、L 語句的編寫規(guī)范3.2.1 create語句create table dft_dksz(YHBS VARCHAR2(20) not null, ZHGX DATE, DKKHD VARCHAR2(24), CONSTRAINT pk_dksz_yhbs primary key (YHBS) )tablespace xxx3.2.2 select語句查詢語句采用以下原則編寫(可最大化重用共享池中的SQL 語句,提高應(yīng)用程序性能)v 將select 語句分為5部分:(1) 由select 開頭,后跟一個顯示查詢結(jié)果的列表;(2) 由from 開頭,后跟一個或多個獲取數(shù)據(jù)所涉及的表;(3) 由wh
32、ere 開頭,后跟一個或多個確定所需值的條件;(4) 由group by開頭,后跟一個或多個表列名,通過這些列以對查詢結(jié)果進行匯總;(5) 由order by開頭,后跟一個或多個表列名,通過這些列以對查詢結(jié)果進行排序。v 每個部分分行編寫,將每一行的第一個關(guān)鍵字與第一行的select左對齊,如select col1, col2, col3 from table1 where col1 col2 group by col1, col2 order by col1;v 語句中嵌入逗號時,在逗號后面加一空格,當逗號是最后一個字符時,把它放在本行v 當語句的同一部分要延續(xù)到下一行時,按下列格式排列:s
33、elect col1, col2, col3, col4, col5, col6, col7, col8, col9, col10v 將語句中where 和and 部分格式化,書寫布局類似于where andandv 當語句中出現(xiàn)括號時,括號的兩邊不留空格v 在SQL 語句使用運算符時,操作兩邊應(yīng)各留一個空格,如where X = Y and A = B and C = D3.2.3 insert語句insert into (, , , , , ,., , ) values (, , , , , ,., , )不規(guī)定每行要賦值的字段個數(shù),但是每行字段數(shù)和與其對應(yīng)的賦值行的賦值個數(shù)相同。3.2.
34、4 update語句update set = , = , 3.2.5 delete語句delete from table1 where col1 = ?3.3 條件執(zhí)行語句編寫規(guī)范3.3.1 case when條件語句v case when 條件語句多用于統(tǒng)計和計算語句中。v case when等關(guān)鍵字在每行的開頭,并對齊顯示。v 例如 case 運算式when 運算式 then 運算式when 運算式 then 運算式else 運算式end;case when 條件表達式 then 運算式when 條件表達式 then 運算式else 運算式end;3.3.2 if語句編寫v if 條件語句
35、多用于邏輯判斷中。v if等關(guān)鍵字在每行的開頭,并對齊顯示。v ifelse 語句可以嵌套,為提高代碼的可讀性,嵌套層次不應(yīng)多于5 層。當嵌套層次太多時應(yīng)考慮使用CASE 語句。v 例如if 條件表達式 thenelseif 條件表達式 thenelseend if;3.4 循環(huán)語句編寫規(guī)范3.4.1 簡單循環(huán)語句LOOP EXIT WHEN END LOOP;3.4.2 FOR循環(huán)語句FOR 變量 IN 變量取值范圍LOOP END LOOP;3.4.3 WHILE循環(huán)語句WHILE LOOP END LOOP;3.5 函數(shù)文本(存儲過程、函數(shù)和包等)v 對于存儲過程、函數(shù)等程序塊都要有異常
36、處理部分,在異常部分的最后都要設(shè)置OTHERS異常情態(tài)處理器,以提高程序的自檢能力,格式如下:BEGIN EXCEPTION WHEN excepname1 THENWHEN excepname2 THEN WHEN OTHERS THEN END;v 對于子程序、觸發(fā)器、包等帶名的程序塊,要使用結(jié)束標識,如CREATE OR REPLACE PROCEDURE XXXsp_XXX IS BEGIN END XXXsp_XXX;/* 此處的過程名XXXsp_XXX是可選的,規(guī)范要求寫上,與塊開始的CREATE相對應(yīng) */3.6 游標使用使用游標批量,一般需要經(jīng)過declare(定義),open
37、(打開),fetch(取出游標所指的記錄),loop fetch(循環(huán)讀取游標),close and deallocate(關(guān)閉和釋放) 五個步驟。v 游標定義游標定義通常在存儲過程begin之前,定義臨時變量后定義CURSOR。cursor cur_order is select from where ;cur_row_order cur_order%rowtype;v 打開游標open cur_order;v 取出游標記錄fetch cur_order into cur_row_order;v 循環(huán)讀取游標while cur_order %found loopfetch cur_order
38、 into cur_row_order;end loop;v 關(guān)閉釋放游標close cur_order;4其它規(guī)范4.1 異常處理4.1.1 異常類型異常分為內(nèi)部定義和用戶自定義,內(nèi)部定義異常有預(yù)定義的名稱,明細描述見下表:異常名稱(exception)異常代碼(Sqlcode)異常描述(Sqlerrm)ACCESS_INTO_NULLORA-06530程序嘗試為一個未初始化對象的屬性賦值CASE_NOT_FOUNDORA-06592CASE語句中沒有任何WHEN子句滿足條件,并且沒有編寫ELSE子句COLLECTION_IS_NULLORA-06531程序嘗試調(diào)用一個未初始化(自動賦為nu
39、ll)嵌套表或變長數(shù)組的集合方法(不包括EXISTS),或者是程序嘗試為一個未初始化嵌套表或變長數(shù)組的元素賦值CURSOR_ALREADY_OPENORA-06511程序嘗試打開一個已經(jīng)打開的游標。一個游標在重新打開之前必須關(guān)閉。DUP_VAL_ON_INDEXORA-00001程序嘗試向一個有著唯一約束條件的數(shù)據(jù)庫字段中保存重復值INVALID_CURSORORA-01001程序嘗試操作一個不合法的游標 INVALID_NUMBERORA-01722字符串向數(shù)字轉(zhuǎn)換時會發(fā)生錯誤。NO_DATA_FOUNDORA-01403SELECT INTO語句沒有返回數(shù)據(jù)ROWTYPE_MISMATCH
40、ORA-06504賦值語句中使用的主游標變量和PL/SQL游標變量的類型不兼容。STORAGE_ERRORORA-06500運行時內(nèi)存溢出或內(nèi)存不足SUBSCRIPT_BEYOND_COUNTORA-06533程序引用一個嵌套表或變長數(shù)組元素,但使用的下標索引超過嵌套表或變長數(shù)組元素總個數(shù)TOO_MANY_ROWSORA-01422SELECT INTO語句返回多行數(shù)據(jù)VALUE_ERRORORA-06502發(fā)生算術(shù)、轉(zhuǎn)換、截位或長度約束錯誤ZERO_DIVIDEORA-01476除數(shù)為0自定義異常:對于其他的內(nèi)部異常,可以在存儲過程、子程序或包的聲明部分自定義異常,用戶自定義異常必須有一個名
41、字。4.1.2 異常聲明異常只能在PL/SQL塊、子程序或包的聲明部分聲明,異常不能出現(xiàn)在賦值語句或SQL語句中例子:DECLARE exp_noorder EXCEPTION;4.1.3 異常拋出錯誤發(fā)生時,異常就會被拋出,正常的執(zhí)行語句會被終止,控制權(quán)被轉(zhuǎn)到PL/SQL塊的異常控制部分或子程序的異??刂撇糠?。內(nèi)部異常會由系統(tǒng)隱式地拋出,而用戶定義異常用RAISE語句拋出。RAISE語句也可以拋出預(yù)定義異常,異常被拋出時,如果在當前塊或子程序中沒有找到對應(yīng)的異??刂瞥绦?,異常就會被繼續(xù)向上一級傳遞。否則異常直接在子程序中被捕獲無法傳遞到上一級程序。例子:BEGINIF THEN RAISE
42、exp_noorder; 拋出自定義異常end if;EXCEPTIONWHEN exp_noorder THEN 捕獲異常END;4.1.4 異常捕獲異常處理程序用于捕獲拋出的異常。異??刂瞥绦蜻\行后,當前塊就會停止執(zhí)行,直接運行異常處理程序。異常處理程序執(zhí)行完畢后,子程序?qū)⒔Y(jié)束運行。異常處理程序由WHEN子句和語句序列組成。WHEN子句與拋出異常相匹配時,相關(guān)語句序列會被執(zhí)行。OTHERS處理器可以捕獲所有未命名的異常塊或子程序,在一場處理程序里只能有一個OTHERS處理器,因為OTHERS處理器能夠保證所有的異常都會被控制。在異常處理程序中,通常使用內(nèi)置函數(shù) SQLCODE和SQLERRM獲取異常信息。對于內(nèi)部異常,SQLC
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度機關(guān)單位食堂員工激勵與保障合同
- 母公司對子公司2025年度管理費用審核及支付合同
- 2025年度餐廳員工勞務(wù)及餐飲企業(yè)員工績效管理合同
- 二零二五年度酒店培訓投資入股合同
- 2025年度綜合性托育園入托服務(wù)與營養(yǎng)膳食管理合同
- 恒豐銀行總行金融科技部2023年社會招聘7人參考題庫附答案解析
- 2025年曲靖年貨運從業(yè)資格證考試答案
- 大學班長發(fā)言稿
- 2025年玉林貨運資格證考試有哪些項目
- 規(guī)劃實習生崗位實習協(xié)議
- GB∕T 7588.1-2020 電梯制造與安裝安全規(guī)范 第1部分:乘客電梯和載貨電梯
- 4.昆蟲備忘錄 課件(共15張PPT)
- DB37∕T 5191-2021 高延性混凝土加固技術(shù)規(guī)程
- 2022年全省公訴業(yè)務(wù)知識考試參考答案
- 鎮(zhèn)政府(街道辦事處)辦公大樓平面圖
- 軟壓光機計算說明
- 森林防火安全責任書(施工隊用)
- 水庫應(yīng)急搶險與典型案例分析
- (完整版)一致性聲明模版
- 優(yōu)秀教研組展示(課堂PPT)
- 楊欽和教授-中西醫(yī)結(jié)合治療慢性肝病的體會
評論
0/150
提交評論