瘋狂

          STANDING ON THE SHOULDERS OF GIANTS
          posts - 481, comments - 486, trackbacks - 0, articles - 1
            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          RAISE_APPLICATION_ERROR

          Posted on 2011-08-21 12:42 瘋狂 閱讀(402) 評(píng)論(0)  編輯  收藏 所屬分類: database

           

           RAISE_APPLICATION_ERROR 是將應(yīng)用程序?qū)S械腻e(cuò)誤從服務(wù)器端轉(zhuǎn)達(dá)到客戶端應(yīng)用程序。

           

                RAISE_APPLICATION_ERROR 的聲明:

           

                PROCEDURE RAISE_APPLICATION_ERROR

                                                              ( error_number_in IN NUMBER, error_msg_in IN VARCHAR2);

           

                里面的錯(cuò)誤代碼和內(nèi)容,都是自定義的。說(shuō)明是自定義,當(dāng)然就不是系統(tǒng)中已經(jīng)命名存在的錯(cuò)誤類別,是屬于一種自定義事務(wù)錯(cuò)誤類型,才調(diào)用此函數(shù)。

                error_number_in 之容許從 -20000 到 -20999 之間,這樣就不會(huì)與 ORACLE 的任何錯(cuò)誤代碼發(fā)生沖突。

                error_msg_in 的長(zhǎng)度不能超過 2K,否則截取 2K。

           

           

          舉個(gè)例吧:

          阻止小于18歲的用戶增加到數(shù)據(jù)庫(kù) employee 表中

           

          CREATE OR REPALCE TRIGGER minimun_age_check

          BEFORE INSERT ON employee

          FOR EACH ROW

          BEGIN

                IF ADD_MONTHS( :new.birth_date, 18*12) > SYSDATE

                THEN

                       RAISE_APPLICATION_ERROR(-20001, 'Employees must at least eighteen years of age.');

                END IF;

          END;

           

           

          在客戶端,你可以寫一個(gè)類似下面的程序,來(lái)測(cè)試一下。

           

          DECLARE

           

              no_babies_allowed EXCEPTION;

           

               /*將名稱與用于觸發(fā)器中的錯(cuò)誤號(hào)碼關(guān)聯(lián)起來(lái)*/

               PRAGMA EXCEPTION_INIT(no_babies_allowed, -20001);

           

          BEGIN

           

                 INSERT INTO employee ....;

           

          EXCEPTION

                 WHEN no_babies_allowed

                 THEN

                        /*

                        || SQLERRM 將傳遞給內(nèi)置過程 RAISE_APPLICATION_ERROR 的消息返回

                        */

                        DBMS_OUTPUT.PUT_LINE(SQLERRM);

          END;

           

          主站蜘蛛池模板: 伊通| 清苑县| 呼和浩特市| 称多县| SHOW| 武功县| 台中县| 靖江市| 宾阳县| 滦南县| 鱼台县| 盐城市| 庆安县| 阜阳市| 林州市| 黄梅县| 福泉市| 黎川县| 汾阳市| 应用必备| 奎屯市| 揭东县| 亳州市| 盐山县| 洪江市| 通州市| 安宁市| 舞阳县| 双鸭山市| 泗洪县| 安多县| 闻喜县| 大埔县| 延川县| 朔州市| 古田县| 东兰县| 澄迈县| 桂林市| 恩施市| 南江县|