1. <nobr id="easjo"><address id="easjo"></address></nobr>

      <track id="easjo"><source id="easjo"></source></track>
      1. 
        

      2. <bdo id="easjo"><optgroup id="easjo"></optgroup></bdo>
      3. <track id="easjo"><source id="easjo"><em id="easjo"></em></source></track><option id="easjo"><span id="easjo"><em id="easjo"></em></span></option>
          貴州做網站公司
          貴州做網站公司~專業!靠譜!
          10年網站模板開發經驗,熟悉國內外開源網站程序,包括DEDECMS,WordPress,ZBlog,Discuz! 等網站程序,可為您提供網站建設,網站克隆,仿站,網頁設計,網站制作,網站推廣優化等服務。我們專注高端營銷型網站,企業官網,集團官網,自適應網站,手機網站,網絡營銷,網站優化,網站服務器環境搭建以及托管運維等。為客戶提供一站式網站解決方案?。?!

          Oracle 異常詳解

          來源:互聯網轉載 時間:2024-01-29 07:56:08

          Oracle 異常詳解(exception)

          來源:(33條消息) Oracle 異常詳解(exception)_魚丸丶粗面-CSDN博客

          魚丸丶粗面 2018-10-08 23:03:23 2949 收藏 14
          分類專欄: Oracle PL/SQL 文章標簽: Oracle 異常 exception raise
          版權

          Oracle
          同時被 2 個專欄收錄
          110 篇文章10 訂閱
          訂閱專欄

          PL/SQL
          17 篇文章1 訂閱
          訂閱專欄
          文章目錄
          1 概述
          1.1 思維導圖
          1.2 語法
          2 異常分類
          2.1 系統預定義
          2.2 用戶自定義
          3 異常拋出
          3.1 raise
          3.2 raise_application_error
          4 重寫異常
          1 概述
          1. 概念
          (1) 程序一旦發生異常而沒有處理時,程序會 '自動終止'
          (2) 反之,則跳轉至 '最近一個 exception' 進行處理
          1
          2
          3
          1.1 思維導圖


          1.2 語法
          1. 異常處理可以按任意次序排列,但 'others' 必須放在最后
          2. 異常會被離它 '最近的一個 exception 塊' 捕獲到
          (1) 若異常被 <異常1> 捕獲到,那么該異常到此結束(不會繼續判斷 <異常2> 及其后面的)

          如:
          declare
          begin
          程序代碼塊;
          exception
          when <異常1> then
          異常語句1;
          when <異常2> then
          異常語句2;
          when others then
          其它異常;
          end;
          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          11
          12
          13
          14
          15
          16
          例子:(除數不能為 0)

          declare
          v_num NUMBER(5) := 5;
          BEGIN
          BEGIN
          v_num := v_num / 0;
          EXCEPTION
          -- 如果此處無 exception,則拋向最近一個 exception
          WHEN OTHERS THEN
          dbms_output.put_line(SQLCODE); -- 異常編號
          dbms_output.put_line(SQLERRM); -- 異常描述信息
          dbms_output.put_line(dbms_utility.format_error_backtrace); -- 異常發生的位置
          dbms_output.put_line(dbms_utility.format_call_stack); -- 異常堆棧
          END;
          EXCEPTION
          WHEN OTHERS THEN
          dbms_output.put_line('若沒有上面的 exception 代碼塊,異常才會被此處捕獲');
          END;
          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          11
          12
          13
          14
          15
          16
          17
          2 異常分類
          1. 異常的兩種分類
          (1) 系統預定義:Oracle 自動拋出(如:'違反唯一性約束')
          (2) 用戶自定義:編碼人員認為的 '非正常情況'

          2. 其中 '用戶自定義' 的異常在 pl/sql 環境使用,需 '顯示拋出'
          1
          2
          3
          4
          5
          基礎數據準備:

          create table stu_info(
          sno number(3) constraint pk_stu_info_sno primary key,
          sname varchar2(30)
          );
          1
          2
          3
          4
          2.1 系統預定義
          insert into stu_info(sno, sname) values(1, '瑤瑤');
          insert into stu_info(sno, sname) values(1, '優優');
          1
          2
          報錯截圖:(ORA-00001: 違反唯一約束條件)


          2.2 用戶自定義

          declare
          v_num number(5) := -1;
          exp_data_range exception; -- 異常定義
          begin
          if v_num < 0 then
          raise exp_data_range; -- 異常拋出
          end if;
          exception
          when exp_data_range then
          dbms_output.put_line('數據范圍不能為負數!');
          end;
          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          11
          測試結果:

          數據范圍不能為負數!
          1
          3 異常拋出
          1. raise:異常拋出并在 pl/sql exception 塊中處理

          2. raise_application_error:異常拋出給 '應用程序',pl/sql 中并不處理!
          1
          2
          3
          3.1 raise
          上述提到的就有:2.2 用戶自定義
          3.2 raise_application_error
          raise_application_error(error_number, error_message, error_boolean);
          error_number : 取值范圍: -20000 到 -20999 之間
          error_message :相應的提示信息(< 2048 字節),超出則截取。
          error_boolean : 可選項,若為 true: 則新錯誤將被添加到已經引發的錯誤列表中。
          若為 false(默認):則覆蓋。
          1
          2
          3
          4
          5
          例1:false(默認,覆蓋異常信息,若有)

          declare
          v_num number(5) := -1;
          begin
          if v_num < 0 then
          raise_application_error(-20001, '不能為負數!'); -- 異常拋出
          end if;
          end;
          1
          2
          3
          4
          5
          6
          7
          異常拋出截圖:


          例2:true(追加異常信息)

          declare
          v_num number(5) := -1;
          begin
          begin
          if v_num < 0 then
          raise_application_error(-20001, '不能為負數!'); -- 異常拋出
          end if;
          exception
          when others then
          raise_application_error(-20001, 'true:追加異常信息', true); -- 異常拋出
          end;
          end;
          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          11
          12
          異常拋出截圖:


          4 重寫異常
          1. 異常均可被重寫
          (1) 系統預定義
          (2) 用戶自定義
          1
          2
          3
          示例:重寫系統預定義異常:ORA-01476: 除數為 0

          declare
          exp_pisor_of_zero_rewrite exception;
          pragma exception_init(exp_pisor_of_zero_rewrite, -1476);
          v_num number(1) := 3;
          begin
          v_num := v_num / 0;
          exception
          when exp_pisor_of_zero_rewrite then
          raise_application_error(-20001, '除數不能為 0(重寫異常)');
          end;
          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          異常拋出截圖:

          ————————————————
          版權聲明:本文為CSDN博主「魚丸丶粗面」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
          原文鏈接:https://blog.csdn.net/qq_34745941/article/details/82846820

          標簽:oracleexception-

          網絡推廣與網站優化公司(網絡優化與推廣專家)作為數字營銷領域的核心服務提供方,其價值在于通過技術手段與策略規劃幫助企業提升線上曝光度、用戶轉化率及品牌影響力。這...

          在當今數字化時代,公司網站已成為企業展示形象、傳遞信息和開展業務的重要平臺。然而,對于許多公司來說,網站建設的價格是一個關鍵考量因素。本文將圍繞“公司網站建設價...

          在當今的數字化時代,企業網站已成為企業展示形象、吸引客戶和開展業務的重要平臺。然而,對于許多中小企業來說,高昂的網站建設費用可能會成為其發展的瓶頸。幸運的是,隨...

          240碼是多大?目前世界各國所采用的鞋號并不一致,一般包括長度和寬度。長度指的是穿著者的腳的長度,也可以是制造商的鞋楦的長度。即使是在同一個國家或地區,不同人群、不同用途的鞋子,如童鞋、運動鞋,對鞋號的定義也不盡相同。240碼是多少?世界上常用的鞋碼單位包括歐洲碼、美國碼和毫米數。240是毫米數。中國標準鞋的尺寸大多以毫米或厘米為單位,即以毫米或厘米為數的足長數據。例如,240表示單位為毫米,對應...

          常州有沒有金鷹購物中心?常州購物中心在文化宮廣場南邊,生意超級好。金鷹有兩個,一個在吊橋路和金陵路交界處,冷門,估計快關門了。湖塘樂購對面還有一家。我去過那里兩次,我看不到一個鬼。估計金鷹在常州呆不了多久了。常州哪里可以用金鷹卡?常州金鷹國際購物中心武進店,常州市武進區花園街33號(近大潤發)常州金鷹購物中心,我住紅梅公園這邊,騎車怎么去?大潤發。紅梅公園北面的小東門路向北過了橋,然后就在馬路對面...

          七號線禮拜六停運時間北京?北京地鐵7號線周六不會停運。北京地鐵7號線東西走向,西起豐臺區和北京西站,途經西城區廣安門、東城區廣渠門、朝陽區歡樂谷景區等地,東至通州環球度假區站。地鐵7號線全長40.3公里,地下敷設,設30座車站,8列編組B型列車。北京地鐵周末人多嗎,會不會坐不了?因為周末是周末,北京坐地鐵的人不多,但是途經旅游景點的線路站點人比較多。不過因為天氣冷,現在周末人不多!地鐵路線圖請問北...

          TOP
          国产初高中生视频在线观看|亚洲一区中文|久久亚洲欧美国产精品|黄色网站入口免费进人
          1. <nobr id="easjo"><address id="easjo"></address></nobr>

              <track id="easjo"><source id="easjo"></source></track>
              1. 
                

              2. <bdo id="easjo"><optgroup id="easjo"></optgroup></bdo>
              3. <track id="easjo"><source id="easjo"><em id="easjo"></em></source></track><option id="easjo"><span id="easjo"><em id="easjo"></em></span></option>