Oracle儲存過程的異常處理

2021-06-18 09:52:11 字數 1948 閱讀 8652

命名的系統異常     產生原因

access_into_null    未定義物件

case_not_found     case中若未包含相應的when,並且沒有設定

collection_is_null    集合元素未初始化

curser_already_open    游標已經開啟

dup_val_on_index    唯一索引對應的列上有重複的值

invalid_cursor     在不合法的游標上進行操作

invalid_number    內嵌的 sql 語句不能將字元轉換為數字 

no_data_found     使用 select into 未返回行,或應用索引表未初始化的 

too_many_rows     執行 select into 時,結果集超過一行

zero_divide     除數為 0

subscript_beyond_count    元素下標超過巢狀表或varray的最大值

subscript_outside_limit   使用巢狀表或 varray 時,將下標指定為負數

value_error     賦值時,變數長度不足以容納實際資料

login_denied     pl/sql 應用程式連線到 oracle 資料庫時,提供了不正確的使用者名稱或密碼      確的使用者名稱或密碼

not_logged_on     pl/sql 應用程式在沒有連線 oralce 資料庫的情況下訪問資料      問資料

program_error     pl/sql 內部問題,可能需要重灌資料字典& pl./sql系統包     統包

rowtype_mismatch          主游標變數與 pl/sql 游標變數的返回型別不相容

self_is_null     使用物件型別時,在 null 物件上呼叫物件方法

storage_error     執行 pl/sql 時,超出記憶體空間

sys_invalid_id     無效的 rowid 字串

timeout_on_resource    oracle 在等待資源時超時

--

自定義異常處理

create

orreplace

procedure

stu_proc(

--多個用逗號隔開

v_id

innumber

) is

--多個用分號隔開

v_max_id

number

; v_name

varchar2(20

); v_raise exception;

begin

select

max(a.id)

into

v_max_id

from

student a;

ifv_id

>

v_max_id

then

raise v_raise;

endif;

select

o.sname

into

v_name

from

student o

where

o.id

=v_id;

dbms_output.put_line(

'學生名稱為:'||

v_name);

exception

when

v_raise

then

-20010, '

v_id not exists!');

when

no_data_found

then

-20011, '

error:不存在!');

endstu_proc;

ORACLE儲存過程異常處理。

create or replace procedure p tx getfaxdata as v errorcode number 出錯的 v errormsg varchar2 200 錯誤的訊息顯示 v currentuser varchar2 8 當前資料庫使用者 v information ...

oracle 儲存過程 異常處理機制

下面將如何在儲存過程中判斷sql語句的錯誤,向大家作乙個詳細地介紹,希望大家讓程式開發人員遵從這樣的方式編寫sql儲存過程,以避免造成在程式聯調過程中應用程式狀態不明確的問題。如以下 表示,在sql儲存過程中可以定義執行狀態的出口引數,而且盡量返回系統報告的sqlcode,而並非個人定義的,這樣可以...

Oracle儲存過程中的異常處理

1.問題 oracle中可以用dbms output.put line來列印提示資訊,但是很容易緩衝區就溢位了。可以用dbms output.enable 1000000 來設定緩衝區的大小。但是有大小,就有可能再溢位 程式寫得太爛,錯誤不斷,不好意思 於是想把異常資訊寫到乙個表中。2.建表 這個容...