青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

pl/sql 提供了強(qiáng)大而靈活的手段來(lái)捕捉和處理程序產(chǎn)生的異常,從而使 oracle 的用戶遠(yuǎn)離一些令人煩惱的 bug

?

異常定義

?

在一個(gè)異常產(chǎn)生、被捕獲并處理之前,它必須被定義。 Oracle 定義了幾千個(gè)異常,絕大多數(shù)只有錯(cuò)誤編號(hào)和相關(guān)描述,僅僅命名了若干個(gè)最常被用到的異常。這些名字被儲(chǔ)存在 STANDARD UTL_FILE DBMS_SQL 這幾個(gè)系統(tǒng)包中,詳情請(qǐng)見(jiàn) oracle:pl/sql 異常處理( 1 )。

出自之外的絕大多數(shù)異常需要程序員命名。有 2 種命名異常的方法:

?

1 :聲明一個(gè)自定義異常

STANDARD 中的命名了的異常基本山是與系統(tǒng)的錯(cuò)誤相關(guān)的(當(dāng)然那些只有 errorcode 的異常也是這樣),但在實(shí)際的應(yīng)用中我們經(jīng)常需要與特定的應(yīng)用程序相關(guān)的異常,由程序員聲明的異常就是用于處理這種情況的。

Oracle 異常處理模塊的方便的地方在于,它并沒(méi)有區(qū)別對(duì)待自定義的與預(yù)定義的異常。這使得我們可以像對(duì)待預(yù)定義異常一樣,捕捉和處理自定義異常,只是在此之前需要聲明它;同時(shí)對(duì)于一個(gè)自定義的異常,我們需要用 RAISE 來(lái)手動(dòng)產(chǎn)生。

下面是一個(gè)聲明的例子:

?????? procedure calc_ammul_sales

?????? ?????? (company_id_in in company.company_id%tye)

?????? is

?????? ?????? invalid_company_id exception;

?????? ?????? negative_balance excrption;

?????? ?????? duplicate_company Boolean;

?????? begin

????????????? /*body of executable statement*/

?????? exception

????????????? when invalid_company_id

????????????? then /*handle exception*/

????????????? when no_data_found

????????????? then /*handle exception*/

?????? ?????? /*…..*/

?????? end;

需要注意的是處理定義的時(shí)候,只有兩個(gè)地方會(huì)出現(xiàn)自定義的異常:

ü???????? raise exception

ü???????? when exception then

?

2 :為非預(yù)定義異常關(guān)聯(lián)一個(gè)名字

僅僅 21 個(gè)預(yù)定義異常對(duì)我們來(lái)說(shuō)實(shí)在是太少了,還有幾千個(gè)異常只有 errorcode 和描述。另外,程序員也可以用 RAISE_APPLICATION_ERROR 定義一個(gè)含 errorcode 和描述的異常。

當(dāng)然,只用 errorcode 也可以很好地完成工作,只要你不擔(dān)心會(huì)忘了那串?dāng)?shù)字代表的意思就行。比方說(shuō) ;

?????? exception

????????????? when others

????????????? then

???????????????????? if sqlcode=-1843 then? /*sqlcode 是內(nèi)建的用于返回最近一次錯(cuò)誤編號(hào)的函數(shù) */

????????????? ?????? …..

這的確是一段讓人感到晦澀的代碼,還是給它關(guān)聯(lián)個(gè)名字吧。

我們要用到的是 pragma exception_init(exception,integer) ,然后就可以像對(duì)待預(yù)定義異常一樣對(duì)待它了,我是說(shuō)沒(méi)必要像上面的那種一樣用 raise Exception_init 是一個(gè)編譯時(shí)運(yùn)行的函數(shù),它只能出現(xiàn)在代碼的聲明部分,而異常名字必須在此之前被定義。下面用一個(gè)匿名過(guò)程舉個(gè)例子:

?????? declare

?????? ?????? invalid_company_id exception;

?????? ?????? pragma exception_init(invalid_company_id, -1834);

要注意的時(shí):

ü???????? 不可以用 -1403 no_data_found ),用 100 ,事實(shí)上 exception_init 中的 integer 對(duì)應(yīng)的是 sqlcode 返回的值。

ü???????? 不能為 0 ,不能大于 100 ,不能小于 -1000000

一個(gè)例子:

?????? procedure delete_company(company_id_in in number)

?????? is

?????? ?????? still_have_emplyee exception;

