一级女人毛片人一女人-一级女性大黄生活片免费-一级女性全黄久久生活片-一级女性全黄生活片免费-国产美女在线一区二区三区-国产美女在线观看

始創于2000年 股票代碼:831685
咨詢熱線:0371-60135900 注冊有禮 登錄
  • 掛牌上市企業
  • 60秒人工響應
  • 99.99%連通率
  • 7*24h人工
  • 故障100倍補償
您的位置: 網站首頁 > 幫助中心>文章內容

標準Oracle PL/SQL 異常處理

發布時間:  2012/9/21 16:33:01

環境:ORCLE 10G

單獨出現一個SQL,異常如何處理,這里不說。

一)標準的含異常處理的PL/SQL塊

DECLARE
     no_Detail_record EXCEPTION;-
 

     PRAGMA EXCEPTION_INIT(no_Detail_record, -20000);
   v_nDetailCount number;        
BEGIN
select count(*) into v_nDetailCount from tson where .....;   
    if v_nDetailCount=0 then
       raise_application_error(-20000,'');
   end if;
EXCEPTION
    WHEN no_Detail_record THEN
        dbms_output.put_line('沒有明細記錄');
    WHEN OTHERS THEN
       dbms_output.put_line('未知的異常');
END;

二)raise_application_error
拋出異常的函數名稱及其格式
RAISE_APPLICATION_ERROR(error_number,message[, {true |false}])
其中RAISE_APPLICATION_ERROR中第一個參數,異常編號,自己定義的只能在[-20999,-20000]之間。
但是根據我自己的試驗,如果定義的編號小于-20999,程序也能正常執行。
第三個參數的值默認是false,那么拋出的異常替換所有其它的異常,這就意味著其它異常你無法處理,而以當前異常取而代之(這是大部分情況下的自定義異常的選擇);如果是TRUE,那么新拋出的異常會存放在異常堆棧最上面(已經出現的其它異常之上)。

三)Oracle預定義的PL/SQL 異常
異常名稱 ORACODE SQLCODE 觸發時機
LOGIN_DENIED 01017 -1017
 非法用戶名稱或者密碼登錄時候
NO_DATA_FOUND 01403 100 SELECT INTO沒有返回行;或者代碼指向嵌套表中被刪除的元素;或者代碼指向索引表(數組)的未初始化的元素。
 
NOT_LOGGED_ON 01012  沒有登錄,確意圖執行一些調用
PROGRAM_ERROR 06501  PL/SQL存在內部的錯誤
ROWTYPE_MISMATCH 06504  發生在一個游標給另外一個游標賦值的情況下,尤其是調用含有游標參數的子過程時候。如果二者返回類型不一致,會出現。
SELF_IS_NULL 30625  試圖調用一個沒有初始化的對象的方法成員,因為關鍵字SELF表示的是對象的自生(是內建參數),在調用時候總是第一個傳遞給方法成員。
STORAGE_ERROR 06500  PL/SQL耗盡了內存,或者內存發生泄露。
SUBSCRIPT_BEYOND_COUNT 06533  簡單而言,就是訪問數組對象(或者嵌套表)時候,越界了。
SUBSCRIPT_OUTSIDE_LIMIT 06532  和上面一個類似,不通的是這里的索引號是非法的,例如-1
SYS_INVALID_ROWID 01410  把一個不符合ROWID格式的字符串轉換為ROWID時候發生的異常。
TIMEOUT_ON_RESOURCE 00051  等待一個資源的時候,發生超時。
TOO_MANY_ROWS 01422  SELECT INTO語句返回多余一行結果
 
VALUE_ERROR 06502  數字,轉換,截取,或者大小約束發生的錯誤。例如用一個變量的長度比列的長度小,如果要保存列值就會發生異常。
在過程語句中,如果字符串轉換為數字失敗,會觸發這個。在SQL語句中,則是觸發INVALID_NUMBER異常。
 
ZERO_DIVIDE 01476  試圖除以0.
ACCESS_INTO_NULL 06530  試圖訪問一個沒有初始化對象的屬性,和self_is_null類似
CASE_NOT_FOUND 06592  “情況沒有發現”
在一個case when子句中,沒有一個選擇是滿足的,但是又不存在else子句。
 
COLLECTION_IS_NULL 06531  試圖實用exists之外的集合方法訪問未初始化的數組或者嵌套表,或者是試圖給它們賦值。
CURSOR_ALREADY_OPEN 06511  試圖重新打開已經打開的游標。
DUP_VAL_ON_INDEX 00001  試圖在唯一索引列上存入重復的值。
INVALID_CURSOR 01001  試圖對游標做一些非法的操作,例如試圖關閉一個本來就沒有打開的游標。
INVALID_NUMBER 01722  和value_error類似,不過只適合SQL語句,且是字符轉數字時候發生的。
說明: 1)sqlcode,通常情況下=-1* to_number(oracode),除非有特別說明。
            2)有幾組異常是類似或者相關性比較大的,例如:
                  INVALID_NUMBER     和 VALUE_ERROR
                  SELF_IS_NULL          和 ACCESS_INTO_NULL, COLLECTION_IS_NULL
           3) 和嵌套表以及數組的異常不少
           4) no_data_found是一個比較不通 的異常。其sqlcode=100,而不是-1403


本文出自:億恩科技【www.laynepeng.cn】

服務器租用/服務器托管中國五強!虛擬主機域名注冊頂級提供商!15年品質保障!--億恩科技[ENKJ.COM]

  • 您可能在找
  • 億恩北京公司:
  • 經營性ICP/ISP證:京B2-20150015
  • 億恩鄭州公司:
  • 經營性ICP/ISP/IDC證:豫B1.B2-20060070
  • 億恩南昌公司:
  • 經營性ICP/ISP證:贛B2-20080012
  • 服務器/云主機 24小時售后服務電話:0371-60135900
  • 虛擬主機/智能建站 24小時售后服務電話:0371-60135900
  • 專注服務器托管17年
    掃掃關注-微信公眾號
    0371-60135900
    Copyright© 1999-2019 ENKJ All Rights Reserved 億恩科技 版權所有  地址:鄭州市高新區翠竹街1號總部企業基地億恩大廈  法律顧問:河南亞太人律師事務所郝建鋒、杜慧月律師   京公網安備41019702002023號
      0
     
     
     
     

    0371-60135900
    7*24小時客服服務熱線