1. 程式人生 > >Oracle異常處理及舉例(Oracle預定義異常和自定義異常)

Oracle異常處理及舉例(Oracle預定義異常和自定義異常)

PL/SQL 異常處理
Oracle系統異常分別為兩大類:
預定義異常:Oracle系統自身提供
自定義異常:Oracle不知曉無法控制的異常,特定的業務邏輯。由使用者在程式中定義,Oracle自動引發
Oracle常見的預定義異常
ZERO_DIVIDE                 除數為零
ACCESS_INTO_NULL            企圖為某個未初始化的物件的屬性賦值
COLLECTION_IS_NULL          企圖使用未初始化的集合元素
CURSOR_ALREADY_OPEN         企圖再次開啟已經開啟的遊標
INVALID_CURSOR              執行一個非法的遊標操作
INVALID_NUMBER              企圖將一個字串轉換為一個無效的數字而失敗
LOGIN_DENIED                企圖使用無效的使用者名稱或者密碼連線資料庫
NO_DATA_FOUND               select into 語句沒有返回資料
ROWTYPE_MISMATCH            主遊標變數與PL/SQL遊標變數的返回型別不相容
SELF_IS_NULL                使用物件型別時,使用空物件呼叫其方法
SUBSCRIPT_BEYOND_COUNT      元素下表超過巢狀表或者VARRAY的最大值
SUBSCRIPT_OUTSIDE_LIMIT     企圖使用非法索引號引用巢狀表或者VARRAY的最大值
SYS_INVALID_ROWID           字串向ROWID轉換時的錯誤,因為該字串不是一個有效的ROWID值
TIMEOUT_ON_RESOURCE         Oracle在等待資源時超時
TOO_MANY_ROWS               執行select inot 語句時,結果集超過一行引發的異常

set serveroutput on 
declare 
var_1 number;
var_2 varchar2(50);
begin
select first_name,salary into var_2,var_1 from employees where job_id='AD_VP';
if sql%found then
dbms_output.put_line(var_2||'的工資是:'||var_1);
end if;
exception 
when too_many_rows then
dbms_output.put_line('返回太多行。');
when no_data_found then
dbms_output.put_line('沒有找到資料');
end;
執行結果:
匿名塊已完成
返回太多行。
自定義異常包括錯誤編號異常和業務邏輯異常
錯誤編號異常使用:定義異常變數,關聯錯誤號和異常變數名
一下為錯誤編號異常舉例
insert into employees(employee_id) values(100)
錯誤報告:
SQL 錯誤: ORA-01400: 無法將 NULL 插入 ("HR"."EMPLOYEES"."LAST_NAME")
01400. 00000 -  "cannot insert NULL into (%s)"
*Cause:    
*Action:
set serveroutput on 
declare var_exp exception;
pragma exception_init (var_exp, -01400);
begin
insert into employees(employee_id) values(100);
exception when var_exp then 
dbms_output.put_line('注意存在列不允許為空');
end;
執行結果
匿名塊已完成
注意存在列不允許為空

業務邏輯異常使用:在程式中raise異常,當引發一個異常時,控制就會轉到exception異常處理部分執行異常處理語句
set serveroutput on 
declare
too_big_salary exception;
var_1 number;
begin
var_1:=10000;
update employees set salary=10000 where employee_id=101;
if var_1>=10000 then
raise too_big_salary;
end if;
exception 
when too_big_salary then
dbms_output.put_line('工資超過最高限制!!');
rollback;
end;
執行效果
匿名塊已完成
工資超過最高限制!!

努力不會背叛
博文僅供參考,歡迎大家來訪。如有錯誤之處,希望批評指正。

相關推薦

Oracle異常處理舉例Oracle預定異常定義異常

PL/SQL 異常處理 Oracle系統異常分別為兩大類: 預定義異常:Oracle系統自身提供 自定義異常:Oracle不知曉無法控制的異常,特定的業務邏輯。由使用者在程式中定義,Oracle自動引發Oracle常見的預定義異常 ZERO_DIVIDE

oracle中的預定異常定義異常

預定異常   oracle中的預定異常情況大約有24個,對於這種異常情況的處理,無須再程式中定義,可用oracle自動引發,常見的預定異常如下 異常 說明 ACCESS_INTO_NULL 在未初始化物件時出現 CAS

PL/SQL_處理例外2預定異常定義異常

處理非預定義例外 為了提高PL/SQL程式的健壯性,應該在PL/SQL應用程式中合理地處理這些Oracle錯誤,此時就需要使用非預定義例外。使用非預定義例外的步驟如下圖所示: 示例如下:DECLARE e_integrity EXCEPTION; PRAGMA EX

springboot下全域性異常處理定義異常以及定義返回值

1.介紹    全域性異常處理,是mvc的一個新特性,避免大量的重複程式碼    自定義異常 , 方便使用,丟擲自己定義好的異常,配合全域性異常處理使用,效果更佳    自定義返回值,類似異常,返回自己定義的返回值 2.全域性異常處理重點知識 1. 新建一

java實訓 :異常try-catch執行順序與定義異常