?????? ?????? pragma exception(still_have_employee, -2293);

?????? begin

????????????? delete from compamy

????????????? where company_id=company_id_in;

?????? exception

????????????? when still_have_employee

????????????? then dbms_output.put_line(‘delete employees for company first’);

?????? end;

在一下兩種情況下,我們有必要使用 exception_init

ü???????? 一個(gè)非預(yù)定義異常是經(jīng)常要被用到的。

ü???????? 我們將用 raise_applocation_error 產(chǎn)生了一個(gè)自定義的 errorcode 時(shí)。

一種簡(jiǎn)便的方法是將以上兩種情況中的異常定義在一個(gè)包中,這樣我們就沒(méi)有必要每次都重復(fù)定義了。

?????? Create or replace package dynsql

?????? Is

?????? ?????? Invalid_table_name exception;

?????? ?????? Pragma exception_init(invalid_table_name, -903);

?????? ?????? Invalid_column_name exception;

?????? ?????? Pragma exception_init(invalid_column_name, -904);

?????? ?????? En_too_young const number:=-200001;

?????? ?????? Exc_too_young exception;

?????? ?????? Pragma exception_init(exc_too_young, -20001);

?????? End;

有了上面這個(gè)包,就可以方便的處理異常了 ;

?????? procedure validate_emp(birthdate in date)

?????? is

?????? ?????? min_tear const pls_integer:=18;

?????? begin

????????????? if add_month(sysdate,min_year*12*-1)<birthdate_in

????????????? then

raise_application_error(dynsql.en_too_young, ‘employee must be’ || min_year ||‘old’);

????????????? end if;

?????? end;

除了 standard 包中的 21 個(gè)預(yù)定義異常外,還有一些包也定義了一些異常。但與 standard 包中異常不同的是,在使用這些異常時(shí),需要帶上包的名字。如:

?????? when dbms_lob.invalid_argval then ……

?

非常有用的一點(diǎn)是,可以在最外層的 pl/sql 塊的異常處理模塊中加入 others ,這樣就可以把從內(nèi)部傳遞出來(lái)的未被處理的剩余異常全部處理掉了。

?????? Exception

?????? When others

?????? ?????? Then ….

