日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > ChatGpt >内容正文

ChatGpt

Oracle PL/SQL 非预定义异常、自定义异常处理、RAISE_APPLICATION_ERROR

發布時間:2023/12/15 ChatGpt 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Oracle PL/SQL 非预定义异常、自定义异常处理、RAISE_APPLICATION_ERROR 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

拋出異常

Oracle有三種類型的異常錯誤:

?

1.?預定義(Predefined)異常

ORACLE預定義的異常情況大約有24個。對這種異常情況的處理,無需在程序中定義,由ORACLE自動將其引發。

2.?非預定義(Predefined)異常

即其他標準的ORACLE錯誤。對這種異常情況的處理,需要用戶在程序中定義,然后由ORACLE自動將其引發。

3.?用戶定義(User_define)異常

程序執行過程中,出現編程人員認為的非正常情況。對這種異常情況的處理,需要用戶在程序中定義,然后顯式地在程序中將其引發。


?

在PL/SQL中有三種方式拋出異常

  • 通過PL/SQL運行時引擎——拋出Oracle異常

  • 使用RAISE語句——拋出用戶定義異常

  • 調用RAISE_APPLICATION_ERROR存儲過程——拋出用戶定義異常


非預定義異常

?

因為非預定義異常只有編號,沒有名稱,所以不能直接處理。

1、在PL/SQL?塊的定義部分定義異常情況:

?<異常情況>??EXCEPTION;?

2、將其定義好的異常情況,與標準的ORACLE錯誤聯系起來,使用EXCEPTION_INIT語句:

PRAGMA?EXCEPTION_INIT(<異常情況>,?<錯誤代碼> );

3、在PL/SQL?塊的異常情況處理部分對異常情況做出相應的處理。

?

INSERT INTO departments VALUES(50, 'FINANCE', 'CHICAGO');DECLAREv_deptno departments.department_id%TYPE := &deptno;deptno_remaining EXCEPTION; --1、定義異常PRAGMA EXCEPTION_INIT(deptno_remaining, -2292); --2、關聯-- -2292 是違反一致性約束的錯誤代碼 BEGINDELETE FROM departments WHERE department_id = v_deptno; EXCEPTIONWHEN deptno_remaining THEN --3、處理DBMS_OUTPUT.PUT_LINE('違反數據完整性約束!');WHEN OTHERS THENDBMS_OUTPUT.PUT_LINE(SQLCODE||'---'||SQLERRM); END;

?

?

用戶自定義異常處理

用戶定義的異常錯誤是通過顯式使用?RAISE?語句來觸發。

?

1、在PL/SQL?塊的定義部分定義異常情況

2、RAISE?<異常情況>

3、在PL/SQL?塊的異常情況處理部分對異常情況做出相應的處理。

?

DECLAREv_empno employees.employee_id%TYPE :=&empno;no_result EXCEPTION; --1、定義 BEGINUPDATE employees SET salary = salary+100 WHERE employee_id = v_empno;IF SQL%NOTFOUND THENRAISE no_result; --2、拋出END IF; EXCEPTIONWHEN no_result THEN --3、處理DBMS_OUTPUT.PUT_LINE('你的數據更新語句失敗了!');WHEN OTHERS THENDBMS_OUTPUT.PUT_LINE(SQLCODE||'---'||SQLERRM); END;


?

RAISE_APPLICATION_ERROR

?

調用DBMS_STANDARD(ORACLE提供的包)包所定義的RAISE_APPLICATION_ERROR過程,可以重新定義異常錯誤消息將應用程序專有的錯誤從服務器端轉達到客戶端應用程序。它為應用程序提供了一種與ORACLE交互的方法。

語法如下:

