瘋狂

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

          RAISE_APPLICATION_ERROR

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

           

           RAISE_APPLICATION_ERROR 是將應用程序專有的錯誤從服務器端轉達到客戶端應用程序。

           

                RAISE_APPLICATION_ERROR 的聲明:

           

                PROCEDURE RAISE_APPLICATION_ERROR

                                                              ( error_number_in IN NUMBER, error_msg_in IN VARCHAR2);

           

                里面的錯誤代碼和內容,都是自定義的。說明是自定義,當然就不是系統中已經命名存在的錯誤類別,是屬于一種自定義事務錯誤類型,才調用此函數。

                error_number_in 之容許從 -20000 到 -20999 之間,這樣就不會與 ORACLE 的任何錯誤代碼發生沖突。

                error_msg_in 的長度不能超過 2K,否則截取 2K。

           

           

          舉個例吧:

          阻止小于18歲的用戶增加到數據庫 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;

           

           

          在客戶端,你可以寫一個類似下面的程序,來測試一下。

           

          DECLARE

           

              no_babies_allowed EXCEPTION;

           

               /*將名稱與用于觸發器中的錯誤號碼關聯起來*/

               PRAGMA EXCEPTION_INIT(no_babies_allowed, -20001);

           

          BEGIN

           

                 INSERT INTO employee ....;

           

          EXCEPTION

                 WHEN no_babies_allowed

                 THEN

                        /*

                        || SQLERRM 將傳遞給內置過程 RAISE_APPLICATION_ERROR 的消息返回

                        */

                        DBMS_OUTPUT.PUT_LINE(SQLERRM);

          END;

           

          主站蜘蛛池模板: 灵川县| 聊城市| 武隆县| 六盘水市| 大足县| 玛曲县| 吉安县| 景德镇市| 青海省| 铜陵市| 中牟县| 汝阳县| 红桥区| 韩城市| 五家渠市| 靖州| 黄冈市| 奉贤区| 云南省| 鱼台县| 津南区| 鹤壁市| 锡林浩特市| 岢岚县| 恩平市| 高阳县| 嵊泗县| 阳江市| 尚义县| 东辽县| 花垣县| 汕头市| 巴塘县| 安康市| 林芝县| 临湘市| 黄石市| 绍兴市| 宁波市| 偏关县| 金昌市|