RAISE_APPLICATION_ERROR
/* =========================================================== | 使用RAISE_APPLICATION_ERROR存储过程。 ============================================================ */ --演示该存储过程 BEGIN RAISE_APPLICATION_ERROR(-20000, 'Account past due.');-- explicitly raise exception END; --创建子程序 CREATE OR REPLACE PROCEDURE account_status ( due_date DATE, today DATE ) IS BEGIN IF due_date < today THEN RAISE_APPLICATION_ERROR(-20000, 'Account past due.');-- explicitly raise exception END IF; END; / --调用子程序 DECLARE past_due EXCEPTION; -- declare exception PRAGMA EXCEPTION_INIT (past_due, -20000); BEGIN account_status (to_date('2010-7-9','yyyy-mm-dd'), to_date('2010-7-10','yyyy-mm-dd')); -- invoke procedure EXCEPTION WHEN past_due THEN -- handle exception DBMS_OUTPUT.PUT_LINE(TO_CHAR(SQLERRM(-20000))); END; /* =========================================================== | 使用用户自定义实现。 ============================================================ */ CREATE OR REPLACE PROCEDURE account_status ( due_date DATE, today DATE ) IS past_due EXCEPTION; -- declare exception BEGIN IF due_date < today THEN RAISE past_due; -- explicitly raise exception END IF; EXCEPTION WHEN past_due THEN -- handle exception DBMS_OUTPUT.PUT_LINE ('Account past due.'); -- INSERT INTO t VALUES(due_date); END; / --调用子程序 BEGIN account_status ('2010-7-9', '2010-7-10'); -- invoke procedure END;
用户自定义异常
/* =========================================================== | 查询编号为7788的雇员的福利补助(comm列)。 ============================================================ */ DECLARE v_comm employee.comm%TYPE; e_comm_is_null EXCEPTION; --定义异常类型变量 BEGIN SELECT comm INTO v_comm FROM employee WHERE empno=7788; IF v_comm IS NULL THEN RAISE e_comm_is_null; END IF; EXCEPTION WHEN NO_DATA_FOUND THEN dbms_output.put_line('雇员不存在!错误为:'||SQLCODE||SQLERRM); WHEN e_comm_is_null THEN dbms_output.put_line('该雇员无补助'); WHEN others THEN dbms_output.put_line('出现其他异常'); END;
非预定义异常
/* =========================================================== | 非预定义异常 ============================================================ */ --需求:修改编号为7788的雇员所属的部门编号为99。 --前提是要在employee和dept表建立主外键约束 ALTER TABLE employee ADD CONSTRAINT pk_empno PRIMARY KEY(empno); ALTER TABLE dept ADD CONSTRAINT pk_deptno PRIMARY KEY(deptno); ALTER TABLE employee ADD CONSTRAINT fk_deptno FOREIGN KEY(deptno) REFERENCES dept(deptno); DECLARE e_integrity EXCEPTION; PRAGMA EXCEPTION_INIT(e_integrity,-2291); -- -2291为Oracle定义的错误号,违背了主外键约束 BEGIN update employee set deptno=99 where empno=7788; EXCEPTION WHEN e_integrity THEN dbms_output.put_line('该部门不存在'); END; SELECT * FROM employee;
预定义异常
/* =========================================================== | 预定义异常 ============================================================ */ --未进行异常处理 DECLARE v_ename employee.ename%TYPE; BEGIN SELECT ename INTO v_ename FROM employee WHERE empno=1234; dbms_output.put_line('雇员名:'||v_ename); END; --进行异常处理 DECLARE v_ename employee.ename%TYPE; BEGIN SELECT ename INTO v_ename FROM employee WHERE empno=1234; dbms_output.put_line('雇员名:'||v_ename); 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('错误号:'||SQLCODE||'错误描述:'||SQLERRM); END;
相关推荐
Oracle 异常处理。即使是写得最好的PL/SQL程序也会遇到错误或未预料到的事件。一个优秀的程序都应该能够正确处理各种出错情况,并尽可能从错误中恢复。任何ORACLE错误(报告为ORA-xxxxx形式的Oracle错误号)、PL/SQL...
ORACLE异常处理剖析.pdf
oracle异常处理 把各种异常和解决方式总结出来了
oracle 异常处理剖析共.pdforacle 异常处理剖析共.pdforacle 异常处理剖析共.pdforacle 异常处理剖析共.pdforacle 异常处理剖析共.pdf
这个是oracle课成异常处理章节后面的部分习题答案,大概四五道题的答案。
oracle笔记异常处理,异常处理的代码案例和知识点笔记!
归纳整理部分Oracle异常问题,及解决办法 1、 ORA-12651:TNS:没有监听器 2、 ORA:-12545:因目标主机和对象不存在,连接失败 3、。。。。。。。。
详细介绍 ORACLE 异常错误处理异常错误处理异常错误处理
oracle异常处理步骤自己总结的,不太成熟,大家可以不看,只是我的备忘录
Oracle 存储过程异常处理.docx
Oracle数据库因断电导致异常的解决方案,如:数据库服务开着,监听正常,但是连接数据库不成功,或者连接上无法查询数据,报错:ORA-01034: ORACLE not available
NC的Oracle优化及异常数据处理NC的Oracle优化及异常数据处理
oracle预定义异常, ORACLE开发存储过程,函数,触发器等程序时,会经常使用到异常处理,该文档列举了常见的异常以及异常说明
Oracle_存储过程exception异常处理大全及实例经典最终.docx
oracle游标和异常处理、函数、存储过程和包的说明 并带有实际操作的语句
福建电脑期刊2013年第2期的一篇论文 oracle scn增长过快问题研究和解决方案探索 易金旭
ORACLE 用户自定义异常小例子 1.进入pl/sql测试窗口 2.执行语句 declare empname varchar2(255); customize_exp EXCEPTION; –自定义异常 begin FOR c IN (select d.* from scott.dept d) ...
Oracle 9i启动异常处理.pdf
Oracle数据库中的异常:没有...4.多异常处理:Java的多异常是通过数据类型区分,Oracle数据库的多异常是通过异常编号区分。 区别不同的异常是实现多异常处理前提。 declare verror exception;–定义异常变量