1、异常处理的概念与分类 a、什么是异常? 异常:是程序在正常执行过程中发生的未预料的事件。 b、什么是异常处理? 异常处理是为了提高程序的健壮性,使用异常处理部分可以有效地解决程序正常执行过程中可能出现
EXCEPTioN
WHEN first_exception THEN
statement1;
......
WHEN second_exception THEN
statement1;
......
WHEN OTHERS THEN
statement1;
......
DECLARE
BEGIN
EXCEPTION
END; --块结束标记
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;
1、在PL/SQL块中定义部分定义异常情况:<异常情况> EXCEPTION;
2、将其定义好的异常情况与标准的ORACLE错误联系起来,使用PRAGMA EXCEPTION_INIT语句:PRAGMA EXCEPTION_INIT(<异常情况>, <错误代码>);
3、在PL/SQL块的异常情况处理部分对异常情况做出相应的处理。
BEGIN
DELETE FROM dept WHERE deptno = &deptno;
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line(SQLCODE || '###' || SQLERRM);
END;
-2292###ORA-02292: 违反完整约束条件 (SCOTT.FK_DEPTNO) - 已找到子记录
2、删除dept表中指定部分的信息:
DECLARE
--1、定义非预定义异常的标识符
e_fk EXCEPTION;
--2、把Oracle错误和异常信息建立关联
-- -2292 违反外键约束的错误号
PRAGMA EXCEPTION_INIT(e_fk, -2292);
BEGIN
DELETE FROM dept WHERE deptno = &deptno;
EXCEPTION
WHEN e_fk THEN
-- 3、捕捉并处理异常
dbms_output.put_line('此部门下有员工,不能删除!');
WHEN OTHERS THEN
dbms_output.put_line(SQLCODE || '###' || SQLERRM);
END;
此部门下有员工,不能删除!
DECLARE
v_empno emp.empno%TYPE := &empno;
e_no_result EXCEPTION;
BEGIN
UPDATE emp SET sal = sal + 100 WHERE empno = v_empno;
IF SQL%NOTFOUND THEN
RAISE e_no_result;
ELSE
COMMIT;
END IF;
EXCEPTION
WHEN e_no_result THEN
dbms_output.put_line('数据更新失败!');
WHEN OTHERS THEN
dbms_output.put_line('其他错误');
END;
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;
raise_application_error(error_number, message);
--结束END--
本文标题: Oracle专题13之异常错误处理
本文链接: https://www.lsjlt.com/news/39045.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-05-14
2024-05-14
2024-05-14
2024-05-14
2024-05-14
2024-05-14
2024-05-14
2024-05-14
2024-05-14
2024-05-14
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0