???? RAISE_APPLICATION_ERROR(error_number, error_message, [keep_errors]?);

  • error_number?是從?–20,000?到?–20,999?之間的參數,這樣就不會與 ORACLE 的任何錯誤代碼發生沖突
  • error_message?是相應的提示信息(<?2048?字節)
  • keep_errors?為可選,如果keep_errors?=TRUE?,則新錯誤將被添加到已經引發的錯誤列表中。如果keep_errors=FALSE(缺省),則新錯誤將替換當前的錯誤列表。
  • There are two uses for RAISE_APPLICATION_ERROR.

    The first is to replace generic Oracle exception messages with our own, more meaningful messages.

    The second is to create exception conditions of our own, when Oracle would not throw them.

    ?

    create or replace procedure new_emp( p_name in emp.ename%type, p_sal in emp.sal%type, p_job in emp.job%type, p_dept in emp.deptno%type, p_mgr in emp.mgr%type , p_hired in emp.hiredate%type := sysdate ) isinvalid_manager exception; --1、定義PRAGMA EXCEPTION_INIT(invalid_manager, -2291); --2、關聯dummy varchar2(1); beginif trunc(p_hired) > trunc(sysdate) thenraise_application_error(-20000, 'NEW_EMP::hiredate cannot be in the future'); --3、拋出自定義異常end if;insert into emp( ename, sal, job, deptno, mgr , hiredate )values ( p_name, p_sal, p_job, p_dept, p_mgr , trunc(p_hired) ); exceptionwhen dup_val_on_index thenraise_application_error(-20001, 'NEW_EMP::employee called '||p_name||' already exists', true); --3、包裝Oracle異常when invalid_manager thenraise_application_error(-20002, 'NEW_EMP::'||p_mgr ||' is not a valid manager'); --3、包裝自定義異常end; /


    客戶端調用時會提示詳細異常信息:

    ?

    ?

    -- 測試RAISE_APPLICATION_ERROR自定義異常 SQL> exec new_emp ('DUGGAN', 2500, 'SALES', 10, 7782, sysdate+1) BEGIN new_emp ('DUGGAN', 2500, 'SALES', 10, 7782, sysdate+1); END;* ERROR at line 1: ORA-20000: NEW_EMP::hiredate cannot be in the future --ORA-20000 ORA-06512: at "APC.NEW_EMP", line 16 ORA-06512: at line 1-- 測試RAISE_APPLICATION_ERROR包裝自定義異常 SQL> exec new_emp ('DUGGAN', 2500, 'SALES', 10, 8888, sysdate) BEGIN new_emp ('DUGGAN', 2500, 'SALES', 10, 8888, sysdate); END;* ERROR at line 1: ORA-20002: NEW_EMP::8888 is not a valid manager ORA-06512: at "APC.NEW_EMP", line 42 ORA-06512: at line 1-- 測試RAISE_APPLICATION_ERROR包裝Oracle異常 SQL> exec new_emp ('DUGGAN', 2500, 'SALES', 10, 7782, sysdate)PL/SQL procedure successfully completed.SQL> SQL> exec new_emp ('DUGGAN', 2500, 'SALES', 10, 7782, sysdate) BEGIN new_emp ('DUGGAN', 2500, 'SALES', 10, 7782, sysdate); END;* ERROR at line 1: ORA-20001: NEW_EMP::employee called DUGGAN already exists ORA-06512: at "APC.NEW_EMP", line 37 ORA-00001: unique constraint (APC.EMP_UK) violated --同時打印原始堆棧 ORA-06512: at line 1


    ?







    ?

    總結

    以上是生活随笔為你收集整理的Oracle PL/SQL 非预定义异常、自定义异常处理、RAISE_APPLICATION_ERROR的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 国产女人被狂躁到高潮小说 | 色综合狠狠爱 | 国产在线久| 在线免费观看www | 亚洲国产精品久久久久 | 潘金莲黄色一级片 | 黑丝国产一区 | 欧美粗大猛烈老熟妇 | 欧美综合自拍 | 美女考逼 | 欧美一级爱爱 | 亚洲精品三级 | 日本国产一区二区三区 | 高清av网站| 亚洲国产97在线精品一区 | 91久久久久久久久久久久久 | 日韩一片 | 精品亚洲乱码一区二区 | 亚洲精品中字 | 七月丁香婷婷 | 色欧洲| 成人永久免费 | 人妻夜夜爽天天爽 | 六月丁香久久 | 人人爽视频 | 中文字幕一区二区三区电影 | 91九色偷拍 | 调教亲女小嫩苞h文小说 | 综合热久久 | 超碰99在线 | 欧美女优在线观看 | 欧美精品激情 | 成人网在线免费观看 | 亚洲电影中文字幕 | 自拍偷拍第5页 | 免费高清成人 | 国产精品第二页 | 樱桃视频一区二区三区 | 天堂网在线中文 | 99热免费精品 | 亚洲欧洲日韩综合 | 级毛片内射视频 | av三级在线观看 | 免费不卡毛片 | 禁果av一区二区三区 | 亚洲第一成年网 | www.玖玖玖 | 青青草娱乐在线 | 中文字幕第一区 | 日韩影视在线 | 强开乳罩摸双乳吃奶羞羞www | 午夜激情av在线 | 四虎国产精品永久免费观看视频 | 久久黄色av | 成人不卡av| 9人人澡人人爽人人精品 | 狠狠丁香 | 老熟妻内射精品一区 | av中文字幕一区二区 | 内射一区二区三区 | 午夜视频导航 | av无遮挡 | 久热超碰 | 欧美精品123区 | 国产精品原创 | 久久免费视屏 | 国产99在线视频 | 91免费黄色 | 日本网站在线 | 欧美一卡二卡 | 又色又爽又高潮免费视频国产 | 欧美亚洲自拍偷拍 | 久久精品福利视频 | 五月婷婷一区二区 | 激情久久网| 直接看av的网站 | 国产在线视频一区二区 | www.xxx日韩 | 97免费看 | 亚洲大尺度在线观看 | 精品在线视频一区二区三区 | 少妇又紧又色 | 亚洲精品一区三区三区在线观看 | 日韩久久成人 | 精品无码人妻一区二区三区品 | 国产xxxxxx| 国产精选视频在线观看 | 亚洲人视频 | 亚洲三级在线播放 | aaa大片十八岁禁止 中文字幕亚洲在线观看 | 日本妈妈3 | 一级黄色播放 | 日韩欧美激情视频 | 米奇av| 婷婷亚洲一区 | 国产又粗又猛又爽又黄av | av天堂一区二区 | 亚洲成人午夜影院 | 久久久久久久久久网 |