關鍵字: try:執行可能產生異常的程式碼 catch:捕獲異常 finally:無論是否發生異常程式碼總能執行 throws:宣告方法可能要丟擲的各種異常 throw:手動丟擲自定義異常 用 try-catch-finally 異常處理: 情況一(正常執行,無異常): 執行try,執行fin

c++標準異常定義異常物件

前言 標準異常類體系如下: 縮排層次表示繼承關係 exception #include <exception> runtime_error #include <stdexcept> overflow_er

使用Advanced Installer製作IIS安裝包二:配置安裝包依賴項定義dll

前言:上篇使用Advanced Installer製作IIS安裝包(一:配置IIS和Web.config)介紹了下使用Advanced Installer配置IIS和Web.config的過程,操作起來是相對比較簡單的,只要知道了博主提供的方法,相信都不是問題,其實博主當初尋找相關方法配置IIS和Web.co

深入分析Spring屬性編輯器預設屬性編輯器定義屬性編輯器

在Spring配置檔案或配置類裡,我們往往通過字面值為Bean各種型別的屬性提供設定值:不管是double型別還是int型別,在配置檔案中都對應字串型別的字面值。BeanWrapper填充Bean屬性時如何將這個字面值轉換為對應的double或int等內部型別呢?我們可以隱約

Unity截圖截指定區域或者是定義區域

在unity3d中可能會遇到截圖然後儲存到材質中作為某種顯示使用,網上的程式碼基本都是截圖是的截圖。今天介紹一種截指定區域或者自定義區域的方法。 using UnityEngine; using System.Collections; using Syst

Python3.2官方文件翻譯--異常丟擲定義異常

6.4 丟擲異常 Raise語句執行程式設計師強制丟擲一個具體的異常。例如: >>> raise NameError(’HiThere’) Traceback (most recent call last): File "<stdin>", l

如何優雅使用Sublime Text3Sublime設定豆沙綠背景色定義主題

♣Sublime Text3軟體的下載♣設定字型的大小♣設定背景色和關鍵字顏色(Color Scheme 生成器)♣快速生成html標頭檔案:http://download.csdn.net/detail/sinat_31719925/9684613Sublime Text

Vue非典型封裝Bootstrap-Select公共元件非同步獲取資料,prop定義函式

本文重點討論的問題: 1. 如何統一所有例項資料,而不是例項化元件時傳入資料。並非提倡這種做法,結合實際需求。 2. 如何prop元件例項的自定義函式。 以上問題比較鮮見,於是把我的解決思路寫下來跟各位分享。完整具體的實現程式碼就不列出了。 接觸VUE

如何優雅使用Sublime Text3Sublime設置豆沙綠背景色定義主題

下載地址 文件夾 uri 文本 一個 16進制 sdn 命名 tor ?Sublime Text3軟件的下載 ?設置字體的大小 ?設置背景色和關鍵字顏色(Color Scheme 生成器) ?快速生成html頭文件 1.Sublime Text3軟件的下載地址和包含的文件:

Oracle PL/SQL異常處理預定錯誤

非預定義錯誤 非預定義錯誤即其他標準的Oracle錯誤。對於這種異常情況的處理,需 要使用者在程式中定義,然後由Oracle自動將其引發。 對於這類異常情況的處理,首先必須對非定義的Oracle錯誤進行定義, 步驟如下。 1)在PL/SQL塊的定義部分定義異常情況:<

Oracle學習筆記—oracle體系架構狀態nomount、mountopen簡介

位置 正常 處理 管理 共享服務器 體系 操作記錄 sysdba png oracle體系架構簡介 先來簡要了解一下Oracle數據庫體系架構以便於後面深入理解,Oracle Server主要由實例(instance)和數據庫(database)組成。實例(instance

SpringBoot全域性異常捕獲處理包括定義異常捕獲處理

在做專案的時候需要對自定義異常做捕獲和處理,現在將程式碼記錄下來便於以後查閱。 1、全域性異常捕捉處理 @ControllerAdvice( annotations = {RestController.class} ) public class ExceptionHandlerAdv

C#進階系列——WebApi 異常處理解決方案

機制 輸出 ges 如果 但是 rom lba slist 解決 出處:http://www.cnblogs.com/landeanfen/p/5363846.html 閱讀目錄 一、使用異常篩選器捕獲所有異常 二、HttpResponseException自

Laravel之加密解密/日誌/異常處理定義錯誤

文件中 例如 tom 處理器 crypt return cat 情況 而不是 一.加密解密 1.加密Crypt::encrypt($request->secret) 2.解密try {   $decrypted = Crypt::decrypt($encryptedV

(轉Python自動化運維之13、異常處理反射(__import__,getattr,hasattr,setattr)

邏輯 斷言 函數 typeerror 代碼 __init__ raw linu 基類 Python自動化運維之13、異常處理及反射(__import__,getattr,hasattr,setattr) 一、異常處理 python異常:  python的運行時錯誤稱

老王Python-進階篇4-異常處理1.3周末習題

調用 page eve sage urn put not name bject 一 編寫with操作類Fileinfo(),定義__enter__和__exit__方法。完成功能: 1.1 在__enter__方法裏打開Fileinfo(filename),並且返回file