Oracle資料庫---異常處理

来源:https://www.cnblogs.com/xiaomifeng1010/archive/2019/07/06/11144211.html
-Advertisement-
Play Games

Oracle異常處理在PL/SQL語句書寫時,需要處理的異常-- 不做異常處理時DECLARE v_name emp.ename%TYPE; v_sal emp.sal%TYPE;BEGIN SELECT ename,sal INTO v_name,v_sal FROM emp WHERE empn ...


Oracle異常處理
在PL/SQL語句書寫時,需要處理的異常
-- 不做異常處理時
DECLARE
v_name emp.ename%TYPE;
v_sal emp.sal%TYPE;
BEGIN
SELECT ename,sal
INTO v_name,v_sal
FROM emp
WHERE empno = &no;
IF v_sal <3000 THEN
DBMS_OUTPUT.PUT_LINE(v_name||'的工資是:'||v_sal);
END IF;
END;
在不做異常處理的時候,在輸入員工編號的值的時候,如果在資料庫中沒有,就會報錯

select * from emp;
--7369(empno) <3000(sal)
--7839 (empno) >3000

--Oracle的異常處理
DECLARE
v_name emp.ename%TYPE;
v_sal emp.sal%TYPE;
BEGIN
SELECT ename,sal
INTO v_name,v_sal
FROM emp
WHERE empno = &no;
IF v_sal <3000 THEN
DBMS_OUTPUT.PUT_LINE(v_name||'的工資是:'||v_sal);
END IF;
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('員工號輸入錯誤!');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('其他錯誤!');
END;

--預定義異常處理
DECLARE
v_name emp.ename%TYPE;
v_sal emp.sal%TYPE:=&salary;
BEGIN
SELECT ename INTO v_name FROM emp WHERE sal = v_sal;
DBMS_OUTPUT.put_line(v_name||'的工資是:'||v_sal);
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.put_line('沒有該工資的員工');
WHEN TOO_MANY_ROWS THEN
DBMS_OUTPUT.put_line('多個員工具有該工資');
WHEN OTHERS THEN
DBMS_OUTPUT.put_line('其他異常');
END;

SELECT * FROM EMP;
--800(sal), 一個員工
--1250 多個員工
--8000 0個員工

--獲取異常的錯誤代碼和錯誤信息
BEGIN
DELETE FROM DEPT WHERE deptno = &deptno;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.put_line(SQLCODE||'####'||SQLERRM);
END;


--非預定義異常的處理
DECLARE
--1:定義非預定義異常的標識符
e_fk EXCEPTION;
--2:將定義好的異常與Oracle錯誤建立關聯
-- -2292錯誤代碼
PRAGMA EXCEPTION_INIT(e_fk,-2292);
BEGIN
DELETE FROM DEPT WHERE deptno = &deptno;
EXCEPTION
--3:捕獲並處理異常
WHEN e_fk THEN
DBMS_OUTPUT.PUT_LINE('此部門下有員工,不能刪除此部門!');
WHEN OTHERS THEN
DBMS_OUTPUT.put_line(SQLCODE||'####'||SQLERRM);
END;

--自定義異常
DECLARE
v_empno emp.empno%TYPE:=&empno;
--1:定義異常
e_no_result EXCEPTION;
BEGIN
UPDATE emp SET sal = sal + 100 WHERE empno = v_empno;
IF SQL%NOTFOUND THEN
--2:指定觸發異常的時機
RAISE e_no_result;
ELSE
COMMIT;
END IF;
EXCEPTION
--3:捕捉並處理異常
WHEN e_no_result THEN
DBMS_OUTPUT.put_line('數據更新失敗!');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('其他錯誤');
END;

--異常處理函數SQLCODE和SQLERRM的使用
DECLARE
v_empno emp.empno%TYPE:= &empno;
v_ename emp.ename%TYPE:= '&ename';
v_deptno emp.deptno%TYPE:= &deptno;
BEGIN
INSERT INTO emp(empno,ename,deptno)VALUES(v_empno,v_ename,v_deptno);
IF SQL%FOUND THEN
DBMS_OUTPUT.put_line('數據插入成功!');
COMMIT;
END IF;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.put_line('錯誤號:'||SQLCODE);
DBMS_OUTPUT.put_line('錯誤信息:'||SQLERRM);
END;

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、下載解壓 1、Zookeeper簡介 Zookeeper 作為一個分散式的服務框架,主要用來解決分散式集群中應用系統的一致性問題,它能提供基於類似於文件系統的目錄節點樹方式的數據存儲,但是 Zookeeper 並不是用來專門存儲數據的,它的作用主要是用來維護和監控你存儲的數據的狀態變化。通過監控 ...
  • windows 2003,自己買吧...安裝IIS6.0:安裝系統後在"控制面板"->"添加或刪除程式"->"添加/刪除Windows組件"->雙擊"應用程式伺服器"->然後選中"Internet信息服務(IIS)"->確定->安裝完畢...下載PHP:http://cn2.php.net/get/ ...
  • 關於CPU和程式的執行 CPU是電腦的大腦。 1. 程式的運行過程,實際上是程式涉及到的、未涉及到的一大堆的指令的執行過程 。 當程式要執行的部分被裝載到記憶體後,CPU要從記憶體中取出指令,然後指令解碼(以便知道類型和操作數,簡單的理解為CPU要知道這是什麼指令),然後執行該指令。再然後取下一個指令 ...
  • 網上有很多關於PHP在IIS下配置的教程,但都是一些很理性化的東西,我從裡面整理出來這個教程 發出來為了方便參考,,有什麼問題也可以大家一起交流,,如果有什麼不對的地方,請指正.. 下麵的教程都是在windows 2000下實現的,其他系統請自己參照修改, 操作系統目錄:c:\winnt PHP預設 ...
  • 繼續Linux命令學習,沒有什麼捷徑,每個命令都去敲幾遍就熟悉了,第二篇學習的是一些比較實用類的命令,主要是從開發的角度進行學習,並不深入,話不多說,開始! 一、系統管理類 1.1 stat --stat 顯示指定文件的相關信息,比ls命令顯示內容更多 1.2 who --顯示線上登錄用戶 1.3 ...
  • 《SQL Server溫故系列》,sql,crud。毋庸置疑,開發者最常用的資料庫技術就是 SQL 了,即便是 ORM 大行其道的今天也常常需要寫 SQL 語句。而 SQL 語句中最常用的就是增刪改查了,本系列就先對增刪改查語句來個系統的回顧吧! ...
  • 《SQL Server溫故系列》,sqlserver教程,tsql教程,sql教程,SQL Server 系列博客導航目錄 ...
  • python用於操作數據的pymysql模塊,及相關的視圖,觸發器,函數,存儲過程,事務,SQL註入等相關拓展。 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...