Posted on 2006-10-25 16:23 艾凡赫 閱讀(2717) 評(píng)論(0)  編輯 收藏 引用 所屬分類: ORACLE
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            午夜国产精品影院在线观看| 欧美国产日韩亚洲一区| 亚洲欧洲日本专区| 国产精品视频一二三| 欧美久久婷婷综合色| 久久精品视频免费播放| 亚洲欧美国产一区二区三区| 亚洲精品偷拍| 欧美激情视频一区二区三区免费 | 亚洲二区三区四区| 欧美在线高清视频| 亚洲性夜色噜噜噜7777| 亚洲精品美女在线| 亚洲国产美女精品久久久久∴| 国产亚洲精品激情久久| 国产精品丝袜91| 国产精品毛片| 欧美日韩在线免费| 欧美激情视频一区二区三区在线播放| 久久久久久久一区二区三区| 亚洲免费在线| 亚洲欧美日韩国产一区二区三区 | 中文有码久久| 亚洲另类视频| 亚洲精品在线电影| 91久久精品一区| 亚洲国产精品第一区二区三区 | 欧美国产亚洲另类动漫| 久久综合伊人77777麻豆| 久久激情综合网| 久久九九有精品国产23| 久久精品主播| 久久久久久久综合色一本| 久久久91精品国产一区二区精品| 久久不射电影网| 久久激情综合| 另类欧美日韩国产在线| 免费观看日韩| 亚洲第一福利视频| 最新国产精品拍自在线播放| 最新中文字幕亚洲| 99riav国产精品| 亚洲午夜精品17c| 亚洲男人的天堂在线| 欧美一区亚洲一区| 久久蜜桃资源一区二区老牛| 欧美 日韩 国产在线| 欧美精品久久99| 欧美视频一区二区三区| 国产精品久久久久久久久借妻| 国产精品美女一区二区在线观看| 国产精品视频yy9299一区| 国产日韩欧美自拍| 亚洲高清一区二区三区| 日韩一区二区精品| 午夜精品一区二区三区四区| 欧美一级成年大片在线观看| 久久天堂成人| 亚洲国产毛片完整版 | 欧美韩日一区二区| 亚洲精品永久免费| 午夜在线视频观看日韩17c| 久久精品首页| 欧美精品一区二区精品网| 国产精品卡一卡二| 在线看片日韩| 亚洲视频播放| 浪潮色综合久久天堂| 亚洲精品网址在线观看| 先锋影音国产精品| 欧美国产日韩亚洲一区| 国产毛片精品国产一区二区三区| 亚洲动漫精品| 亚洲欧美一级二级三级| 你懂的视频一区二区| 在线综合视频| 免费成人av在线看| 国产精品欧美风情| 亚洲欧洲一二三| 欧美在线视频网站| 最新国产拍偷乱拍精品| 欧美一区二区三区另类| 欧美美女操人视频| 伊人夜夜躁av伊人久久| 亚洲伊人第一页| 亚洲高清不卡在线观看| 欧美亚洲一区二区在线观看| 欧美精品一区二区在线播放| 精品二区视频| 欧美一区二区国产| 亚洲日韩视频| 久久亚洲高清| 国产精品一区免费视频| 日韩一二在线观看| 免费观看成人网| 午夜精品久久久久久久蜜桃app| 欧美精品一区在线观看| 狠狠综合久久| 性欧美精品高清| 亚洲欧洲一区二区三区| 久久嫩草精品久久久久| 国产日产欧美a一级在线| 亚洲午夜精品国产| 91久久国产自产拍夜夜嗨| 久久久久高清| 国内精品久久久久久久影视蜜臀| 亚洲在线播放电影| 日韩视频专区| 欧美精品久久久久久| 亚洲激情成人在线| 欧美本精品男人aⅴ天堂| 香蕉久久a毛片| 国产精品中文字幕欧美| 亚洲综合国产| 日韩一区二区精品葵司在线| 欧美大片免费看| 亚洲国产精品成人精品| 久久性色av| 久久国产精品久久精品国产| 国产日韩欧美一区二区三区四区| 午夜精品久久久久影视| 一区二区欧美激情| 欧美性做爰毛片| 亚洲综合国产激情另类一区| 一区二区三区四区五区在线 | 尤物九九久久国产精品的特点 | 国产日韩亚洲欧美| 亚洲欧美资源在线| 亚洲一区二区三区777| 国产精品久久久一区二区三区| 亚洲一区二区成人| 一区二区三区蜜桃网| 国产精品国产a级| 亚洲欧美韩国| 亚洲欧美一区二区在线观看| 国产精品一区视频| 久久精品综合网| 久久国产福利国产秒拍| 激情av一区| 欧美韩日一区二区| 欧美日韩国产限制| 亚洲欧美国产高清va在线播| 亚洲欧美成人| 激情亚洲网站| 免费观看日韩| 欧美精品偷拍| 亚洲一区日韩在线| 亚洲欧美春色| 在线成人国产| 亚洲欧洲日韩女同| 国产精品视频免费在线观看| 欧美专区18| 免费观看成人鲁鲁鲁鲁鲁视频| 亚洲乱码日产精品bd| 中文在线资源观看视频网站免费不卡| 国产精品美女主播| 久久乐国产精品| 欧美精品午夜视频| 欧美一区91| 久久综合狠狠综合久久综青草 | 亚洲专区在线| 精品99一区二区| 亚洲免费精彩视频| 国产一区二区三区视频在线观看 | 亚洲美女av电影| 亚洲女ⅴideoshd黑人| 在线观看日韩av先锋影音电影院| 亚洲欧洲一区二区在线观看| 国产精品日韩欧美一区二区| 欧美91精品| 国产精品va在线| 免费成人黄色片| 国产精品va在线| 欧美成黄导航| 国产精品视频免费| 亚洲国产精品一区二区三区| 国产精品私拍pans大尺度在线| 欧美91大片| 国产女主播视频一区二区| 欧美激情视频免费观看| 国产精品一级二级三级| 欧美国产日韩一区二区在线观看| 国产精品对白刺激久久久| 欧美高清在线视频| 国产女主播在线一区二区| 亚洲欧洲三级电影| 狠狠色香婷婷久久亚洲精品| 一本色道久久加勒比精品| 亚洲福利视频网| 午夜精品一区二区三区电影天堂| 亚洲精品一区二区三区婷婷月| 欧美一区二区三区久久精品| 在线亚洲精品福利网址导航| 久久婷婷国产综合国色天香| 久久高清国产| 欧美特黄一级| 亚洲日韩欧美视频一区| 在线精品视频免费观看| 亚洲欧美激情四射在线日 | 欧美怡红院视频|