• <ul id="mayc0"></ul>
    <ul id="mayc0"><center id="mayc0"></center></ul>
    <strike id="mayc0"><input id="mayc0"></input></strike>
    <ul id="mayc0"></ul>
  • 始創(chuàng)于2000年 股票代碼:831685
    咨詢熱線:0371-60135900 注冊(cè)有禮 登錄
    • 掛牌上市企業(yè)
    • 60秒人工響應(yīng)
    • 99.99%連通率
    • 7*24h人工
    • 故障100倍補(bǔ)償
    全部產(chǎn)品
    您的位置: 網(wǎng)站首頁(yè) > 幫助中心>文章內(nèi)容

    標(biāo)準(zhǔn)Oracle PL/SQL 異常處理

    發(fā)布時(shí)間:  2012/9/21 16:33:01

    環(huán)境:ORCLE 10G

    單獨(dú)出現(xiàn)一個(gè)SQL,異常如何處理,這里不說(shuō)。

    一)標(biāo)準(zhǔn)的含異常處理的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('沒有明細(xì)記錄');
        WHEN OTHERS THEN
           dbms_output.put_line('未知的異常');
    END;

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

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


    本文出自:億恩科技【www.vbseamall.com】

    服務(wù)器租用/服務(wù)器托管中國(guó)五強(qiáng)!虛擬主機(jī)域名注冊(cè)頂級(jí)提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM]

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

    0371-60135900
    7*24小時(shí)客服服務(wù)熱線