在plsql块中select语句什么情况下执行将产生例外情况

在plsql块中select语句什么情况下执行将产生例外情况,第1张

--一.例外简介

--1.例外分类:预定义例外,非预定义例外,自定义例外

--2.处理例外:例外传递-->捕捉例外

--二.处理预定义例外

--见ORALCE预定义异常列表

--三.处理非预定义例外

--非预定义例外用来处理与预定义例外无关的ORACLE错误,若未处理,ORALCE错误传递给调用环境

--DEMO

SQL>SET SERVEROUTPUT ON

SQL>DECLARE

2--定义例外

3e_integrity EXCEPTION

4--关联例外与ORACLE错误

5PRAGMA EXCEPTION_INIT(e_integrity,-2291)

6 BEGIN

7UPDATE emp SET deptno=&dno WHERE empno=&eno

8 EXCEPTION

9--引用例外

10WHEN e_integrity THEN

11 dbms_output.put_line('该部门不歼禅伏存在')

12END

13 /

输入 dno 的值: 11

输入 eno 的值: 7788

原值7: UPDATE emp SET deptno=&dno WHERE empno=&eno

新值7: UPDATE emp SET deptno=11 WHERE empno=7788

该部门不存在

PL/SQL 过程已成功完成。

--四.处理自定义例外

--自定义例外处理处理与ORACLE错误无关,由开发人员为特定情况所定义的例外

--DEMO

SQL>SET SERVEROUTPUT ON

SQL>DECLARE

2--定义例外

3e_integrity EXCEPTION

4--关联例外与ORACLE错误

5PRAGMA EXCEPTION_INIT(e_integrity,-2291)

6

7--自定义例外

8e_no_employee EXCEPTION

9 BEGIN

10UPDATE emp SET deptno=&dno WHERE empno=&eno

11IF SQL%NOTFOUND THEN

12 RAISE e_no_employee

13END IF

14 EXCEPTION

15--引用例外

16WHEN e_integrity THEN

17 dbms_output.put_line('该部门不存在')

18WHEN e_no_employee THEN

19 dbms_output.put_line('该雇员不存在袭敬')

20END

21 /

输入 dno 的值: 10

输入 eno 的值: 1111

原值 10: UPDATE emp SET deptno=&dno WHERE empno=&eno

新值 10: UPDATE emp SET deptno=10 WHERE empno=1111

该雇员不存在氏携

PL/SQL 过程已成功完成。

--五.使用例外函数

--1.SQLCODE,SQLERRM

--SQLCODE用于返回ORACLE错误号

--SQLERRM用于返回该错误号所对应的错误消息

SQL>undef v_sal

SQL>DECLARE

2v_ename emp.ename%TYPE

3 BEGIN

4SELECT ename INTO v_ename FROM emp

5 WHERE sal=&&v_sal

6dbms_output.put_line('雇员名:'||v_ename)

7 EXCEPTION

8WHEN NO_DATA_FOUND THEN

9 dbms_output.put_line('不存在工资为:'||&v_sal||'的雇员')

10WHEN OTHERS THEN

11 dbms_output.put_line('错误号:'||SQLCODE)

12 dbms_output.put_line('错误信息:'||SQLERRM)

13 END

14 /

输入 v_sal 的值: 9876

原值5: WHERE sal=&&v_sal

新值5: WHERE sal=9876

原值9: dbms_output.put_line('不存在工资为:'||&v_sal||'的雇员')

新值9: dbms_output.put_line('不存在工资为:'||9876||'的雇员')

不存在工资为:9876的雇员

PL/SQL 过程已成功完成。

--2.RAISE_APPLICATION_ERROR在PL/SQL应用程序中自定义错误消息

--该过程只能在数据库端的子程序中执行,而不能在匿名块或客户端的子程序中使用

--语法:raise_application_error(error_number,message[,{TRUE,FALSE}])

--error_number:定义错误号,错误号必须是在-20000至-20999之间的负整数

--message:指定错误消息

--TRUE:该错误会与之前的错误一起放在堆栈中保存

--FALSE:默认值,替换先前的所有错误

--DEMO

SQL>CREATE or REPLACE PROCEDURE raise_comm

2(eno NUMBER,commission NUMBER)

3 IS

4v_comm emp.comm%TYPE

5 BEGIN

6SELECT comm INTO v_comm FROM emp WHERE empno=eno

7IF v_comm IS NULL THEN

8 RAISE_APPLICATION_ERROR(-20001,'该雇员无补助')

9END IF

10 EXCEPTION

11WHEN NO_DATA_FOUND THEN

12 dbms_output.put_line('该雇员不存在')

13 END

14 /

紧急放行是生产产品过程中因某种原因缺搜颂少某个过程确认而不影响产品质量的产品为了达到预期用途而采用的放行方式。

例外放行是,产品各个生产程序都具备,世弯郑产品以确保合格,但没有某种原因没有出厂闹此手续,但客户要急用,所以必须放行。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12565542.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存